Software projects have a well-earned reputation for running late, costing more than expected, and delivering the wrong thing. The root cause is almost always the same: a breakdown in communication between the people who need the software and the people building it.
The practices in this section exist to prevent that breakdown. They are not bureaucratic overhead — each one is a communication tool that creates shared understanding, makes progress visible, and catches divergence before it becomes expensive to fix. Applied together, they make a software project predictable.
The work falls into three phases that repeat iteratively throughout a project’s life.
Design
Before writing code, establish what the software needs to do and why.
- Software is Hard — why software projects go wrong and what separates the ones that don’t
- Use Cases — capturing requirements through customer discovery and user stories
- Use Cases to Tasks — slicing use cases into testable requirements and Kanban backlog items
- Wireframes and Storyboards — visualizing the user experience before any code is written
Development
Build incrementally, with visibility and quality checks at every step.
- Version Control Systems — git, branching, and the commit history as the project’s source of truth
- Kanban — keeping work visible and tasks small
- Test Driven Development — writing tests first to force clear requirements and build confidence
- Peer Review — catching bugs before users do and spreading knowledge across the team
Delivery
Ship working software to users, get feedback, and iterate.
- Release Process — versioning, CI/CD pipelines, deployment strategies, and rollback