01 — Understand the problem, not just the request
Who uses this? What happens to the business if it breaks? What does “done” actually look like? I ask the uncomfortable questions on day one, so they don’t come up in week six.
Output → problem statement, user roles, constraints, risks
02 — Draw it and write it down
Flow diagrams, data models, sequence diagrams and a written scope. We go back and forth on paper until you, me and the team describe the project the same way. Changing a diagram takes minutes. Changing shipped code takes weeks.
Output → diagrams + scope document everyone has agreed to
03 — Slice the scope, then estimate
I break the work into small pieces that can each be delivered on their own, and estimate each one. Small pieces give honest estimates, and you can see exactly where the time goes.
Output → prioritized backlog with per-item estimates
04 — Build in short phases you can review
Agile, in short cycles. At the end of each phase you review working software, not a status report. If what’s being built starts drifting from what you expected, we catch it while it’s still cheap to fix.
Output → a working, reviewable build every phase
05 — Ship with guardrails
Code review, automated checks, CI/CD pipelines and static analysis on every change. Deployments should be boring, and I set them up that way on purpose.
Output → reviewed code, green pipeline, repeatable deploys
06 — Observe and improve
Logs, metrics and alerts from day one, so problems are spotted by monitoring and not by your customers. Then we improve based on real usage, not guesses.
Output → dashboards, alerts, a list of improvements backed by data