How to solve problems as a software developer
Autonomy is one of the main keys to becoming a Senior Developer.
Being an “independent” developer is one of the biggest challenges in this field because when we are starting out we tend to get lost in understanding the requirements and being able to bring value to our team.
For these reasons I have been researching and learning closely from some pretty smart developer and I would like to share some important keys that could help you to gradually break that wall (as I am currently doing).
1. Understand business requirements:
This is very essential before do anything, software development is NOT to just write code, it is about build business solutions at enterprise scale.
This includes many responsibilities that aren’t related to the code we create.
Now that you understand that part, you may have the following question.
What I need to know?
When a requirement appears it is because it has gone through a long approval process, at this stage we just need to understand how it is going to affect our application and/or the behaviour it is going to have.
Taking all this into consideration the business requirements, it is more to see how this is going to affect the user and ask ourselves questions such as the following:
- What represents this functionality?
- Why we’re adding this functionality?
- How users will benefit from this functionality?
2. Design the solution:
At this point, you should understand 100% what you need to do.
Implementation plan (scoping)
- Things to consider:
At this point, we must write down the technical requirements that we must implement in our application. We need to define the problem as well as possible.
- Similar implementation:
When we work on large projects, it is usual that some functionalities that we want to implement are already implement and/or we can reuse certain things. This part is very important because it will help us not to repeat code.
In this part, we should try to find things that can be possible to reuse.
In this part, we will define step by step our solution without coding.
The structure is very significant because we take into consideration the architecture and that way we keep a very organized code. This part will depend on what kind of architecture our team is using.
Here, we will define in which place of the application we will implement our solution.
- Visual design:
I would only consider this section for complex implementations.
In this part we will define our design in a more representative way through digraphs, to represent how our implementation will be represented (classes, components, etc).
- Possible problems:
Distinguishing and prioritizing is one of the most difficult arts of our profession, and this will be one of the most important parts to keep in mind.
Once you have made it clear, it will be very easy to discuss with your colleagues. If it is worth to implement the improvement later, or we should try it from scratch, even if the development time will be a bit longer.
It may sound very basic, but it is essential to have links like the issue, UX/UI design, etc.
3. Discuss the solution with our colleges:
The synchronization we have with our team is the key to staying up to date and being able to add features faster.
Maybe we can be wrong with something, and it would be better to know at this point. On the other hand, this kind of meetings will help our colleagues in the future in case they have to modify that part of the code.
4. Implement TDD if it is possible:
TDD is very important, but sometimes we can’t follow this methodology, keep it in mind always before implementing something because you could go faster than you think.