Errol Hassall

View Original

The challenges of your first year in software development

Growing pains

It’s really hard to start a development career, or any career for that matter. You know absolutely nothing when it comes to development when you start. I didn’t even know how Git worked or how to properly push code when I started. I had used Git at university for a subject, but it made very little sense, from how they taught it. One of the funniest examples of knowing nothing was the fact that I went into backend development because I was never told that as a frontend developer, you don’t have to design it, you get designs! Not only do you get designs there are people who specialise in design, they’re called designers funny enough. Somehow no one at university had ever told me that, and I wasn’t alone, two friends who I was at university with at the same time also didn’t know that. It wasn’t until we got into the field that there were designers and frontend developers, neither of which did the other's job. There were times when I would see some code or pick up a ticket and just freak out, having no clue what to do or how to even start. I think it was maybe my 4th week, and I was absolutely freaking out because my boss asked me to write this bit of code in two different languages and report back on which one was easier. I was stressing, big time, I didn’t know either language, I didn’t know much of anything to be quite honest. My boss said slow down, and we sat together, pairing on the problem until it was done. I learnt a lot in my first gig, mostly from pairing. At times, it was frustrating when I would try things on my own but end up needing to talk to someone for help at some point or another. Honestly, that's just being a developer. Even now, I still need help on things, whether it's some part of the codebase that I’ve never worked on before or if it's some weird behaviour that makes no sense at the time. As you get better and better you will need to ask for help less often, but it will never go away, you will never know everything about a codebase or everything about programming. I still regularly ask for help, less because I don’t know something, but more because I would rather not waste time floundering around on something. When there is probably someone who might know that area better and if they don’t, then I spend time. Most projects have tight deadlines. You might feel embarrassed that you don’t know something. At the end of the day, your team, and your boss will be much happier if you can save hours by asking one question than looking like a hero who can solve everything. The mark of a good programmer is how early they ask someone else and how well they know their strengths and weaknesses. For example, one of the developers in my team, spent an entire day debugging something with some weird behaviour that in reality made no sense for what they was working on. I was able to debug and answer the question in about one minute because I had discovered the bug earlier that day. Even when it’s an issue that I hadn’t already discovered, the fact that I have more experiences allows me to suggest or workout things much quicker, which again can save a tremendous amount of time. When I’m working on a codebase with many developers and in an area that I’m not familiar with, then I’ll ask people immediately. When odd things start happening I’ll debug for a bit, and if I’m still stumped I’ll grab a second pair of eyes. If those fresh eyes can’t solve it, then I’ll deep dive. You might feel annoying asking others for help or questions but at the end of the day if they’re annoyed by it then it’s their problem and not yours, you are doing the right thing.

Lack of help because I was at a startup

I was working at a small consultancy on a startup idea as my first client. This meant that I was often the only backend developer on the project, from my company. There was another more senior developer to guide me at times but if he wasn’t there or was working on something else, which was frequent because he was from a different company. Then it was up to me to figure things out. There were often times when he just wouldn’t know how to do something, so again it was up to me to figure it out. This is a common difficulty when working at a startup or a small company, there is a lack of resources to help you, which is especially important early in your career. The lack of resources can also lead to some bad programming habits. You must always keep in mind the habits you are building and not to stick to something just because you have been doing it the same way. It helps to try to solve problems from a different approach, to hopefully learn a different method or a different feature in a language. With the lack of developers comes the lack of reviews on your code. This again can lead to poor code quality and lack of learning, you must stick to learning and improving yourself out of hours. As well as inside the job so that the lack of resources doesn’t come back to bite you when you go to your next job and your code quality is awful. You will get excellent at googling and reading documentation. It also helps that this is one of the most important skills for being a developer. As a result, you will progress much further in this skill than most developers of your experience level. On the flip side, if you work in the enterprise space, you will have much higher quality code because there will be so many people reviewing it. There will be examples on how to test things and how to build things in certain ways. For the most part in enterprise your problems will have been solved by someone else somewhere else, which is fantastic, but it can also stagnate your growth.

Mistakes

