Web Dev to Software Engineer
In January 2018 I got my first "software engineering", prior to that I was labelled as a web developer for 2 years and a freelance developer for 4 years.
Before the start of 2018 I've been coding for 12 years. I loved tinkering and building stuff. I've always tried to build and test fast. All of this was self taught. I only had 2 programming classes in University whilst studying Animation for Video Games. These were, programming fundamentals in Python and 3D Scripting in Maya. There was programming involved in other subjects but they were project based and often involved you to already have prior knowledge. Since these projects were team based and involved other disciplinaries, such as programmers, and artists. I would tether between the 2 with my skill sets.
Jumping back to my "first" software engineering job at Expedia Group. I was presented with some formalities in the code base. Such as, design patterns, unit tests, integration tests and pipelines. Prior, my knowledge was build and ship. I knew my way around a Linux environment, creating build scripts, composing docker builds and using kubernetes. The pipeline would involve me to follow a set of steps to deploy to a test environment and then replicate the steps to production. Seeing how things worked at Expedia Group opened my eyes to a professional and more composed setup.
This was also my first time programming in Java for the web using Spring framework. Previously, I've only used Java to make a mobile game. It was also my first time using Maven. Managing dependencies and builds with Maven felt like I was in deep water trying to stay afloat, but I survived. I also learned and used Vault to manage environment secrets, keys and tokens. I felt less like a hacker and more like an engineer.
Reading through the team's code I quickly picked up on patterns of abstraction and a lot of factory methods. Adapters, Factories and Wrappers were the most common. Being new to patterns and Java I copied the path laid out and asked questions. A lot of questions. At this time, micro-services were all the rage. We built many microservices (like a lot). Even though I built and wrote a lot, I wasn't sure if I was building "good code", code that would scale or be easy to build upon. Our review process was quite lenient and it wasn't hard to slip through some bad code. It may have been because the product wasn't too important or critical and had no other teams using it. I didn't think too much of it at the time but I see it differently now as code reviews are a perfect opportunity to up-skill newer engineers.
After a bit of maturing into the new role I began to better understand the meaning of a software engineer. I wanted to build code that doesn't follow the trend of the current mess (spaghetti code) but improve for the developer. Quickly, it became a game of chess. A fine line between quality and delivery. Making sure to pick the right battles when choosing between the two.
Transitioning from a Web Developer to a Software Engineer has taught me the following lessons:
- Reading other people's code and seeing design patterns.
- Working in large complex code bases that can involve many downstream services.
- Code reviews (Pull requests) are valuable to teach newer developers.
- Automated pipelines and testing, no hacky bash scripts ran manually.
- Writing readable code that follows the repository code style.
From working on web developer projects with a team size from 3 to 4 developers to projects that have tens to hundreds of engineers has taught me a lot about the values of code maintainability, standards, and automations.
If you're a developer that has only worked on small scale projects, working for a large organisation can help you grow and develop better skills. If you don't want to transition to a large organisation, or are happy where you are, you can take full opportunity into open source projects. Find one you use, see issues and read code. It will require a bit of self discipline but you may learn some new things that will help improve your career. For me, making this move is a huge pivotal moment that has greatly benefited me.