On January 26, 2004, I started my first job in tech. I graduated with a computer science degree one month prior and felt very fortunate to land work as quickly as I did. I lived in Puerto Rico, where tech jobs around software development were minimal at the time. I remember scouring the classified section in the local newspaper and finding very little that interested me. I don't recall how I landed that first job or why I applied in the first place since it wasn't for a software developer role, but I did feel grateful for the opportunity to get my foot in the door.

It doesn't feel like 20 years have passed since that day, but here we are. The milestone has me in a reflective mood, reflecting on the wild ride that began on that first day at work. As with any journey, it's had plenty of ups and downs and probably some knowledge that others may find helpful as they navigate through their own careers in tech. Throughout this two-part series, I wanted to share some of the main lessons that have stuck with me and made me who I am today, both in business and life.

1) The role you have today can change tomorrow

My first job in tech wasn't for software development. The company, a computer recycling factory, hired me as a computer repair technician. They worked with an offshore team to maintain a custom internal application. Unfortunately, the application had issues that required frequent fixes. One day, the factory manager ran into a bug that blocked his work. The average turnaround time for the offshore team to fix bugs was around five days. I asked if I could look at the application's source code to see if I could spot anything weird. I got lucky, found the bug that day, and pushed a fix. After deploying and unblocking the factory manager, my role changed from PC repairman to a PHP developer.

Throughout my career, I've had a few moments where the company hired me for one role, then switched it to something else when something popped up that suited me better. I've moved from repairing computers to repairing buggy web apps, from software engineer to project manager, and from individual contributor to tech lead. The lesson here is that you shouldn't expect to always remain in the role you have today, and learning to embrace this can lead to your career growth. It can become an unexpected or unwanted switch, but in my experience, it's often for the best.

2) Exploring the unknown can lead you down a better path

My university barely taught anything related to web development. I could see in the early 2000s that web development was on the rise, so I began taking time to learn it on my own. I was unaware that exploring the realm of web development would help me land that first development job. After learning and working on PHP projects, I stumbled upon Ruby on Rails at my local bookstore a few years later and began tinkering with it on the side, with no purpose other than the joy of learning something fun. The time I spent exploring Rails gave me enough experience to get hired at a startup in New York City. Almost all my jobs have been thanks to having taken the time to research something I have no experience with and no tangible reason to spend my time on.

A lot of people wait around for opportunities to learn something new. They wait for their job to give them a task requiring them to pick up a new programming language, or they don't explore a new technology because they don't know how to make money from it. I've learned that relying solely on external motivators to make the time for learning is a big mistake that can hold you back from realizing untapped potential. If I hadn't explored PHP or Ruby on Rails, I wouldn't have received the amazing opportunities the tech world has blessed me with in the past twenty years. Permitting yourself to research something new can take you to places you never imagined.

3) Be intentional with what you choose to learn

In an effort to get myself to study some topics, I went on a certification spree in the past two years. I paid for study materials and the exams out of my pocket and sacrificed hours of my personal time for months. I obtained four certifications around topics I had little experience with, like AWS and Kubernetes. Was seeking out certifications for this purpose worth the time and money? If I'm honest, not really. While I did learn a ton in pursuing those merits, I've barely put that knowledge to real-world use and haven't made any money off of those certifications so far.

I admittedly wasn't doing my studying and learning in a measured, intentional manner. I was simply attempting to stack up credentials, hoping it would lead me to something better, just like when I picked up PHP and Rails long ago. I wanted to prepare myself for when a possibility arose where I could put those skills to use, but that's not an effective way to learn. Continuous learning is vital for growing in tech, and exploring the unknown, as mentioned earlier, can lead to better opportunities. But at the same time, don't pick up skills and certifications like they were trading cards just to add to your resume or LinkedIn profile.

4) You need to take leaps of faith

