Ask HN: Which stack do you use at your startup? - xstartup
======
laci27
Make your MVP in whatever language you know best. Don't chase after buzzwords
or trends.

I personally use PHP, mySQL and Redis with nginx proxy, cause I know these the
best.

Probably nodejs would be a bit faster, but then again, I would probably make
100s of mistakes, not to mention god knows how many bugs, because I'm not 100%
familiar with the language.

------
cperciva
C on FreeBSD on EC2.

Yes, the dynamic parts of the Tarsnap website are written in C.

~~~
xstartup
Which OS do you use for development?

~~~
jrowley
It's a fair question. Many people use FreeBSD just for servers and use other
distros for their workstations.

~~~
cperciva
I guess so. It seems strange to me that anyone would want to inflict upon
themselves the pain of using different environments for development vs.
production, though.

~~~
jrowley
You'd think so, but I bet a large portion of developers on hacker news develop
on a mac and run their apps in production on a linux distro. At least for web
apps.

~~~
cperciva
Could be. I know a lot of Mac owners who only ever do three things directly in
OS X though: Run a web browser, use video conferencing software, and launch
linux and BSD virtual machines.

------
yakshaving_jgt
Haskell & Elm. Deployed to AWS with NixOps. Persisted with PosgreSQL and
Redis. Code hosted in either Bitbucket or GitHbub. Tasks managed with Trello
and email. Occasional sync meetings over appear.in or Zoom (I travel).

~~~
vaibhavsagar
This is my favourite stack here by far. What are your pain points?

~~~
yakshaving_jgt
NixOps supposedly supports several hosting providers, but the DigitalOcean
integration is currently broken. AWS works great, but it's annoying to be
forced into that choice by the tool.

Haskell and Elm both work great, but I can imagine in future using something
like Haste or PureScript Bridge; it'd be nice to work with both the backend
and UI as a single project. Not a pain currently, but this is a nice to have.

Biggest pain is documentation. Haskell stuff is documented, but more hand-
holdy examples would be ideal. OTOH, some language communities have a culture
of writing documentation that is too hand-holdy, flooded with emojis, and is
generally frustratingly infantilising. I'd like Haskell to strike a balance
between the two. I'm optimistic we'll get there eventually.

~~~
thepratt
Have you run into design decision limitations with Elm yet?

~~~
yakshaving_jgt
Nope. Not in any of the several products I've put in production with Elm.
There have been times when I've needed more things than Elm provides — one
time I needed a library for parsing a streaming JSON response — but the JS
interop through ports works just fine.

