André Pena

@andrerpena

Being the CEO of your career, as a software engineer

“Nothing is more expensive than a missed opportunity” — H. Hackson Brown, JR.

I consider myself a reasonably successful Software Engineer / Architect and I decided to share with you the attitude and behavior that contributed the most in my career development. Instead of writing a “listicle” (I hate this name :)), I decided to tell a little bit about my story and the lessons I’ve learned along the way.

I started my professional career at age 21, 11 years ago. I was extremely excited to finally be a developer. I felt like I was being paid to do what I’d do for free, if I hadn’t bills to pay. I was so curious about everything and the simple fact that I was being able to learn all day long was a huge compensation to me. Before long, I started to be seen not only as someone technically skilled, but also as someone with good judgement, that would make good design choices.

Being a developer started to be not only what I did for living, but a major part of myself. I took the code so seriously, and I was so excited about that, that I couldn’t keep it to myself. I started being an advocate of good design, coaching others and, because I spent so much of my free time getting up to date, I started having solid arguments to lead and suggest the technical direction of the projects I worked on. In order to sell your ideas and be the driver of innovation, it’s crucial that you do so with energy and passion. Take your ideas seriously and personally, believe in yourself and in what you’re selling. People will feel your energy and skill, and this will build you trust. I’ve seen so many good developers that don’t make it to the spotlights because they’re too shy and kept to themselves.

Lesson #1: Don’t be shy, share your knowledge, spread the word, write about your thoughts, and, most importantly, fight hard for what you believe. Being able to sell yourself as a good developer is as important as being a good developer. Don’t be afraid to speak your mind and don’t wait for someone to offer you a senior / tech-lead position. Be this person, first.

Along the way, one very important thing that I did was to build an online presence. I didn’t spend that much time with it, but what I did ended up being significant and important for the development of my career.

In order for you to learn technologies, you have to create projects, and if you’re going to create projects on your own free time, why not to do something that may be of use to others and share them on GitHub? Besides open-source, Stackoverflow was very important to me. People there are so anal-retentive (sorry for the expression, but I couldn’t find any better description) that when they start accepting your view, it’s a huge validation for your knowledge. And of course, a solid SO profile will do no harm to your CV, and you’ll learn a lot along the way.

Lesson #2: Build an online presence. Regular CVs show very little about who you really are and people can easily lie on them. Unlike other professions, in IT, it’s really easy to build an online profile that will back your CV up and provide much more insight on who you are and what technologies you are proficient at. Build projects on GitHub, answer questions on Stackoverflow, write on Twitter or Medium, and build a personal website to be the hub of your professional life. You’ll be surprised with the results.

One challenge that I faced, that I feel many of you will resonate with, was that, the better I got as a developer and the more I’ve built trust, the more I started being “responsible” for important features. The more I was responsible for features, the more I participated in meetings, and finally, before I knew it, I was spending more time with architecture decisions and effort estimations than I was with coding. Yes. I’ve become a Software Architect.

This is an important moment in the life of a developer. If you do everything right, if you can be trusted, if you start to be seen as a leader, you’ll be naturally dragged to an Architect position (if you don’t become a manager, of course, which I never considered doing). Now you have to stop and make a decision.

If you choose to be an Architect, you’ll climb up the corporate ladder, become influencial and make more money. But, on the flip side, you’ll probably lose grasp of coding, unless you fight really hard against it. If you get far enough, you’ll find yourself spending most of your time in meetings, making PowerPoint presentations and Project Management (including effort/cost estimations, resource management, risk management, deadlines…), and everything that once was practical will now be reduced to blocks and arrows. Now you have to stop and ask yourself: Is that what you really want? I’m not saying, by any means, that being a Software Architect is a bad career decision, or that it’s impossible to be a hands-on Architect. I’m just saying that, if you pick up that route, it has to be conscious and you have to be aware of the pros and cons.

Pros:

  1. Influence in the direction of the projects and the company as a whole.
  2. Status inside the company and everything that comes along with it.
  3. Money.

Cons:

  1. You’re likely to lose grasp of coding and it will make you less likely, over time, to find a job as a developer, if that’s what you want. You can prevent this from happening, as I did, but it won’t be easy.
  2. It is more difficult to switch jobs as a Software Architect than it is as a Software Engineer. First, because there’s less need for Architects, and second, because it’s pretty common for Architects to evolve from great Engineers, so you’re more likely to be promoted to an Architect rather than being hired as one.
  3. Your knowledge will start to be more about the internal processes and technologies of the company you work for, rather than industry-standard skills that are valuable to other companies. You’ll become a valuable asset for the company you work for, and not as valuable to other companies.
Lesson #3: Make a conscious decision about whether or not to become an Architect. If you choose to become an Architect, try, as hard as you can, to keep coding and up-to-date with the new technologies and trends. Losing grasp of coding will be frustrating and drastically reduce your job mobility. Don’t do it. If you love being a developer, as I do, you can negotiate the conditions or become a tech-lead, which will grant you influence, while still allowing you to do what you love.

Back to my professional life…

I ended up becoming an Architect of a multi-national team on a multi-national giant company, and I’ve learned a lot. I mean, really. I’m really grateful for this opportunity and all the wonderful experiences I had. However, this is not what I wanted. I wanted to be a Senior Software Engineer, and that lead me back to the job hunt, and to the final chapter of this article.

12 months ago I decided to use Stackoverflow Jobs to find a job that would be either remote or support my relocation to Europe (I live in Brazil). I particularly like Stackoverflow Jobs because:

  1. It has a pretty good CV editor that integrates with Stackoverflow, obviously, and GitHub. It also builds a pretty cool timeline they call your “developer story”. It also lets you export your CV as a PDF file.
  2. For most of the jobs, you can apply with just one click.
  3. It lets you set up filters like “VISA sponsorship” or “remote”, as well as the technologies you’d like to work with, like “javascript” and “react”, and they will send you e-mails with job opportunities. Again, for most of them you can apply with one click.

The most important thing that I’ve learned from this job hunt was how important it is to be great at algorithms and data-structures. You like it or not, most companies won’t even talk to you about your background and skills before you pass a white-board or automated coding challenge at Codility or HackerRank. And I found out I really sucked at it. Let’s be honest, no matter how good you are, how often do you have to balance a binary search tree in your life? But that’s the way it is, so you better be prepared.

I’ve spent months training. I’ve implemented my own data-structures and the most common algorithms, both in JavaScript and in Python, and after a while, I ended up getting good at it, and this was more important than I ever thought.

Lesson #4: If you think there’s a slight chance that you’ll ever need to find another software development job, keep your problem-solving skills sharp. Sign-up for a HackerRank account and dive into algorithms and data-structures. You should start with the excellent Cracking the Coding Interview Challenges.

Finally, with my algorithm skills up-to-date, and with my online profile set up, I was able to receive excellent offers from multiple companies around the world. I’m going to switch jobs soon and I’ll let you know about my experience once everything is finished.

A final word of advice…

Lesson #5: If you’re not happy where you are right now, do not settle, do not be afraid. Don’t let fear to prevent you from taking that leap separating you from your dreams. When you’re old, you’ll never forgive yourself.

I wish you all the luck in your journey.

“What you’re supposed to do when you don’t like a thing is change it. If you can’t change it, change the way you think about it. Don’t complain.” ― Maya Angelou, Wouldn’t Take Nothing for My Journey Now

About the Author

I’m André Pena, I like writing and building stuff. Recently I built: https://remoted.io, a remote job aggregator for developers, check it out! 💗

More by André Pena

Topics of interest

More Related Stories