Two years into my first job, I knew I hit the ceiling for my professional growth. I stayed for two more years at the company due to scarce opportunities locally, knowing I would stagnate if I didn't do something about it. In late 2007, I interviewed for a company based in New York City, and they offered me a software engineering position. I had wanted to migrate to the United States for better opportunities but was terrified to make the move, mostly because I barely had enough money to cover a plane ticket and little else. Thankfully, my cousin, who lived in New York City then, offered to help until I got on my feet. I got enough courage to accept. It was one of the best decisions I made in my career and life.

Since then, I've had other times where I went into a new situation with little information about how it would turn out. Instead of finding a new job in New York a few years after moving there, I moved cross-country to the San Francisco Bay Area, where I knew no one. When I found myself in some challenging job situations, I opted to go into freelancing without a safety net. Each moment required me to take a leap of faith, and all these situations turned out much better than expected. Whatever my fear-ridden brain attempted to protect me from never materialized. When faced with a choice that scares you, don't let the fear paralyze you and make you instantly block it from your brain. It can point you in the right direction. Usually, the only person stopping us from reaching new heights is us.

5) You're the only person responsible for your career

"You're not performing to your standards, so we'll put you on a performance improvement plan."

I never thought I would hear these words coming from my manager, but it happened once. No one wants to listen to those words coming from their manager. If we're being honest, these words usually are a precursor to a firing. After going through my version of the five stages of grief, I tried to make sense of what happened. I could come up with dozens of reasons why my output declined after years in the company, like having a rotating cast of managers with conflicting objectives or having few new opportunities because my time zone conflicted with everyone else. We tend to have the superpower of promptly generating plausible excuses for our challenges.

Eventually, I realized the responsibility lay on me and only me. I could have been more vocal about the conflicting goals set by different managers, and I could have done more to make the time difference less of an issue. However, I relied too much on my manager to handle those issues, leading to my inaction and inevitable poor performance. That situation taught me I'm the only person responsible for my career and should never leave it in someone else's hands. A good manager will help you navigate your career, but you must still take yourself where you want to go. No one will ever do that for you, and you shouldn't expect it.

6) Your network is more important than your skills

Early in your career, you likely won't have the network to lean on. You might have a family member or friend working at a company willing to give you an opportunity, but you're more likely to go through the regular job-hunting process to find your first gig. My first few full-time jobs in tech happened because I sent my resume, interviewed, and received an offer. However, as I grew my network, I began getting better opportunities. A former co-worker would ask if I was interested in working at their new company, or a previous client referred me to a friend to do some work. The broader my network became, the more often I received these messages without asking for them.

When it comes to looking for a new job, your network is much, much more important than the skills you have. You can have all the experience, skills, and certifications under your belt, but you're not going far in the hiring process if you don't gain a company's trust. The right network contact can bypass that trust-building step instantly. It's also a great feeling when you can vouch for someone you know will do an excellent job. Personal networks are especially beneficial during down periods in the tech industry or an economic recession when jobs are challenging to come by. Make sure you take some time to focus on maintaining and improving your relationships and connections throughout your career—you never know when you need some help from others.

7) Programming languages and tools matter less than you think

As software engineers, we can become somewhat obsessed with the programming languages and tools that we use for our work. It often leads to long discussions among team members about what tech stack to use or which framework to use for a new project. In early-stage tech startups, these discussions make a difference in molding the team and the company's future. But often, these decisions happen with established organizations, and they take far too long and aren't worth the time and mental energy they consume. I've been a part of companies that have burned weeks of development time deciding on a tool or migrating to a new platform or framework that had no benefit for the end user and little benefit for the team.

Do you think most users of your applications care that you migrated your application to the hot new JavaScript framework on the block and split your backend into microservices deployed on multi-region Kubernetes clusters? No, they only care that your application works for their needs and that they're getting value from it. We still need to argue about the tools we use to build our applications, especially when starting a new project. However, please don't dwell on it for too long since the law of diminishing returns kicks in quicker than you expect.

8) The quality of your code also matters less than you think

