When I talk to friends and family about my job, it’s always hard to concisely explain what I do. I usually explain what it’s like to develop a web/mobile application, giving them a brief overview. The truth is that, after quite a few years working as a software developer, the easiest part of my job is writing code. Maybe that’s why, when explaining my job to a lay person, code is the part I address.
After learning about so many different programming paradigms, languages, and frameworks, my brain has become used to learning new technologies, and it’s become an easy task. Besides learning about technology, there are two other areas I consider essential for a software developer to familiarize themselves with in order to be successful in their work, and they are:
Generally, the the process that precedes software development is accomplished by a Product Manager or business Analyst. It is in this stage that we define priorities, delivery rate, and discuss how to make some of the application’s functionalities possible. Developers, here are a few ways you can contribute to this stage:
- Assisting in the analysis
If there is someone responsible for this task, that doesn’t mean that you shouldn’t be aware of and contribute to it.
One of the most beneficial aspects of agile is the consequent organization of small teams, where everyone can have an end-to-end context of what’s happening. The contributions of people who will develop are very rich, and can use this dynamic on a daily basis to elaborate upon functionalities, get to know edge cases, and even help prioritize.
- Learn the deadlines and priorities
We don’t always have a single deadline for each functionality, so it’s super important to at least know what the priorities are in order to keep the stakeholders, internal clients, or people interested in the progress of the project informed.
Beyond demonstrating that you’re interested in knowing what’s being developed, it is very helpful to everyone when they can count on more than one person to give these answers.
After all, I find it very frustrating when I’m waiting for a functionality, and when I ask someone from the responsible team how it’s going, they respond with “I don’t know the deadlines but look for the PM, they can tell you”.
- Understand the needs of the end user
The role of the PM is also to bring the team the vision of the end user’s needs, but sometimes this gets lost in translation. Whether it be at some refinement moment that someone wasn’t present at or because someone really forgot a particular level of detail.
What’s important is that this is a recurring theme before starting to develop a functionality. Do your best to make a habit of bringing attention to the end user’s needs before starting to discuss how to develop the solution.
I have seen various people from the business areas present a solution, only for it to come undone when the need it meets is questioned from a technical perspective. This results in a more efficient way of solving a problem in a way it wasn’t thought of before.
It’s not enough that you know what the ceremonies of scrum are. You should understand the flow of end-to-end development processes, from the point that an idea is conceived in someone’s head to the point that it is in production. Challenge the status quo and advocate for improvements in the processes of software delivery.
The book Lean Software Development. An agile Toolkit describes the 7 principles of lean software development, and it’s an excellent foundation to understand and improve the agile development processes of your team.
Some ways to get more involved in these processes are:
- Help enable ceremonies (daily, retro, showcase)
If this task is done by just one person on the team, help them and also create this habit throughout the team, so that it’s not just you but all members of the team that do it.
- Meet the board
Learn about the functionalities that are prioritized and also how they were distributed. I often hear people justify the delayed development of a task by pointing to its size. Developers are the only people who can foresee a scenario like this, so be the person who examines upcoming tasks and promotes discussion when it appears that there is a better way to distribute the tasks or describe functionalities.
Know what’s in development at the moment; know the bottlenecks; help to finalize more tasks, because finishing tasks is both more difficult and important than starting them.
- Understand the metrics
If your team estimates tasks, it’s important to understand the history of these estimates; this way, you’ll be more consistent in your future estimates. If your team doesn’t estimate tasks and uses other types of metrics to predict delivery, it’s essential that developers know how they’re measured and what the latest results have been, as well as the desired result. This way, it’s easier for people to improve, because they know when they should feel a sense of urgency.
With some shifts in your attitude, it’s possible to bring about significant impacts to the product you’re developing and the business as a whole. I venture to say that these skills are what distinguish a developer as senior in the labor market, more so than technical skills. So, if that is what your goal is, these tips are a safe bet.