I made many mistakes, and you will too. In fact, I still make plenty of mistakes, it's unavoidable, and you won’t ever grow out of it in fact, if you are still making mistakes it means you still have more to learn. You will make mistakes every day for your entire career. The key is to learn from them, grow and not make them again. If you aren’t making mistakes, it's not because you’re a remarkable developer, it's because you aren’t being challenged enough, and you won’t be growing enough. Growth in my mind is directly tied with how many mistakes you make, if you are constantly making mistakes you are continuously learning and growing. Just be certain not to make the same ones twice.

You will look back on the code you wrote just a few months prior and think, “Wow, that is some horrid code”. Everyone feels that way, it’s just a sign of how far you have come. You will see the mistakes in your code, or the lack of tests. You will see the complexity of the code that could have now been written in a much simpler way. This is all part of the learning process. The more mistakes you make, the more code you write and the more time you spend reading other people’s code. The better you will get. You will often catch your mistakes that past you would have made. It’s these mistakes that push you to become a better developer.

Thrown in the deep end

This could be seen as a good thing or a bad thing depending on your personality. I loved it in numerous ways, but certainly not at the time. Being thrown into the deep end is horrible, you feel like you're drowning constantly, and really you are. It’s not until months later, when you reflect on your experience, that you realise how great it was that you were treated the way you were. Looking back on how far you have come, how you were able to go from someone who knew absolutely nothing, to someone who knew maybe a little more. I love being thrown in the deep end because you learn so much and so rapidly, it’s the best way to learn. It’s not for everyone, I understand that if this is not your preferred way of learning, then look for jobs in larger enterprise companies. This is because at an enterprise, everything moves so slowly and there are so many people. So many people that there is always someone to ask a question. The pressures of deadlines are often quite a lot less or at least you as a junior developer won’t feel them, that's for your boss’s boss to worry about. In a startup or a small consultancy/agency where I started, this is quite the opposite. You as a junior developer will feel all the pressures directly and there will be hardly any people to ask questions too. You will spend a lot more time wondering what to do or how to solve a problem, but in this wondering time you will understand a lot more about the software you are building and the project. There is no better feeling than the triumph you get from solving a problem you have been stuck on for days. One of the best feelings as a software engineer is that feeling when you solve a bug or finish a ticket that has been giving you grief for days. The pain that it has caused you over the week is enough to drive you mad, but you finally finished it. You’re on top of the world, it's a feeling we wish we could bottle.

Burnout

I went into my career fast and with reckless abandon. I got in early, I stayed later, and I spent every second I could learning something new. After 10 months of this, I was pretty burnt out. I struggled through my day, I took longer on tickets. Once I was so tired, I fell asleep whilst my boss was talking to me, right there in the chair! You will probably get burnt out during your career, and most likely in your first year. I certainly did, I had to take a big step back, only work the 8 hours a day and nothing on the weekends. It will take a few months to recover, and you might want to think about a holiday. Don’t be like me and burn yourself out with your excitement and ego to be the best. You will get there, you just have to be patient.

Burnout will destroy all your motivation, it will cause you to even hate your job if you don’t listen to the warning signs. You simply can’t work extensive hours for long periods of time. You will quickly learn how long you can work for each day, how many days you can work for, and over what time frame you can keep it up. Furthermore, you are not Elon Musk, you can’t work 20 hours a day, you will be lucky to produce more than 4 hours of code a day. Your brain is surprisingly power hungry, when the batteries are drained you have to give it a rest. It’s the same for the long term. Burnout will be pretty apparent. You will begin to feel more tired, you will get more frustrated. You will get more annoyed at the project when a few weeks ago you loved it. Likewise, you will have no motivation to do anyway, you will just think you are lazy. This is all burnout, and it will quickly sap all your productivity if you don’t address it. You can quickly recover with a long weekend or a short holiday if you catch it early enough. Be warned, if you wait too long, you will need months to recover. You require hobbies to stop you from just working all the time.

This sums up the advice from my personal experiences over the first year as a developer, and yes, I really did fall asleep when my boss was talking to me.