learning about the model by way of discovery techniques like #knowledgeCrunching (like number crunching); event storming; basically asking a ton of questions #madquestionasking; and then capturing the model in some form of living documentation
as a dev, the code works, so why do you even need a model?
so that you, ur boss, the smes and the other devs (all stakeholders) stay on the same page; with the same model i.e. same pov/ understanding and way of looking at and talking about the domain
why does the code need to "sound like" the model?
cus the code is the link between the model n the actual product the users r paying for; if the code is off, then you are short changing the users cus it's likely skewed from their real needs ...
also, the code should "read, feel" like the model
so that you dont add unnecessary cognitive load to smes and other devs trying to extend and maintain your code; the code is the source of truth; the model-in/accuracy of it can mean big $$$ and customer satisfaction long term
why refactor?
as you gain more insight into the domain by continuing to refactor/improve the model and by making small relevant refactorings of the code every time you touch the it, you keep it clean, reducing tech debt, decreasing the chance of code rot
another benefit here is speed; as the model develops and the model/code becomes more in tune enhancements will take relatively less and less time
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Domain Driven Design (DDD) made plain broke down to the bone gristle. cus i need that science to level up my code, but miss me with all the stuffy acronyms and jargon. 🧵
domain
- the actual problem
- what we're trying to solve with the code for the user
- the set of problems that the users ask the developers to solve
- the subject matter
domain driven
- problem focused
- to stay focused on the actual problem
For me, when the need for a new language, library, framework, shiny thing, etc pops up - i find that i usually take the same general steps
and the 7-bullet list i jotted down in my notes became this thread:
1. pick a language, any language. or framework, library etc.
no tech is perfect. don't sweat it the choice too much. they all have pros and cons - but do try to pick one that has good community adoption so you can get help when you run into blockers
"Always implement things when you actually need them,
never when you just foresee that you need them." - Ron Jeffries
i feel attacked 🙄
(over-abstraction is one of my guilty pleasures) 😅
like, sometimes i'll take that advice to "code to the interface" to the extreme, just cus i can, and i'll make everything an interface. what you can do with polymorphism and dependency injection is fun ...
but man is it an over-abstraction time suck when trying to just focus on "keeping it simple" KISS minimum viable product. gotta draw the line somewhere and make concrete classes and move forward ...