Recently I’ve been asked this so many times lately that I’m going to cache the response. The question is:
“If you were starting a software company right now, what would you start with?”
Of course there are a million different questions you’d need to ask first. But given what I’ve done historically, here’s what I’d do.
- Scala. It’s been hugely productive, fast, fun and great for our team. Functional without performance baggage and java-interop (for better or worse)
- MongoDB. I don’t know many companies now that start with anything different. MongoDB is a race car and if you keep it on the track, it’s as fast as in-memory caching. Really
- Scalatra. I’ve been using Java Jersey for years now and it’s great—performant, flexible, easy to read and super stable. Why switch? It’s just not native scala. That means case classes are troublesome, JAXB annotations pollute the scala code, etc. Scalatra has a super clean interface, is fast and has a great future
- Casbah. If you can use case classes then Casbah is a fantastic driver for mongo. I still believe in a DAO layer to abstract calls to the database—nothing hurts a server more than a full-table scan on 20 billion rows. A good DAO layer will protect you from hanging yourself
- Swagger. Of course! But really, I’d start with swagger from day 1. Make your API consumable by others and your team.
- EC2. Yes, EC2 is still the best cloud hosting provider. It probably won’t be that way forever but it’s great (if you manage it)
- Akka. OK, Akka is an amazing middleware for concurrency. It really shows what scala can do
- Twitter’s scala guidelines are a fantastic place to start for anyone writing scala. See here
- No web server. You can do it all with javascript and a scala backend. And faster, really
- Tons of profiling. From day 1, you should profile the hell out of your system. The wordnik OSS tools make it easy. Wordnik-OSS