As a developer or tester, do you spend too much time writing code or doing testing work to get it as close to your "perfect" vision as possible? I'm guessing I'm not alone when I say I can often turn into a perfectionist and spend the complete day refactoring a function or updating an automated test case that, at the end of the day, does the same thing as before with minimal benefits. Sometimes, it yields zero benefits. At best, you might learn something new to carry with you in your career. However, in most cases, the ones keeping you employed—your organization and your customers—don't care about the code behind the app.

I've been a part of engineering teams that have spent days or weeks trying to write clean, maintainable, and testable code but failed to ship something useful to their customers on time. It won't benefit anyone if you have the perfect code and no one uses it, or they move to something that serves them better. I've also seen codebases that look like they are held together by duct tape that can collapse anytime. Still, that code helped the team quickly ship a highly profitable application. I'm not saying that you need to care less about your craft for the sake of speed, but you must learn to become more pragmatic with your work. You can't avoid technical debt, no matter how hard you try. Learning to manage it is a superpower that will take you further in your career.

9) Make your health a priority over work

I spent years reading about startup culture during the dot-com era, and the excitement and energy I got from stories I read made me desperately want to work in that environment. The first startup I joined was full of excitement and energy, but it also meant long hours and a lot of pressure to squeeze out as much as possible with such a tiny team of six. I often worked 60-hour weeks and over the weekend, leading to almost no exercise and a horrible diet of fast food for all of my meals. I was so exhausted one day that I fell asleep at work—in the middle of a meeting while my boss was talking directly to me.

The same pattern continued in other startups I joined in the next few years. By the time I was 30, I was nearly 300 pounds (135 kilograms), chronically stressed, and feeling depressed. It took me a few years, but I realized that my health was far more important than any money I made while I worked, and I began prioritizing health over my career. Between eating healthier, exercising more, and taking up meditation, the shift in both my physical and mental well-being is far better than the constant feelings of lethargy, anxiety, and depression. Burnout is real and can cause disastrous results in your professional and personal life if not attended to early. A common bit of advice I offer to younger developers and testers is for them to begin taking care of themselves before it's too late.

10) Don't overwork yourself for others

That first startup mentioned in the previous section showed a promising future when I joined. The application had a decent amount of active users. The company had some impressive-looking founders from different parts of the globe. The founders had been interviewed on some of the biggest morning shows in the U.S., talking about their grand vision for their company. All of these successes made me feel like I was part of something huge, and it pushed me to work those long hours with no days off for weeks at a time. I bought so much into this vision that I accepted a 10% salary reduction in exchange for a juicy chunk of equity.

Two years later, the startup ran out of money and let me go.

Throughout my career, I've worked at tons of startups and have accumulated equity at most of those places along the way. As of 2024, this paper money has given me a total of zero dollars. The promise of building something valuable that can lead to potential wealth is alluring, but let's be honest—it rarely happens. For every startup employee who overworked themselves in the early days and cashed out big time, thousands like me simply overworked and have nothing to show for it. If there's anything I wish I knew when I began my career, it's that I should never overwork for others. If you're rightfully rewarded financially and feel fulfilled with your career, you can make an argument for working long hours. But usually, the time and energy you pour into someone else's dream would be much better spent on yours.

I hope these reflections from my career have helped you develop different perspectives and curiosity about how you approach your work. Whether you're just starting in the tech industry or are a grizzled veteran like me, there's always something new to learn and ways to grow.

You can read part 2 of this series, with more insights with ten more lessons I've learned in my 20 years in tech.

This article was originally published on my website.

Are you looking to hire an experienced software engineer or tester?

Maybe you require experienced hands-on help implementing new projects or fixing technical problems you and your team are struggling with. Perhaps you can use some coaching and direction to avoid some of the pitfalls I fell into throughout my 20 years in tech, as mentioned in this article. If either of these sounds like something you and your team need, I'm here to help.

With a deep understanding of the technical and communication aspects of software engineering, testing, and DevOps, I can add a wealth of knowledge to your team. From streamlining development processes to implementing effective testing strategies, we can take your projects to another level and produce consistent, high-quality results for the long term. Reach out to me, and let's discuss how we can work together towards the success of your projects and the growth of your team.