As a developer we tackle very often problems which can be solved in various ways. It is ok not to know how to solve a problem. The real question is: how to decide which way to go 😯
In this situations often I rather have a feeling as a concrete logical reason for my decisions. This gut feelings are in most cases correct – but this fact doesn’t help me if I want to discuss it with others. It is not enough to KNOW something. If you are not a nerd from the 80’s (working alone in a den) it is crucial to be able to formulate and explain and share your thoughts leading to those decisions.
Finally I found a solution for this problem as I saw the session of Mathias Verraes about Design Heuristics held by the KanDDDinsky.
The biggest take away seems to be a no-brainer but it makes a huge difference: formulate and visualize your heuristics so that you can talk about concrete ideas instead of having to memorize everything what was said – or what you think it was said.
Using this methodology …
- … unfounded opinions like “I think this is good and this is bad” won’t be discussed. The question is, why is something good or bad.
- … loop backs to the same subjects are avoided (to something already discussed)
- … the participants can see all criteria at once
- … the participants can weight the heuristics and so to find the probably best solution
What is necessary for this method? Actually nothing but a whiteboard and/or some stickies. And maybe to take some time beforehand to list your design heuristics. These are mine (for now):
- Is this a solution for my problem?
- Do I have to build it or can I buy it?
- Can it be rolled out without breaking neither my features as everything else out of my control?
- Breaks any architecture rules, any clean code rules? Do I have a valid reason to break these rules?
- Can lead to security leaks?
- Is it over engineered?
- Is it much to simple, does it feel like a short cut?
- If it is a short cut, can be corrected in the near future without having to throw away everything? = Is my short cut implemented driving my code in the right direction, but in more shallow way?
- Does this solution introduce a new stack = a new unknown complexity?
- Is it fast enough (for now and the near future)?
- … to be continued 🙂