Lessons From My Journey: Working for Free as a Software Engineer
Index
Introduction
Hi everyone!
As the year winds down, I’ve been reflecting on my software engineering journey and the lessons learned along the way. It’s been a challenging but rewarding path, filled with experiences that have shaped my career.
In my last blog post, I shared the beginnings of my developer journey at the end of 2023. Now, I want to dive deeper into the lessons I’ve learned—especially from taking unpaid roles to gain real-world experience.
Background
After College: Facing Reality
After graduating college, I found myself at a crossroads. Despite earning my degree, I lacked the internship experience and personal projects that many employers expect. I’d assumed that having a degree would be enough to land a job, but the harsh reality set in quickly—it wasn’t.
Initially, I didn’t take the job hunt seriously. I spent my time gaming, assuming opportunities would come to me. Around this time, the tech bubble burst, making an already tough job market even more competitive. Nearly a year after graduating, I realized something had to change.
I started small—building basic projects that, while unimpressive, taught me something new each time. Slowly, I began to improve. I discovered a passion for web development, which gave me a clear direction. I focused on creating a portfolio, helped my dad build his website, and gradually gained confidence.
Startup Experience: Working for Free
At the end of last year, I realized I needed real-world experience to grow. I took on two unpaid roles at startups:
Balancing both roles was intense, but they were invaluable for my growth. I learned how to ship features, debug effectively, and collaborate with teams. I also built a network that later became instrumental in my career.
One of the most transformative aspects of this experience was tackling projects I never imagined I could implement:
- A production-ready messaging app
- An authentication system
- A payment platform integration
These challenges taught me that I was capable of building anything with time, focus, and a clear goal. This realization gave me the confidence to take on even more complex problems and accelerated my growth as a developer.
Contracting: Trying Something New
After completing my unpaid roles, I transitioned into contracting—a transformative phase in my career. I took on multiple roles, including:
- Technical Project Manager (PM)
- QA Lead
- Software Engineer
During this time, I worked with Star/Child.
Initially, I doubted my ability to succeed as a PM, especially since I didn’t consider myself naturally communicative. However, I embraced the challenge and quickly realized how essential communication, problem-solving, and organization are in tech.
These roles allowed me to explore different facets of technology, from managing projects to ensuring software quality and functionality. What I once thought wasn’t part of my career ended up being an invaluable experience. It taught me skills like project management and quality assurance—critical for every developer to understand.
Full-Time Role: Breaking Into the Industry
Today, I’m proud to work as a Full Stack Engineer at a consulting agency. Each step of my journey—from building simple projects to managing complex roles—prepared me for this role. Now, I focus on delivering impactful solutions while continuing to learn and grow as a developer.
The Judgement of Unemployment
There was a time when I faced not only external challenges but also internal struggles. It wasn’t just about building skills or gaining experience—it was about battling perceptions, both from others and myself.
I found myself being judged by family and friends who saw me spending time building projects, learning new skills, and working in unpaid roles. To them, it seemed like I wasn’t putting in real effort or was simply waiting for a job to magically appear. They didn’t understand the work that went into building experience without a paycheck or the long-term value I was working toward.
I’m sure some of you have been there: feeling misunderstood while pursuing a path that doesn’t seem to make immediate sense to others. But those who haven’t walked that path don’t see the behind-the-scenes effort—the countless hours spent debugging code, building portfolios, or reaching out to others in the tech community. To me, this was an investment in my future, even if it didn’t look like “work” at the time.
There were moments when I questioned myself, wondering if others were right. But, looking back, I realize that those experiences shaped who I am today. They taught me resilience, the importance of staying true to my goals, and how to handle external judgement. Working for free wasn’t just a strategy for career advancement—it was a way of proving to myself that I had the discipline and passion to carve my own path, even when others didn’t understand it.
Lessons Learned
1. Cultivate a Growth Mindset
- Always stay curious and eager to learn.
- Build projects across various technologies and showcase them on GitHub and your portfolio.
- Focus on understanding how things connect and why they work. This foundational knowledge will help you tackle any problem.
- Seek mentorship and insights from experienced developers.
2. Leverage Tools and Resources
- Use tools that save time—don’t reinvent the wheel.
- React became a cornerstone of my development journey, helping me become more versatile.
- Leverage AI for learning and debugging. Asking the right questions can save you hours.
3. Embrace Challenges and Failures
- Don’t fear failure; every mistake is a learning opportunity.
- One of my biggest failures was a project that never launched. However, it taught me how to scope features effectively and set realistic goals.
4. Trust the Process
- In the early stages, it’s natural to question if your efforts will pay off. They will—every small step compounds over time.
- I focused on building projects instead of grinding through LeetCode, as hands-on experience aligned better with my goals. While it’s not the fastest path to landing a job, it was the most rewarding for me.
5. Seize Opportunities
- Say yes to opportunities, even ones that may not align with your career.
- Every experience is valuable, you will never know that it will be useful later on.
- Attend career and tech events to network with other developers. Approach these events as opportunities to grow, not just to find a job.
Conclusion
Final Thoughts
Working for free wasn’t easy, but it was one of the best decisions I’ve made in my career. It gave me the skills, confidence, and network I needed to break into the tech industry.
Wherever you are in your journey, remember: It’s not about where you start—it’s about staying curious, seizing opportunities, and trusting the process.
What’s the most valuable lesson you’ve learned in your career? Share your thoughts—I’d love to hear from you!