Skip to content

Latest commit

 

History

History
39 lines (27 loc) · 1.97 KB

File metadata and controls

39 lines (27 loc) · 1.97 KB

Universal software project methodology (concise, project-agnostic)

1) Clarify the intent before coding

  • State the goal, constraints, assumptions, and unknowns.
  • If ambiguous, document a safe default and/or list options with trade-offs.

2) Deliver the smallest useful increment

  • Build only what is required to meet the goal now.
  • Avoid speculative features and unnecessary abstraction.
  • Minimize dependencies; justify each new dependency or custom build by overall risk and maintenance cost.

3) Keep changes focused and consistent

  • Change only what the goal requires, plus necessary integration points.
  • Defer unrelated refactors unless they block delivery.
  • Follow existing conventions; if none exist, define lightweight ones and apply consistently.

4) Make done measurable and verified

  • Define success criteria (acceptance criteria, metrics, or observable outcomes).
  • Validate with automated checks when feasible; otherwise provide clear manual verification steps.
  • Record what was verified and what remains unverified.

5) Engineer robustness proportional to risk

  • Handle realistic edge cases at I/O boundaries and external interactions.
  • Treat "impossible" cases as assumptions and document them.
  • Address quality attributes as needed (security, privacy, reliability, performance, compliance), scaling rigor to impact.

6) Design for change without over-engineering

  • Apply KISS: prefer the simplest architecture and design that fit the current scope and risk.
  • Apply YAGNI: do not add extension points, layers, or abstractions before there is a concrete need.
  • Separate concerns: keep business logic distinct from I/O boundaries (HTTP, CLI, files, databases, external APIs).
  • Prefer high cohesion and low coupling.
  • Hide internal implementation details behind clear contracts.
  • Design for testability: structure code so core behavior can be verified without heavy reliance on frameworks, networks, or global state.