Ask HN: What's your ideal tech stack for 2019?
I'm specifically interested in a consumer facing mobile/web app scenario. I'd love to hear how some of my requirements are excessive in other scenarios. That said, I have several priorities I'm thinking of:
Language:
- end-to-end testing. Not selenium. As close to the edges as possible.
- a large standard library/blessed common libraries. I don't really want to implement `sort` or `groupBy` outside of whiteboarding interviews. That said `tree-seq` (Clojure's depth-first tree traversal as an iterator, part of `clojure.core` - no extra imports) is not strictly required.
- decent concurrency support. Parallelism would be even better, but that's severe limiting factor AFAICT.
- REPL support. Mostly so I can cache things on successive test runs :P.
- It'd be awesome if I didn't have to reimplement everything between serving & ETL. e.g. Imagine ETLing your permission system outputs.
Platform (i.e. serving infrastructure): - Off-hands DB/data data management (e.g. AWS RDS/GCloud SQL/Spanner/etc).
- Off-hands traffic management - i.e. DNS/load balancing.
- Automated, rolling deploys
- Single command rollback
- Easy logging (i.e. stderr) & aggregation.
Data-Platform: - Record everything, forever. Not to say that the business should do that (i.e. user privacy matters), but starting here makes debugging easier.
- I have no desire to manage a spark/HDFS cluster.
- Testability would be awesome.
9 comments
[ 3.5 ms ] story [ 30.9 ms ] threadI've recently finished a project using Meteor, and I quite liked the opinionated views it has on things (less initial choices to focus on the product rather than the underlying tech).
But if I had to pick some techs I'd want to play with in such a stack, I'd go for Rust (Rocket), Postgres, GraphQL and React.
Interesting choice of Rust - why that over Scala or Haskell?
At my previous company, a lot of engineering time was dedicated to maintaining the custom C++ build system, I'm glad to see "newer" languages formalizing this step: "make it opinionated by default so developers can get quickly up and running, but allow hooks into the system for later, when they have specific needs", rather than the JS approach of "batteries not included, nor screws or assembly manual, but hey you can build whatever you want !", which leads to decision fatigue at the most critical time of an idea's inception.
That being said, to answer your actual question: I haven't looked closely into them, but functional programming is still a bit arcane for my OOP-trained mind, it will take a bit of practice to think differently.
Postgres for db
Azure for hosting
I’m curious about the choice of Azure. Why that over AWS/GCP?
About azure- I could ask the same q otherwise :). Remember HN is an echo chamber.
BE: Go, Erlang/Elixir, Pony, Crystal, Rust... take your pick. REPLs in compiled languages usually have to be faked but are still useful for experimentation. Get used to a good debugger like gdb or lldb, with a convenience layer like Voltron, and profiling tools: dtrace, gperf, valgrind.
BE svcs: EnvoyProxy, Nginx highly-customized, Redis, Postgres, CentOS containerized with Chef, Docker and Habitat... and no Kubernetes. If you have bare metal, OpenStack, pfSense/OpenBSD/NetBSD at the edge, KVM (VMware if you can afford it) and BeeGFS over Ceph. Backup mission-critical data with Tarsnap, others with a mix of S3, Glacier and BackBlaze.
Try to standardize on what works best for the use-case to reduce complexity, iteration time and cost. Develop on what's used in production and follow Twelve Factors methodology generally.
A bigger org I'd probably just change the backend code to Go and start taking advantages of other AWS products to manage ETL/monitoring/logging/etc. The change to Go is mostly just to prevent your more 'clever' engineers from producing code that no one but them can understand. Languages like Clojure and Scala while cool can start causing real problems in an org where the experience level isn't uniform.
A note on tech that bears repeating, if it isn't going to be your differentiator then choose boring building blocks.