Reviewing 10 years of work
Table of contents
I started working 10 years ago, back in November 2013. I have been through a lot in this decade, which will make this more or less a retrospective, and my hope for this post is to help others grow and realize their potential.
To begin with, we'll go through my work experience in chronological order.
If you want to ask questions about anything in particular, feel free to leave a comment. If it's sensitive, send me an email (available in the footer) instead.
Before my first job
I started learning programming when I was 16 years old, using an amazingly simple Visual Basic .NET online tutorial by Home and Learn, and I still recommend them for complete beginners, as their content is high quality and is kept up to date. After doing that tutorial, I got some ASP.NET WebForms and some SQL Server beginner books that I read over the next year or so.
This was during high school (11th/12th grade) years, time during which I was also studying English in a private school. On that note, I last studied English in an academic setting after passing Cambridge's First Certificate in English (FCE) a couple of months before my 18th birthday.
Due to some reasons (or excuses), I ended up dropping the final year of high school a bit after I passed the FCE. I never had great grades at high school, honestly because I never cared much for it. This, however, meant that I had to get a job - and I was told over and over that it wouldn't happen. Unlike the vast majority of people my age then, I had the FCE and knew the basics of programming in .NET, some very basics of Windows Servers, and other stuff, and in my eyes that was enough to get a job.
At this point, you are likely thinking 'Boy, was he wrong!', and I would have to agree to some degree. It took me about 4 to 5 months of interviewing to get my first job. My first interview was the day after my 18th birthday, and, ironically enough, I was rejected for not having enough experience.
I started my first job towards the end of November 2013. I gave up the idea of getting an entry level software development position and instead started as a tech support/help desk agent. I knew that the company was big enough - massive, really - to be able to move to a development position later on, and that was exactly what I focused on.
For reasons beyond my pay grade, the project I was assigned to never really took off, which meant that I had a lot of free time. While this bothered me at first, I pivoted to using as much of that time as possible to continue growing my skills - reading books, doing simple apps and so on.
Not surprisingly, less than a year after I joined, the project had died. As I had shown interest in more technical stuff than my peers, I got interviewed (interviews for moving projects was common) for a tech support level 2 position that involved more technical troubleshooting. In retrospect, I owe a lot of my understanding and consideration for good customer experience to this role.
In this second role, I had to deal with very repetitive tasks that took a long time to solve. Being two hours in a call with an angry user (who tended to be managers) that was afraid of losing their work wasn't a walk in the park! In a few months, I'd learned enough of these tasks that I was able to create some tools that automated these processes, sometimes to the point of a few clicks, earning the client's recognition for our team.
As the project downsized and relocated less than half a year after I joined, I had to find another project to work on. I was very lucky, as someone from the level 3/development support department for that same client had left the company and they had a position to fill.
This was my last role at my first job, and my tasks were that of a .NET desktop developer for the most part. I had to work on WinForms, WPF, WCF, Office, and other common technologies at the time.
Many issues at the company had worn me out enough over the almost 3 years that I was there that I needed a change. Lack of modern development processes, and outdated, painfully slow hardware, were some of these issues.
Finding my second job took at least a few months of semi-active hunting. The first company had a local reputation for a lack of quality engineers, or in other words, there were senior engineers in title that knew as much as graduate engineers do in other companies. It might sound like a hyperbole, but both friends of mine and myself had heard stuff like "You know the years of experience there don't really count".
I finally found a place where I was asked to do a technical assessment based on an ASP.NET solution, which is how I could show off my skills best at the time. I got accepted as I was able to do most of the solution when a lot of candidates ended up doing almost nothing or their code wouldn't compile (we had Visual Studio 2013 and unmonitored internet access). Peeking into the future: over a year later, I was tasked to improve and 'renew' this exercise so we could have more standard ways of reviewing them.
I got into a team that was using .NET Core release candidates as version 1 hadn't even launched by then. At first, working with bleeding edge technology on a team that practiced real Scrum (so far, that team was the best at Scrum that I've seen in my career) was very exciting. It didn't take long for me to want a change, however, as the never-ending repetitiveness of Scrum bored me.
Ego sidenote: I was young (21-22), in the 3 years of my career I hadn't worked with a Senior (experience- and knowledge-wise) engineer, so I believed my knowledge was that good. But, of course, it wasn't, I didn't know crap then. I understood much later on that this was coupled with the effect some people get after the initial amusement of a new company/role wears off.
After talking with the head of development, I was moved to work individually with a separate client, both as a software engineer and kind of account manager, as the idea was to bring as many projects from that client as possible. I strongly believe this was the best that could have happened to my career at that point in time.
My point of contact with that client was an experienced software developer and architect. This person could smell bullshit a mile away, so I had to be able to technically justify my decisions, my answers to their questions, and even the hours we charged them. If I told them something that didn't immediately make sense from a technical standpoint, I was asked to back up my opinions with industry standards or links to documentation or whatever made sense.
Over the next 2 years or so, I continued working with this client on a variety of projects. As time passed, however, I did less coding tasks and instead did more project management. First it was only one client and a few projects, and gradually that increased until the time I left the company, when I was overseeing 4 or 5 clients with about 10 projects. I had to meet with most of the clients in their offices once in a while, report the progress of the projects to the head of development and so on.
It's worth mentioning that this was a small company with about 30 developers or so, with the vast majority being junior to semi-senior. This resulted in all of us (project managers) being technical project managers, as being hands-off entirely was impossible.
Over the last 12 months or so in my time there, I also had to analyze tenders, design solutions, estimate effort and help write business proposals when it made sense. I learned a lot through this process: language used in business proposals, costs that developers don't usually know about, dealing with requirements that are purposefully vague, and more.
Moving to Ireland
You might be wondering at this point "so what made you leave that job?", and that is an amazing question, really. It all started one morning with a LinkedIn InMessage from a European agency looking to hire Senior Software Engineers for Ireland. No, wait, let's take a step back. This actually started about 8 years before then, which was when I had determined that I wanted to live in another country.
I thought about the message request that day, and checked what were the requirements for getting a work permit in Ireland, which were in my favour as I had just completed 5 full years of experience a couple of months ago. So, after reviewing the company and making sure the message was legit, I said why not?! and started the interview process.
I was doubly lucky, turns out. The team that interviewed me were looking for people with experience of ASP.NET Core and event-based systems. I had been working on a system for that initial client, that involved both ASP.NET Core and RabbitMQ, just a few months before. I had learned enough of commands/events/etc to defend myself in an interview, which was exactly what I needed.
After about 3 months between interviews and legal matters, I was heading off to Ireland!
Things changed dramatically for my third job, there's no doubt there. I was in an entirely different country, that spoke a different language (that I was used to using only for technical conversations back then), and the culture in general was entirely different as well. The company used Jira, Bamboo, BitBucket, Octopus Deploy and AWS, all of which were new to me.
The other major difference was the long-term perspective. Up until then, I had only worked in projects where, once the project was delivered, we were done with it and only did basic maintenance where needed. This was different here, as we were working on a Software-as-a-Service product - something I had wanted to do for a long time. I had to think in an entirely different perspective from the one I was coming from: from little-to-no money and short-term projects to a lot of money and for a long-term product.
COVID-19 struck less than a year after I had moved to Ireland. I was fortunate enough that I was able to continue working from home, but at the same time, I was not. For someone living in the other side of the world, that barely knew anyone at all, isolation struck hard during 2020. For introverted people like me, isolation was harder than others, and it was clear that others couldn't see this. It certainly didn't help that management was constantly telling us that "we would go back to the office by X date", which was always postponed.
I spent a bit over 2 years at this job, time during which I worked in only one role. During this time, I learned much more about cloud development and architecture, how to draw better architecture diagrams, and how to document them. I owe a lot of this learning to the team's architect, who enjoyed teaching others and having technical discussions.
On the more interpersonal side, I also learned a lot about how to work with Irish people. Unfortunately, though, it was too late. The person that was supposed to be my mentor and help me navigate the cultural differences didn't do a good job. Instead of helping me grow as things happened, they'd tell me that people had misrepresented/misunderstood me way too late, sometimes over half a year too late as part of bi-annual reviews.
In the last of such reviews, I realized that I was not going to grow much more in that company. That same day, I told my manager, who was aware that I was the last senior engineer in the team, that I was going to start looking for a new job. Their response to this, both at the moment and the months that followed, was to do nothing about it, which made it even clearer for me that leaving was the right decision.
Temporary fourth job
If you try to find information on my real fourth job on LinkedIn or in my Resume, you won't find it. It's not so much that that it's a secret, but rather it's just pointless to mention there. I'm making an exception here as it makes a lot of sense for this post, but I won't name the company.
Before leaving my previous job, I looked for opportunities on the Irish market. Considering that I had 7 years of experience then, I had to get pass through a lot of entry- and mid-level positions to find good senior ones. After a couple of months, I found something that was interesting both in the candidate they were looking for and salary/benefits package offered.
Short story short(er?), I quit after about 3 months. Reasons were plenty, but the most important one by any metric is that the team had created such an extremely toxic environment, that it was impossible to enjoy working there. Everyone was on their own stuff, the 'new people' in the team were given the most challenging tasks (mainly due to lack of written requirements and lack of a modern tech stack), there was an established blame culture, and, worst of all, people (manager especially) used to insult each other with nice words.
The weekend before I quit, I had a fight with my girlfriend, which were becoming much more frequent in the past 2 months than I had realized. I was so stressed out trying to do a good job and fighting internally with what was happening, that I was acting irrationally outside work as a result. It really surprised me that I wasn't able to see what the job was doing to me personally! The next working day, I jumped on a call with my manager and quit on the spot. Since I was still on probation, I didn't need to stay one more minute there.
After everything that happened in those (long) 3 months, I took some time off to rest and recover. After about 2 weeks, I started looking for a job, but this time around I wanted something that resonated with me. I wanted to work for a company that was trying to do something for the world, rather than only make money. I wasn't working, but I had enough money saved that I was able to reject positions that weren't what I was looking for.
I think it took me about a month and a half to find a company I was interested in, with a position that was equally interesting. This company has the mission to decarbonize the built environment by analyzing emissions from building and helping clients understand what changes can provide the best improvements. Compared to typical positions in companies selling SaaS products that do nothing good except money for the company, this sounded (and continues to sound!) amazing.
The interview process was fairly simple compared to other processes I had done in the past (this one being the worst!), and I got feedback quite quickly. My initial role was something akin to a senior software engineer.
I had to work on quite a few different services/products that were all quite new and small. The challenging part was coming back to Azure after working on AWS for a few years, and without having ever done production systems in Azure. This meant that I had to learn quite a few things, although thankfully most core concepts are very similarly implemented, and you can see this on the number of Azure-related certifications I've earned in the past 2 years.
As I grew into the role, it became clear that there was a lack of direction in what the different teams were doing for their cloud-based products and services. We had quite a few different-yet-similar services for things like authentication, and nobody was really looking into how Azure services were created and configured.
After a bit over a year, I was moved to form a new Cloud team to start improving several areas. My current tasks are too many to list here, but think stuff like establishing a cloud strategy roadmap, redeploying workloads to use appropriate network boundaries, automating creation of resources through Infrastructure as Code with CI/CD pipelines, and many other things.
I have been learning tremendously this past year, as I've had to deal with many different stakeholders, people with very varied backgrounds. I have also had to do tasks that I've never done at this scale before.
Trying to guess what's going to come next is hard at this stage, as I cannot see myself changing job in the foreseeable future. There have been bumps in the road, of course, but I have been lucky enough to be supported through them, which has certainly allowed me to keep going.
What I wish I understood earlier
Looking back to everything that I have been through in the last decade, there is a lot that I wish I understood earlier. I'm using the word 'understood' here quite purposefully, as these are things I knew, but didn't understand. The list below is in no particular order.
- Public profile
This is typically separated into categories like networking, blogging, social media presence, etc. I combined that into just one category that sums all that up. Consider, dear reader, that I wouldn't have received a LinkedIn InMessage if I hadn't had an up-to-date LinkedIn profile to begin with. I put off networking and blogging for many years, though, and I am sure that it has made me lose opportunities over time. Why do I think this? On one hand, because of the all the stuff that I've learned by writing blog posts and some OSS projects - trying to explain something you don't really understand becomes awkward quickly. On the other hand, because of the amount of people that has reached out over the 2 years since I started blogging.
- Workplace relationships matter
This might sound a bit stupid for some people, as it's certainly more obvious for some than others. For me, at least, I wished someone had told me that building good relationships with colleagues and knowing what you can share with whom matters greatly. This is especially true when you work with people that are 1 or more generations older/younger than you, and expect entirely different things from you than what you are used to.
- Not all battles need to be won
Technical people like me can easily be lost in trying to win a technical argument for a "superior" way of doing things. A lot of times, this superiority comes from opinions and/or past experience, rather than facts. I've learned over the years that, sometimes, when the discussion is clearly opinionated, it might be best to let it go for the sake of moving forward. Being pragmatic at these times can be diffcult, though.
PS: I'm sure the heading above is a bad paraphrase of a known saying.
- Being excellent technically is not enough
This is another "obvious" thing that everyone knows, right? You can be excellent technically, but if your interpersonal skills or your leadership skills are zero, you will not get that far. People think that being a "10x developer" means being so good that you are 10 times better than the rest of the team, when people should be thinking in terms of how much you can elevate the rest of the team to be as good.
As I look back to the past 10 years, I can definitively see a lot of personal and professional growth. Having had the opportunity to relocate to the other side of the world was one of the best things that could have happened to me, and I'm happy to see that I've been able to leverage this quite a lot. After all, not a lot of people can claim to go from being a Help Desk agent in Uruguay to being a Cloud Architect in Ireland in a matter of 10 years!
Right now, the next big thing that I have planned is to finish my book, which I hope is able to help others navigate their careers to move from being engineers to becoming architects.
For any questions or comments, feel free to drop me a message below, or send an email if you'd prefer to discuss more privately.