My First Year as a Dev
September 8th 2022 marks one year since I started my first fulltime (i.e. not co-op) dev position! I thought it would be a good idea to take some time to reflect on my experiences and learnings. Before getting into it, I just wanted to take a moment to thank some people who have helped me grow in this first year. Ian thanks for being a great on-boarding buddy, you made the whole process a lot less scary. Thanks to my teammates Leonardo, Cameron, Sascha, and Ivan for being super helpful and motivating. Thanks to Lorissa and George, my team leads over this time for their guidance in this early part of my career.
I’m probably forgetting a lot of people (sorry!) because I’ve gotten a lot of help from a lot of great people. This leads me to my first lesson:
Software Development is a Human-First Discipline
This means that while we get paid to translate ideas into code, we can’t deliver high quality software without being able to communicate and coordinate. Even interactions with the computer directly are translated through layers of human abstraction. We (thankfully) don’t write in assembly, so we are interacting with an abstraction that a human designed.
Seeing software as a human-first discipline means trying to understand the intention behind the system you are working with. It means treating everyone with respect so that other developers feel emotionally safe enough to speak up in the group meeting. It means showing the developer who broke the application grace as you work through what happened alongside them to fix and learn. Being the best software developer means being the best teammate, despite what the popular sitcoms might have you believe.
Software Development is a Craft
Software development has a lot of theory behind it, but all of the theory in the world doesn’t matter if you can’t apply it. It’s great that you know how to traverse a binary search tree, but do you know when you should? Do you know why you want to use this solution as opposed to another? Did you even consider any alternatives?
Software development is about doing. The only way to write a good application is to write many bad ones. There is no substitute for the experience of actually doing it. Too often we get caught up consuming content (books, tutorials etc.) about how to program, when we should be primarily focused on writing lots of code. The best engineers I work with have written a lot of code, and probably threw away a lot what they have written. In the same way that a basketball player throws thousands of free throws when it doesn’t matter so that they may hit the couple important ones during the game, we too must throw out most of the code we write, so that when we need to deliver, we can deliver great code.
Learn a new Codebase by Observing how it Changes
Working with large code bases is difficult. There’s a lot of code, files, and design patterns. Its hard to see how it all works together first. By observing the code changes to the codebase, we can skip learning the lower priority parts of the app that are not likely to change much. What is more important to know? How your backend parses HTTP requests to strip out the properties? Or how to add a new table to the database and ORM? You should learn about the ORM and adding tables to the database, since this is more likely to be immediately relevant, and the HTTP parsing code can probably be thought of as a black box that just does what you need it to. I’m not advocating to never learn about this, but it is a lower priority in a world where there is always something new to learn.
So with these learnings, I will try to do these 3 things in the next year:
- Value the relationships of my teammates highly. Zoom call with each of them at least once a week for a quick 1:1 chat.
- Write as much code as possible. Focus on small projects, and make sure to move on to the next quickly.
- Read through every PR put up to any of the codebases that I work on.
I’ve definitely learned a lot more that this, but these were 3 of the most important lessons I learned from my first year as a fulltime developer.