João Miranda's blog But I digress...

About Archive Feed

My First Year As A Software Developer

On how my first full-time professional experience shaped my career and some of the lessons I learned.


I knew I was going to be a software engineer from the age of 12. My parents bought a 386 (that's 386 CPU) desktop, I played a racing game and on that moment I knew I had to know how to create computer games. But I only learned to code when I went to university. I was not one of those guys that coded in Assembly from the age of three. Even when I left university, my code was really, really lame. I just did not know that it was that bad.

Looking back, I think that the university taught me two things. How to work hard. How to think. Fortunately, those are the most important things education can give you, as everything else stems from them. There is one other pillar, your character, but that is largely defined when you reach 18. I guess those things "saved" my career. So let's dive into...

My first job

My full-time professional life started almost 15 years ago, on January, 2000. My team was the leading team of a big program whose goal was to create an online mall. Our client was a TV broadcaster. Hey... it was the dot-com bubble, things did not have to make sense back then.

On that program, I was assigned to build the payments module (you know, credit cards and other means of payment). One or two ways after I started, a senior developer comes to me and spends about an hour or two explaining me what I had to do.

After that conversation I ended up where I started: knowing exactly nothing. But I was too embarrassed to say it.

So I started coding away, not really knowing what I'm doing. Given I did not have proper supervision, I coded a lot and did really stupid stuff. For instance, I actually created SQL Server tables without any foreign keys... and no, it wasn't some wicked optimisation. It was plain ignorance.

Lessons Learned #1: Be open about your ignorance.

Unless there is a big gap between what you know and what people expect you to know (in which case you're probably in trouble), people are forgiving. If you do not understand something just say so, before it becomes a big problem. Most people want to help. If you meet someone who does not help, try to avoid him/her, but keep in mind that they are a (bad) exception.

Having said that, don't forget that nowadays Google knows almost everything, so you can always try to find the answers that way. You'll probably learn unrelated stuff that might come in handy in some other context. As most things, it's a balance.

Lessons Learned #2: Don't expect that senior people will actively coach you.

It's great when your seniors all actively coach you. But even if that's the case, make it a two-way street. Go after them when you need help. They cannot read your mind. They want to help.

The months went by and the project was progressing, but there was that nagging feeling that it all took too much effort to create the seemingly simple features the project required.

Lessons Learned #3: If something feels like it's too much effort, then it probably is.

Stop. Reflect. Research. Ask for other opinions. Has anyone done something similar before? Not only on your team or organisation, but in the whole wide word?

Don't be the person who does not have time to sharpen the axe because he's too busy chopping down trees.

One day, our project manager calls us and says: "People are saying we have a Boing 747 but we can't get it off the ground. We have to prove them wrong. Are you with me?"

We were. We worked like dogs. My colleagues worked around 16 hours a day for months. I worked 12 hours a day, but I also worked on the weekends.

The best part? Half-way into that crunch, we felt things would go awry. And they dully went. The site went live, but it was a fiasco.

Our reward? In my case, I almost lost my girlfriend (now my wife). The company's reward? It disappeared a year later.

Lessons Learned #4: If you're going into crunch mode, be damn sure that it's worth it.

Most times, it's not. Ask why. Really ask why. Is the company going under if you don't do it? What is there to be lost? Be sure it's not just the vanity of someone (yours, maybe) or a macho/boys thing, for the camaraderie and all that. And, above all, make sure it's not a lost cause. If you think about it, you'll get your answer.

That fiasco had a profound effect on me. Fortunately, a good one. I'm a born-again guy!!!

I had one major dilemma. I knew I didn't want my professional life to be like that. But changing careers was difficult. I just had finished many years of studying to be a software engineer. So I assumed the most logic hypothesis: I cannot believe this is all there is to it, so there must be a better way of doing things. So I started to search and research, and a brave new world opened in front of me.

Looking back, I can say I got lucky that after the project went live, I was the one who stayed behind to do maintenance. For six months, I didn't have almost any tasks to do. As I said, the site was a fiasco. It did not get almost any traffic at all and the stakeholders lost all interest in it.

So I spent most of my time studying. Ok, I also played computer games, as everyone else was doing the same. But I studied a lot. At the time ADO+ and ASP+ (later ADO.Net and ASP.Net) were starting to be unveiled. On the management side I discovered Extreme Programming.

Lessons Learned #5: Be obsessive about learning. It's the only way to keep ahead of the game.

I love to learn, so this one was easy to get going. I guess it's also easy for you, my reader. After all, assuming you're also a software engineer by training, you need to like to learn in order to graduate.

It was a revelation. I started to realize how much I didn't know and that there were better ways than those I, and the people around me, knew.

Lessons Learned #6: The more you know, the more you know you don't know.

This is an exhilarating thought! It makes want to know more and more and more. It never ends. And it's the journey that's fascinating, not the destination.

And, as a bonus, it gives you the confidence to acknowledge when you don't know something. Because you can always learn it and become an expert at it if you choose to.

And that's how it really started my passion for software development, both on the engineering and on the management sides of the same coin. And my motivation to spread the word to those around me.

I hope this second incarnation as a blogger (I had a blog a few years ago) helps me share not only with those around me, but with the wider world... who knows.

Thanks to Joshua Lande and Poole!