202511161359 We never know enough to begin a project
We will always need to learn while we do things. There is never a time where we'll have all the knowledge for a perfect solution to a problem at the outset of trying to tackle the problem. Continuous learning is required for any individual or team to be 202109251035 High performing teams and recall that 202208211352 There is no shortcut to learning.
Likewise, all projects will leak knowledge: people will leave teams, changes to the outside world will obsolete our working knowledge, and communication is imperfect. We need to continuously build and rebuild our understanding of a 202511151148 Domain, its model, and its implementation. All houses are built on shifting sands.
On the other side of this, there are certain problems that are well understood. It is possible to create a program that adds two numbers together that should almost never need to be revised or updated. Still, we know that the real world is imperfect (202402251232 Reality has bounded rationality, 202203210830 When your model and reality conflict, reality is always right) and even fundamental things like the architecture of our computers may become obsolete, forcing a rebuilding of the program in a new paradigm (e.g., 32 -> 64 bit or von Neumann to quantum). Externalizing this as irrelevant is a philosophical option, but for practitioners, the goal is to have a useful implementation of our domain model, and it wouldn't be very useful if we couldn't use our program on our new computers.
Linked from this note