I just finished replacing the battery in a car and it got me thinking about the different roles we play as developers. We go through so many different stages and roles that narrowing down any one can be difficult.
As I was thinking about the car and the things I feel comfortable fixing on it, I started to realize some of the roles I play at any given time. On any given day, at any given time, I may be working as an engineer, a mechanic, a craftsperson or some combination of the three.
Let me explain.
Traditionally, engineers are the people who design and architect a solution to a problem. A mechanical engineer creates solutions for mechanical products, aerospace engineers create solutions for flight. As a developer (which is often referred to as a software engineer), my job often involves designing solutions for a business requirement - which in today's world is almost always a piece of software.
When filling this role, a developer acts as an architect and planner. They decide what tools to use, what integrations to implement, and what the end product should ultimately look and feel like. They might make compromises on various parts while working with designers, project managers, or clients, but at the end of the day, they are deciding which parts to put into the software and where they are going to go.
The "developer acting as engineer" inputs business concerns, project requirements, and code limitations and outputs a piece of (hopefully) working software.
The second role the developer takes on is that of mechanic. A mechanic maintains a car, appliance, or other system after it has left the planning stages. No longer can large changes be made, except perhaps in the case of a recall. A mechanic's job is to fix the problems missed by the engineer or those that are introduced due to wear and tear.
With this role, the developer acts as to keep the software running. When the engineered software starts to break down - perhaps due to changing standards, outdated dependancies, or a client wants their software to do something else - the developer now acts as a mechanic. Just as a mechanic maintains and improves a car, the developer often acts to maintain and improve a piece of software. Whether they are upgrading Wordpress, fixing bugs that pop up or adding additional features, this role is all about small changes. Quite often a developer might rapidly switch between the engineer and the mechanic role, building something new then maintaining and improving it once it is in front of users.
The "developer acting as mechanic" inputs a piece of software and outputs a similar piece of software, fine-tuned and fixed to specification.
Finally, a developer often takes on the role of a craftsperson. The craftsperson develops their skills in a particular field - perhaps woodworking or electronics. Their craft could be a hobby or a full-time job, but often they are working to improve their ability to perform that craft. They spend time thinking about how tools could be used in different ways or what might happen if they tweaked some part of their process.
With this role, the developer works to improve themselves, their personal craft, and the craft of other developers. Just as a craftsperson might try a new technique or build a new tool, a developer often works to learn a new language or designs a new tool to use in their development. The developer in this role might learn how Webpack works, pick up a new programming language or work on their personal website. Again, a developer might switch between the role of engineer or mechanic and craftsperson often. Often, a newer developer might spend more time in this role, learning to hone their craft - however, a skilled developer will continue to grow as a craftsperson as well.
The "developer acting as craftsperson" inputs their current skills and outputs some new understanding, either for themselves or for the ecosystem as a whole.
These roles are not static, which separates a developer from many other versions of these positions and roles. A developer is constantly shifting from one role to another, depending on their seniority, team composition, current interests, and much more. The "Continuous Developer" learns when each role is needed and works to fill the skillset require as best they can.
Hopefully, this helps as you think about your careers. What do you think? How have you observed these or other roles throughout your career?