Good and Fast

created: Wed, 04 Dec 2024 11:17:54 GMT, modified: Mon, 06 Jan 2025 00:25:57 GMT

Software development is fundamentally a knowledge-building exercise that operates across multiple domains. This knowledge-building nature is often underappreciated, leading to tensions between immediate delivery and sustainable development.

Teams must develop shared understanding and vocabulary around:

  • The project's purpose (the "why")
  • Required functionality (the "what")
  • Implementation approach (the "how")
  • Technical stack (architecture, languages, frameworks)
  • Operational concerns (deployment, maintenance)

The Knowledge Building Challenge

When domain understanding is solid, feature implementation flows naturally and predictably. However, new feature requests frequently expose gaps in domain knowledge, requiring deeper analysis and domain model refinement. This exploration process has uncertain outcomes and timeframes, potential significant impact on the existing codebase and ripple effects across the whole ecosystem. This creates two fundamental opposing forces:

Business Pressure

  • Immediate feature delivery demands
  • Focus on visible results and quick wins
  • Short-term thinking driven by market needs and customer requests
  • Pressure to "just make it work"

Logical Coherence

  • Need for consistent domain modeling and clear abstractions
  • Architectural integrity
  • Long-term maintainability

Project Evolution

As projects mature, they develop a natural knowledge hierarchy:

  • Core Concepts
    • Foundation models crystallized after a few iterations
  • Domain Branches
    • Large functional blocks representing specific business areas
  • Leaf Features
    • User-facing functionality built on top of the core concepts and domain branches

And the magnitude of changes for each feature naturally decreases. Which is also a good indication of the project state and shape.

Links