Project Management

Updated: 2021-10-22


Agile means many things to many people. Normally it refers to short-iteration, low documentation, daily standup.

This doc explains why it does not work for companies like Google.

  • agile is well suited: software with a simple core and lots of customer visible features that are incrementally useful.
  • anti-scrum: projects like Bigtable and Borg, they require long term thinking, as foundation for a fundamental shift. Some software not suitable to give to end user when partially finished.

Team Working Agreement

  • software development paradigm
    • waterfall vs agile
  • choice of source control
    • Git? Hg?
    • GitHub? BitBucket?
    • Private vs Public
    • pull request or not
    • single master branch or multiple feature branches
    • merge vs rebase
  • top-level file structure
    • Components in separate repositories or as modules in one repository
    • Follow Maven convention?
    • Parent pom? Builder pom?
    • Maven modules or Git modules?
  • choice of language and ecosystem
    • Java vs Scala vs Python vs Ruby vs Javascript ...
  • Naming Conventions
    • camelCase? PascalCase? Underscore? Dash?
  • Coding Conventions
  • choice of unit test framework
    • TestNG vs JUnit
  • code review or not
  • choice of CI
    • public travis vs in-house Jenkins
  • artifact format: Docker containers or Java archives.
  • artifact registry
  • build, test, release
  • analytics, logging, experiments
  • server, web, mobile, UX
  • Coding tools: IDE, code search, code review, source control
  • issue tracking: jira, asana
  • planning
  • launch: expose the code to end users
  • internal documentation and knowledge sharing
  • paging/alert/monitoring