This is an opinionated set of choices for starting a new software product. I believe starting a new project should feel like this:
and not like this:
- Primary language
- Developer Environment
- Ownership vs "Throw it over the wall"
- New Developer Setup
- Project Setup
You're trying to build a "modern" app. While there are literally thousands of ways to do this, this setup assumes the following:
- Prefer free/open source over spending money.
- Spend money on tools if it saves significant time.
- Prefer operational expense vs capital expense.
- Unit tests test developer code changes at the atomic level.
- Integration tests test code changes at either the API or UI level.
- Performance tests test code changes that impact performance, with some level of tolerance.
- More code coverage is better, but 100% doesn't mean correct.
- Web - React & either Redux or Relay
- Target Chrome, Safari, and IE
- You may have up to three deliveries on mobile: iOS, Android, & mobile web.
- iOS & Android
- build on React Native to start, shift to native when you can afford to or if you have a specific platform need
- Mobile Web - Same as Web + responsive CSS
- In a container environment = Docker + Node.js
- In a serverless environment = Node.js
- For client-facing APIs, prefer GraphQL over REST, but REST is still ok.
- For server-facing APIs, prefer gRPC or Protocol Buffers over REST.
- I think Macs are still the stronger choice, but a good maintained linux box is good too.
- DevOps is a philosophy that can be supported by tooling.
- DevOps doesn't mean developers don't have to understand their infrastructure.
- Prefer Amazon Web Services by default unless one of the following apply:
- Prefer Google if you need something specific that Google offers (e.g. Firebase, Spanner, etc.)
Ownership vs "Throw it over the wall"
- Prefer people and teams to own their products vs a "throw it over the wall" model.
- This implies that people will be responsible for production support of their code (at some level)
- This also implies that APM, failover, degradation, and incident management need to be backed into the product versus tacked onto the product.
If you don't agree with the setup, then the selections below won't make sense. That's entirely ok, as there are thousands of other choices that are likely better for your assumptions on software development.
New Developer Setup
- Install Google Chrome and React Developer Tools extension
- Dev Machine
- nvm (setup instructions) - node version manager makes it easier to manage different node versions per project.
- WebStorm - There's a ton of options, but I find that WebStorm helps me spend less time screwing around with configuration settings. $59/yr for a individual dev (worth ita)
- Setup .nvmrc to use nvm to configure the node version used
- Setup your directory to automatically use .nvmrc