Updated: 2022-01-02


  • Language: Java vs C++ vs Python vs Kotlin
  • frameworks: server, web, mobile, UX
  • Naming Conventions: camelCase? PascalCase? Underscore? Dash?
  • IDE: VS Code, Intellij, Vim. Though it is ok to choose any IDE the developer prefers, but better to have a few "officially supported" options by your technical support team.
  • Source control, Code search, code repo file structure, single repo or not? single branch or not?
  • Code review
  • internal documentation and knowledge sharing
  • build
  • test
  • analytics, logging
  • internal experiment / external experiment


  • artifact format: Docker containers or Java archives.
  • artifact registry
  • release and rollout (CI/CD): build, test, canary, rollout
  • metrics, monitoring, alerting, SLOs
  • Prober, blackbox monitoring
  • Resourcing & Capacity Management: manages a service’s capacity; adjusts resource requirements or number of replicas
  • Data Integrity, Reliability, and Staleness Prevention
  • Oncall, Incidents, Escalations, and Postmortems


  • issue tracking: jira, asana
  • planning
  • launch: internal review, then expose the code to end users
  • methodology: waterfall vs agile

Project Management: Agile

Agile means many things to many people. Normally it refers to short-iteration, low documentation, daily standup. It is not always the best option:

  • when to use agile: software with a simple core and lots of customer visible features that are incrementally useful.
  • when NOT to use agile: big low level projects require long term thinking, as foundation for a fundamental shift; or software not suitable to give to end user when partially finished.