tech-stack

Documents and evaluates technology decisions. Covers language, framework, infrastructure choices, and dependency management. Use when making technology choices, evaluating new dependencies, or onboarding to the project.

Tech Stack Decisions

Every dependency is a liability. Every technology choice is a trade-off. Document the "why" so future-you doesn't re-debate settled decisions.

Decision Record Template

For each major technology choice:

AreaChoiceWhy
Language??
Framework??
Database??
Hosting??
CI/CD??
Monitoring??

Dependency Evaluation Framework

Before adding any dependency, answer:

  1. Does it solve a real problem? Not "might be useful someday" - is it needed NOW?
  2. What's the cost? Bundle size, build time, learning curve, transitive dependencies.
  3. Is it maintained? Last release date, open issues, bus factor.
  4. Can we remove it later? How deeply does it integrate? Is there an escape hatch?
  5. Can we do without it? Is the alternative (writing it ourselves) truly worse?

Dependency Health Checks

SignalHealthyConcerning
Last release< 6 months> 18 months
Open issuesTriaged, responded toHundreds unacknowledged
ContributorsMultiple activeSingle maintainer inactive
Breaking changesDocumented migration pathFrequent with no guidance
LicensePermissive (MIT, Apache)Restrictive or ambiguous

Anti-Patterns

  • Resume-driven development: Choosing tech because it's trendy, not because it fits
  • Framework churn: Rewriting in the latest framework every 18 months
  • Over-engineering: Kubernetes for a single-server app, microservices for a team of 2
  • Dependency sprawl: 5 different HTTP clients, 3 JSON parsers
  • Ignoring the boring option: Postgres, Redis, and a monolith solve most problems

When to Reconsider

Re-evaluate tech choices when:

  • The team size or skill set changes significantly
  • Performance requirements change by 10x+
  • The project's scope fundamentally shifts
  • A dependency becomes unmaintained or insecure
  • NOT because something newer exists