(Having coined that term in https://t.co/kvnJfkI4zZ) I’d call every stateful component a little shell around a little core. Render is the pure core; anything writing state is shell. At the end of “Boundaries” I talk about building a system from many small shell/core pairs. — Gary Bernhardt (@garybernhardt) February 8, 2019
Functional Core, Imperative Shell by Gary Bernhard
The comments on this tweet are telling me, watching this video is long overdue …
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.
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 🙂
The video for the talk can be found here. It was a workshop disguised as a talk (thanks again Mathias!!), we could have have continued for another hour if it weren’t for the cold beer waiting 🙂