------
haasted
You might find some interesting answers at
[https://stackshare.io/stacks](https://stackshare.io/stacks)

~~~
sdca
Stackshare is more informative than a majority of the replies in this thread
that aren't stating their startup's name or use case.

------
latte
Started with Python + Django + MySQL, hosted on PythonAnywhere.

At some point, decided to rewrite the project from scratch in Clojure using
MongoDB, since Clojure was much better suited for solving the problem in
question (modelling the grammar of a natural language -
[https://www.pealim.com](https://www.pealim.com)) and MongoDB was better
suited for the constantly evolving grammar spec. The rewrite took around two
months and I believe that it was the right decision, though I still miss some
of the things that Django provides for free (like the admin interface and user
authentication).

I also use ClojureScript + Reagent, though not yet on the user-facing parts of
the app.

~~~
senorsmile
pealim.com is my most visited site (according to the chrome home screen). I
could not have learned עברית so quickly the last couple of years without it.
תודה רבה!!!

------
lukeHeuer
On [https://www.stackpair.com](https://www.stackpair.com) I'm using Go, Rails,
Redis, Memcached, Minio, Sidekiq, Postgres, and Kubernetes on GKE.

The iOS app is Cordova:
[https://www.stackpair.com/apps/ios](https://www.stackpair.com/apps/ios)

For storage and backups I use Hubic and Rclone. Hubic is the best deal I've
been able to find for LTS: 10TB for €5/m.

------
timvdalen
We [1] use a Laravel back-end for the main system, hosted on autoscaling EC2
behind a load balancer. Our front-end web application is built on Angular,
running on S3 behind CloudFront. Since we process a lot of data, we use
background jobs (with SQS as a broker) to perform our analyses. The actual
data processing and wrangling is done in Python.

We have released some parts of our systems as open source projects [2], [3],
[4].

[1]: [https://odysseyattribution.co/](https://odysseyattribution.co/) [2]:
[https://github.com/code-orange/telemachy](https://github.com/code-
orange/telemachy) [3]: [https://github.com/code-
orange/jot](https://github.com/code-orange/jot) [3]: [https://github.com/code-
orange/statuspage](https://github.com/code-orange/statuspage)

~~~
bgdkbtv
Great to see Laravel in this discussion! Beautiful framework.

A couple of questions:

1\. Why did you go with Python for data processing instead of PHP?

2\. Why not use Redis for queue/background jobs processing?

~~~
timvdalen
I agree! Lumen is my go-to framework for small web-based things right now,
picking things from Laravel is so powerful.

1) At the time, Python (and with it pandas/numpy) seemed to be a good fit for
the data we were working with (and the analysis was developed as a separate
project from the main system that calls it). If we were to do it over right
now (and we well might in the coming months) we would probably move this into
PHP as well, which makes writing workers much easier.

2) Cost-wise, SQS makes a lot of sense - the system is highly distributed and
cut up into parts (the description in my first comment is a bit simplified) so
adding redis to the mix means adding a whole new server. For SQS, we're just
paying per-message (and we don't have a _lot_ of messages, so it's cheap).
Furthermore, I've built an algorithm to scale up the background workers based
on the queue size of SQS. This runs in Lambda, which makes it super easy to
access SQS properties versus connecting to a remote redis server. Basically,
the algorithm rents new EC2 instances whenever the load is high and terminates
them whenever the load is low.

------
simonsarris
We sell diagramming libraries, most notably (by sales volume) a JavaScript
diagramming library: [https://gojs.net](https://gojs.net)

Our stack is: _we don 't care._ One of us spun up a couple AWS resources and a
windows machine with IIS because that's what he knew how to configure the
quickest. It seems like it would be a waste of time to spend any more time
thinking about it until we have a real need.

We have some orders database stuff we wrote ourselves ages ago with SQL Server
that hasn't needed significant changes in 10+ years.

In other words, to us, the stack is whatever makes itself disappear the
soonest so we can work on the actual product. Nothing fancy, nothing new,
nothing changed for the sake of it.

If our product touched the stack more, we'd spend more time on it, but only
insomuch as it _was_ the product (if the product is a speedy website, etc).

Our workflow/cycle is all JavaScript based for the JS product. We push release
with a gulp script I wrote.

------
rayalez
As an indie founder, I prefer to use Node/Express and React/Redux, hosted on
Digital Ocean. Really fast and convenient to build SaaSes and single page apps
like:

[https://nulis.io](https://nulis.io)

[https://helix.startuplab.io](https://helix.startuplab.io)

If I don't need a lot of fancy interactive functionality, and am building more
of a usual web 2.0 website, I sometimes go with Django/PostgreSQL:

[https://fictionhub.io](https://fictionhub.io)

[http://webacademy.io](http://webacademy.io)

[http://lumiverse.io](http://lumiverse.io)

For static blogs and content websites, I go with pelican generated sites
simply served with nginx:

[https://startuplab.io/blog](https://startuplab.io/blog)

~~~
t3h2mas
helix reminds me of
[https://github.com/ioddly/meditations/](https://github.com/ioddly/meditations/)

I'm curious if you prefer Django over js alternatives for any particular
reason?

------
juststeve
windows 200, ms access for the backend, ASP (VB) for the frontend.

we also do java applets

~~~
therealmarv
you probably meant Windows 2000 ;)

~~~
jxub
Windows Trajan emperor edition has a really good firewall up there (sorry for
bad joke, had to make it).

~~~
juststeve
Windows 200AD :)

~~~
yesenadam
:P I still write orchestral music with Cubase on a 1999 IBM PC running Windows
ME. Writing this comment on my new (2005) computer with OmniWeb browser, os x
10.4. Hmm maybe I should be in healthcare.

------
standyro
We're not exactly a startup, but a small growing data science, analyst, and
engineering team in a bigger company. You name it... but a typical data and
web stack.

OS/Distros: FreeBSD and Linux (CoreOS and CentOS)

Languages: Python (Data Science) & Javascript (Front End)

Frameworks: Flask, Django, Angular, React, Bokeh, Tensorflow, Scikit-learn

Container Services: Docker, Mesos/Marathon/DCOS (currently testing Kubernetes
in GKE - Google Cloud)

Databases: Redshift, Postgres, Cassandra/Scylla

Deployment Tools: Jenkins, Github, Gitlab (different team)

All running in AWS deployed through CloudFormation and Salt.

There's even a Windows Server 2016 instance thrown in there for good measure
running Tableau. That's the most reliable part of our stack. </rolls-eyes>

~~~
huangbong
Node.js/GraphQL/Next.js/PostgreSQL/AWS Lambada (via up). Entirely serverless
stack with the application state residing in the DB and a JWT to identify the
user. No OS, containers, kubernetes, instances, etc to deal with other than a
single RDS instance.

------
iamd3vil
We use Elixir, Go, C++ for backend and JS, Java / Kotlin, C# for frontend. We
also use Postgresql, Rabbitmq and Redis.

~~~
xstartup
How are you managing deployment of these many technologies? What does your
CI/CD workflow like?

~~~
iamd3vil
We mostly use docker with docker swarm. Currently exploring moving to Rancher.
Also we use Gitlab CI for CI/CD. Our workflow looks like this: a release is
tagged, CI tests and builds a docker image which is pushed to our private
registry and then we use ansible to deploy the new release on our servers. We
mostly use onprem for our production and can't use any cloud with the
regulations and limitations we have.

------
bottled_poe
I run a development shop in Australia and work with a lot of startups to build
their MVP. This puts us in a position to recommend our preferred stack:

\- Django backend

\- React frontend

\- Native mobile iOS/Android OR Xamarin (depends on project)

\- PostgreSQL

\- AWS (Elastic Beanstalk) OR Heroku

\- S3

~~~
hobbes_calvin
I am an experienced Django developer, but just starting with React. Can you
point towards any source which suggests good project setup and structure?

~~~
bottled_poe
I have not personally been involved with a lot of the development for the past
couple of years. I could ask a colleague. Send me an email - james@blitzm.com

------
HarveyKandola
We're building/selling "enterprise" software.

Multi-tenanted single codebase supporting both SaaS and self-host (Windows,
Linux, macOS).

Stack:

\- EmberJS front-end

\- Go backend (static binaries that embed EmberJS GUI)

\- MySQL database

\- AWS EC2 pulling Docker images from Docker Hub

------
owaislone
Python, Django, Go, Lambda, ECS, EC2, TS/JS, React

------
jpgvm
Not sure we qualify as a startup anymore but our stack is Kotlin + Gradle +
Kubernetes on GKE.

Definitely the best stack I have worked with thus far.

~~~
2_listerine_pls
what framework?

------
busymichael
[https://DNDEmail.com](https://DNDEmail.com) is do not disturb for your Gmail.

We use Python on Google App Engine. Google's NDB datasource.

The Chrome Extension is written in JavaScript.

Wordpress on wpengine.com for the front-end brochure website.

I've written about how to simplify your MVP
stack[[https://dndemail.com/2018/01/30/how-to-simplify-your-app-
pla...](https://dndemail.com/2018/01/30/how-to-simplify-your-app-platform-and-
dump-the-co-founder/)] to speed up launching.

~~~
bkovacev
Webapp2 or something else? :) It's been so long I've seen someone use python
on GAE, it's ridiculous. It was my first ever "real world" programming project
back in 2011.

~~~
busymichael
Yes, webapp2 with Jinja for the front end. For my endpoints I am just pushing
json through webapp2. Simple to use and administer.

------
thepratt
We use PHP. PureScript Haskell Postgres :) all on kubernetes atop AWS.

------
zengr
Elixir (Phoenix) in AWS Fargate.

------
mittermayr
Plain Ruby + Sinatra+ Puma + MySQL (ConnectionPool) + Sidekiq on Redis for the
back-end. Sinatra/ERB for low-traffic sites, and ReactJS on S3 for more
traffic on the front-end. I always like to err on the side of common
denominator, rather than adding as many 'currently hip' tools as possible.
Every time I try new things, it eventually brings me back to this set of
tools.

------
vladholubiev
At Shelf [1] we use:

Front-end: React, Redux, Vue.js, Meteor.js. Served from S3 via CDN (AWS
Cloudfront)

Back-end: Node.js in AWS Lambda with AWS API Gateway, also Node.js in Docker
hosted on AWS ECS, spot instances

Storage: MongoDB (on mLab), Elasticsearch (on Elastic Cloud), S3

Other: GitHub, Circle CI, Terraform, Jest

[1] [https://shelf.io/](https://shelf.io/)

------
git-pull
For anyone here interested, there's a website that has a nice UX for this:
[https://stackshare.io/](https://stackshare.io/)

What I like about it is you can add open source projects to your stack, not
just SAAS services. And also, you can split your server-side stack from your
personal tools.

------
mariushop
Meteor + React + MongoDB got eddtor.com really quick out of the door. But
after 5+ years of maintaining my shipped products (I'm a freelancer, ME-JUST-
ME kind of dev), my absolute happiness in customer service & maintanance was
the most boring stack of all: PHP + HTML + JS + MySQL/MongoDB. Vanilla FTW.

------
mattmanser
My present client has ASP.Net/SQL Server/Azure.

Not the greatest fan of Azure, mainly because of the admin portal, but apart
from that it's been good.

Constantly get told by their clients that we do everything much faster than
other SASS providers they work with, like weeks where others have turn arounds
of months.

------
baystep
Backend: Java (phasing out), Go (phasing in), Postgres, Redis, all on Ubuntu
EC2's.

Frontend: JS (TypeScript/ES6), React, ReactNative, SASS, all Webpack'ed
(except RN).

I think it's a fairly light stack but am happy with it. I would use this as
the starting point for pretty much every project.

~~~
swah
I love Go, but always feel it is not very productive for web app backends.
What about you ? Do you use an ORM w/ Go?

~~~
majewsky
Go optimizes for readability and lack of surprise at the expense of
conciseness, which is why you feel it may not be productive. I think that the
better maintainability vs. something like Rails massively outweighs the
upfront cost of having to type more code, but other people might judge
differently.

Furthermore, Go emphasizes "doing it your own way". There are no big web
frameworks in Go, you just pull in some small and rather orthogonal libraries
and make up your own abstractions to tie them together as you build your
application. The end result is something that's highly optimized for your
personal needs, but it requires a certain way of thinking and working that's
not for everyone (and not always desirable). Some people do better when given
more freedom; those should prefer Go etc. Some people do better when working
within a well-known set of rules; those should prefer Rails etc.

Regarding ORM, I use Gorp ([https://github.com/go-
gorp/gorp](https://github.com/go-gorp/gorp)) for INSERT, UPDATE, DELETE and
basic SELECTs (e.g `SELECT * FROM things WHERE id = $1`), but when doing
complex reports, I write SQL by hand [1] because ORMs are usually too
constrained. I always feel like I know more SQL than the people who designed
the ORM.

[1] For example:
[https://github.com/sapcc/limes/blob/ab4245a8f195672b808f990f...](https://github.com/sapcc/limes/blob/ab4245a8f195672b808f990f9f7c2452652c475d/pkg/reports/domain.go#L100)

~~~
swah
I usually do the same, or even just sqlx. But then wish I had gone full-ORM
when I have to change SQL code in 50 places due to a column rename...

~~~
majewsky
I'm struggling to think of instances where you would want to rename a column
without changing the behavior of the column. The latter would mean that you
have to review those 50 places anyway.

------
artworx
We are doing live video streaming, mostly Java and React.

Our backend is running on Kubernetes in Google Cloud. Streaming servers are
hosted in AWS, but we are preparing to move to dedicated servers.

We also use Consul for service discovery and statistics for streaming servers.

------
nickh9000
(serious) hobby project: beanstalk, vertx, java, dynamodb, elasticache.
Frontend: Kotlin.

------
bgdkbtv
We use Laravel for the backend and VueJS on the front end. Forge/Envoyer for
deployments.

Amazon S3 for storage, db/redis for queue processing.

Great setup, a lot of the headache is taken out and lets us focus on the
development aspects of creating software.

------
0x54MUR41
Backend: Python, Go, Java

Mobile development: Android and React Native

Database: MySQL and PostgreSQL

Redis and also RabbitMQ.

~~~
samat
Could you please share your experience with RN?

Have you created an app from scratch or added RN to existing native app?

~~~
0x54MUR41
I have never created an apps or worked with React Native before. But, I would
share the experience from my colleague who develops Android apps in our
startup.

We are a startup that helps people in the middle-low income using technology.
The people who use our technology usually have Android mobile phone with
minimum specifications (Jelly Beans, low memory and spaces). At first launch,
we used Android Native to build our application. The application meets our
costumer needs since we consider to build an apps that consumes low memory and
spaces. Then our costumer are growing and the features are complex, we use
React Native to existing native app. Our application now consumes memory and
spaces two times than Native one. Beside that, sometimes when you use a
library, Native is more stable than React Native.

------
bfrog
Rust on Linux with Cassandra, the strong typing without a GC is a boon to
stability and performance (my own sanity). Cassandra is fantastic, looking
forward to using Scylla at some point.

~~~
jxub
Would you mind if I asked what type of application do you have that needs the
kind of write performance? Also, are there any Rust drivers for Scylla?

This stack looks awesome in terms of pure perf.

~~~
bfrog
Ads (matching, serving, recording analytics), Scylla uses the same protocol
Cassandra does. I've been using the CDRS crate which is pretty nice. It has a
few rough spots that I've started to smooth over and send PRs for when I get a
chance.

------
habyte
As a data company specialized in real time statistics for combat sports, we've
built an API with Node.js + Hapi and MySQL. The front-end was developed with
Vue.js.

------
dejv
Rails monolith, jQuery for some user interaction (new features are starting to
use Vue.js). Hosting on Linode. Capistrano for deployments.

Nothing special, but it gets the job done.

~~~
xstartup
Which service do you use for hosting your repository?

~~~
dejv
Github

------
marianoguerra
Erlang in the Backend on DigitalOcean. React/immutable/requirejs/bootstrap in
the frontend.

The integrations with payments and similar are Java on AWS Lambda.

------
beaconstudios
Node and React/Redux, both with TypeScript. Starting to wish I'd learned
PureScript so I didn't have to make do with Ramda for scaling.

------
ralala
Server-Side:

\- Python with Pyramid

\- SQLAlchemy with Postgres + Cassandra

\- Celery with Redis

\- Swagger

Client-Side: Mostly React, React-Native

------
pritambarhate
Java (SparkJava Web Framework), PostgreSQL, Redis, Angular 4, S3 for files.
Have also used Spring, Jersey, SQS, MongoDB in previous projects.

------
tablet
Context:

[https://fibery.io](https://fibery.io) \- Work management platform for SMB

Stack:

Clojure

PostgreSQL

Kafka

React

Javascript

------
nouney
Backend:

    
    
      - Go, NodeJS
      - Redis, MongoDB, Tile38, Neo4j
      - GKE
      - Traefik
    

Frontend (mobile app):

    
    
      - React-Native

~~~
t3h2mas
How has Traefik worked for you? Is it serving production traffic?

------
petraeus
i'd like to see this question answered only by companies grossing over $100
million and less side-dev passion projects.

~~~
senorsmile
My company is well over that number. I probably only know about a quarter of
the stacks... And even within those, there is a lot of variation. There are
java heavy stacks, python heavy stacks, nodejs, Ruby. Lots of systems level
stuff in C, C++, Java. I can't even speak to any front end frameworks
(although I know there are at least a few). Almost every other application you
could think of is in use somewhere... Nagiod, Sensu, Icinga, OpenNMS,
memcached, redis, nginx, Apache, redshift, MySQL, postgresql, rabbitmq,
zeromq, Ansible, Chef... This is likely barely scratching the surface.

------
notmarkus
Elixir, React, Postgres hosted through Heroku.

------
mbuechmann
I use Go + MongoDB. Hosting via Docker/Kubernetes in GKE. Gitlab is used for
VCS, CI/CD and issue tracker.

------
ozren1983
Python/Django, PostgreSQL, React, EC2.

------
Can_Not
Using postgre, redis, FeathersJS, Nuxtjs, and VueJS. The near real-time
updates and sever side rendering is great.

------
joojia
Python, Django, Postgres, Cassandra, RabbitMQ, Redis, MySQL, Nginx, HAproxy,
Elasticsearch, Spark, React.

------
asplake
Python, Flask, SQLAlchemy, sklearn, numpy, Amazon Elastic Beanstalk, Postgres
(on RDS). PowerPoint ;-)

------
jamil7
Node.js / Express, Nginx, RethinkDB, Docker, tiny bit of Go. Preact /
hyperscript frontend.

------
twovi
Python Flask, SQLite, some front-end framework that is available at the time,
Linux Digital Ocean

------
zuzuleinen
Backend - Golang

Frontend - React app

DB: MySQL

~~~
xstartup
How do you do migrations with Golang? Which ORM do you use?

~~~
abdelm
This may be useful:
[https://github.com/mattes/migrate](https://github.com/mattes/migrate)

~~~
majewsky
Seconded. I use it with the go-bindata backend and Postgres driver. Some
notes:

\- Migrations are written in plain SQL, so there may be portability issues if
you need to support multiple DBs. (Or you need to write the same migration
once per supported SQL dialect.)

\- It does not `CREATE DATABASE` for you when applying the first migration.
For my app that uses Postgres, I wrote some extra code to do that. Feel free
to copy if you like:
[https://github.com/sapcc/limes/blob/ab4245a8f195672b808f990f...](https://github.com/sapcc/limes/blob/ab4245a8f195672b808f990f9f7c2452652c475d/main.go#L145-L178)

------
anonfunction
Backend API servers: Golang, Python, Redis

Frontend Web Servers: PHP (Laraval), JS (React), MySQL

------
Davetron
ReactJS front-end, Grails back-end API with a PostgreSQL DB deployed on AWS.

------
l2cluster
Ruby, Scala, Postgres on AWS

------
pkstn
Ubuntu, node.js, MongoDB, Mongoose, express, RE:DOM, stylus, nib, pug, ...

------
shoshin23
Company - www.LetsEnvision.com Stack: Swift, Obj-C Python C++ MongoDB

------
yread
SQLite, ASP.NET Core, jQuery, Bootstrap. Kinda boring but works

------
GSGSGS
I use Stackoverflow :)

~~~
leonagano
Me too!

------
clementmas
PHP (Laravel), JS (Vue + Vue Router + Vuex), MySQL.

Keeps things simple.

------
bitL
Python, Flask, Tensorflow, Keras, Amazon MWS, Boto

------
tmaly
for my food site I use nginx as a proxy, Go for the server and Postgresql as
the database. I deploy to digitalocean

------
Johnc314
for what? if its for analytics? we use Panoply and Chart.io sources are all
over the place

------
realPubkey
\- java

\- dojo

\- IE11

\- jenkins

\- we are not a startup :)

------
hungerstrike
Backend: Node.js, SQL Server, Redis.

Frontend: React, Redux, Bootstrap via create-react-app.

