And then you need to look around yourself at the resources you have now and what they may be 5 years from now. There's no use writing something up in a little used language hoping you'll be able to hire for it later and adding risk by writing something in a language or technology only you know in your company is creating an unnecessary bus factor of 1.
Ask HN: What tech stack would you choose for a serious, long-term business app
11–20 of 80 posts
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#12DB: Postgres API: Ruby on Rails Frontend: React, the react_on_rails gem to set up webpack, Flow, Redux, Immutable.js Background Jobs: Sidekiq and Redis Caching: Memcached PaaS: convox (on AWS). See: https://convox.com and https://github.com/convox/rack (But you should start with Heroku.) I recommend the Rails stack. It's not the "hot new thing", but it's very stable, secure, and productive.
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#13A safe place to start would be Linux + Postgres + Java Spring or PHP Laravel.
My experience is the market has more Java or PHP engineers (compared to say, Elixir).
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#14DB: A hybrid of Postgres & MongoDB
API: Hand rolled w/ SparkJava
Front End: intercooler.js (SPAs blow out your complexity budget, which should be spent on business logic)
Caching: Redis
PaaS: the system should be designed to deploy on anything, including internal servers
For a SaaS app, I would look at rails due to the ecosystem and stability, but otherwise it would remain the same.
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#15This is a combination of things I'm most familiar with and things I'd build shit in if not for the fact that other devs at my company aren't familiar with it. i.e. We use MySQL everywhere, so I can't just spin up a new project using Postgres for the sake of consistency.
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#16Heavily data dependent / ETL applications have different requirements than CRUD applications. There is not a one size fits all stack, you need to consider the user cases.
For example:
- We use DynamoDb and ElasticSearch on the back-end because our case is very key-value oriented but also needs faceted search in some use cases.
- We use Node.js for our user-facing REST API because it was fast to develop and quick to iterate on but we use GoLang for our internal gRPC APIs and front-end because in our case those are the hot paths and where the performance differences between node and Go make a difference.
For an activity feed API (hundreds of thousands of activities a day) I've used Redis with huge success.
The point being is if your app is truly enterprise you'll probably have more than one microservice, and you should pick the right stack for each microservice.
In absence of a hard business requirement that is significantly different between languages choose the framework your team can develop the fastest in and get to market fastest (like our hot path example).
My personal go to is...
Backend: Postgres, Redis, Elasticsearch, DynamoDb
Front-end server and APIs: Node.js with express (no framework), focusing on as few lines of code per microservice as possible
OS: Definitely Linux
Cloud Provider: AWS
Cache: Cache close to the app when possible, if you don't need cache to be synchronized across machines there is no need for a central cache. With that said, I personally love Redis
On the cloud platform note, I'm an AWS guy but they all have their benefits. I try to use as many AWS services as possible to decrease dev time / costs but write the code in such a way where it is abstracted so getting away from vendor lock-in would be possible (painful but at least possible).
All the cloud providers have a service catalog that can shorten your development time if you take the time to learn them use them right. I happen to like AWS value added services best.
With all that said:
- The most important things you should worry about is getting to market and solving the customer's use case. The stack is not important in 90%+ of cases. If you structure as microservices you can always replace individual services cheaply on a case by case basis once you have customers.
- Second, "When I ask tech stack I'm talking the whole dam thing" is very unprofessional and I almost didn't answer because of that. I suggest perhaps an attitude adjustment when asking the community for free consulting advice.
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#17Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#18Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#19Backend/API layer would be one or more of Ruby, Python, or Java, depending on what my team felt comfortable with. Large, mature communities, healthy ecosystems, overall decent tooling, good support for testing and deployment automation.
Nothing Microsoft. Not going down that road again if I can help it.
AWS hands-down. Google tends to have this pathological distaste towards providing support for their customers, and I don't trust them to not just shutter any of their non-core products randomly one day.
I am very sold on GraphQL or Protobufs as the interchange format over REST.
Databases, hard to go wrong with PostgreSQL. Redis and Memcache for caching.
Re: Ask HN: What tech stack would you choose for a serious, long-term business app
#20Long term maintenance is easier if the tools are relatively stable. I think that argues against most (all?) Javascript frontends. Eg, if you started this 3 years ago, your current JS devs would want to throw away your entire JS framework and tooling stack. Odds are if you do it today, they'll want to do the same in For minimum maintenance issues, I'd pick PostgreSQL for db (data integrity FTW), Redis for caching, and do a server-rendered app.
Of the server-side frameworks I know, Elixir Phoenix is my favorite, but Rails is older and arguably changing less. Probably some Java framework is even more crufty / stable?
Of course, there are other concerns besides stability that might argue for different choices - eg, using Elixir Phoenix means that a lot of your caching would be unnecessary, because the dynamic parts of view rendering are "cached" in compiled functions and the responses are very quick without further caching. And you'd get richer experiences with an SPA, in exchange for a lot more work. But you highlighted maintenance.