Breaking problems down
Grasping the Problem
For Lean: Requirements are very tricky; after all, they are just decisions that someone made. Is very common for people to make a list of requirements and them blindly follow them. For this reason, sensing the problem is much more effective. You need to judge the issue. Yes, see what's real and what's not. This is a thinking and discovery process that often cannot be done in 1 day.
Understanding the Landscape
Building Scenarios and possibilities
After grasping the problem and understanding the landscape, you can start scenario planning and think about possibilities. More possibilities are often better because you will be doing tradeoffs if they prove accurate or valid. However, you need to be careful in discarding possibilities; I saw over and over people dumping good options because they lack understanding.
Code Analysis and POCs
Looking at the source code is a must-do step. Reading code is always much harder than writing it, so you can and should take notes, make simple diagrams in order to fully understand what's going on. Debugging end-2-end calls from the edge to the core is always a good idea for understanding.
POCs are ways to validate your scenarios. When you think about scenarios, they might be possible or not; when we do POCs, we can validate if the scenarios can work. Even doing POCs, you will need to do more analysis; let's say you need to migrate consumers, you will need to analyze the impact on the team and if your solution will work smoothly with them or not.
Tradeoffs analysis
Now you have more confidence, you need to perform tradeoff analysis to see what solution or possibilities make more sense. Tradeoffs are not that hard to do - the tricky part is finding the correct variables to look for. There are always standard variables you can look such as:
* COST - Would we be saving or increasing costs?
* Complexity: How complex the solution is?
* Migration Complexity: Do your consumers can get that quickly or need a complete re-write?
* Isolation: How much your solution is isolated and abstracted, meaning how much flexibility is left for the future if you need to change something?
For each problem space/domain, you will have other variables or properties you will need to look to mention a few ones like Security, User Experience, Developer Experience, Performance, Scalability, Reliability, and many others.
Choosing the solution
Choosing the solution is also tricky since, besides all technical tradeoffs variables, you will need to look for competing priorities from other projects, people availability, business appetite for investment, pressures for the market, competitors, compliance, and many other variables. Often the winners are on the sweet spot of cost, benefit, and priority.
There is a variable that can trump all this impact, meaning you might be delivering something critical to the business by a new capability resulting in more revenue, user base increase, which might justify the complexity and high investments.
Cheers,
Diego Pacheco