Developers July 13, 2020

What tech stack would you build your dream product in?

Håkan Nylén @confact

If you know any programming language when time or effort doesn't matter and you have enough money to build just like you want it.

What tech stack would you use?

My tech stack:

  • Ruby or Crystal for backend
  • Stimulus or Alpine.js for frontend
  • Sass for CSS
  • Postgresql for database
  • Elasticsearch or Clickhouse for searches/real-time anything
  • Redis/Rabbitmq depending on what
  • Some European Cloud (like citycloud) for hosting.
  1. 3

    Vue, Node, Tailwind Css sounds tempting nowadays.

  2. 3

    The best thing you can do is to choose a tech stack for your first project, then stick to it. It should align with your areas of experience and the willingness to learn something new.
    As your project matures, you'll discover common patterns (push notifications, API versioning, etc.) that you can reuse in any new project. There is no reason to reinvent the wheel every time.
    That being said, here is my tech stack, along with the reasoning of choices:

    • Java / Spring Boot backend, because I have a Java background
    • MongoDB for storage, as its schemaless nature allows fast iterations (ideal for startups and not only)
    • React / Redux frontend, for its performance
    • MaterialUI, as UI design system, because of its consistency and nice look
    1. 2

      Choosing a tech stack and then sticking with it is the fastest way I can think of to end up as a career Java developer.

      Don't get me wrong: Java is an effective choice, but don't you ever wonder if some new ideas might keep things interesting?

      1. 1

        I am always, and I mean literally always, looking for new ideas, new technologies to explore. This is why I was willing to learn React / Redux for the frontend, and not use something like Thymeleaf or JSP (yuck..)
        That being said, sometimes sticking to your tech stack, mature code you throughly tested and can reuse, and best practices is the way to go.
        I'm building a web scraping service (https://datagrab.io) and what I can say is that, although I'm interested in new technologies, I would consider incorporating one only if my current stack seriously lacks in the area at hand.
        Java is still one of the best choices when it comes to large-scale systems, having a great ecosystem of technologies, ranging from persistence, to messaging, etc.

      2. 1

        Yeah but to be fair staying committed to a single language will make you one heck of an expert. "Jack of all trades, master of none" and all that.

  3. 3

    Not going into specifics, I would use the most boring tech stack that I know. Something that I've been using for years, and that I know is rock solid, and that I know exactly how to scale and tune.

    I can sometimes define a learning project in which I use a specific stack just for the sake of learning something new. But for a product that I have plans and expectations for, I'd go with boring over exciting any day of the week.

  4. 2

    I've found that I always spend way too long trying to get cloud infrastructure right when I start a project, so I finally got round to creating a reusable serverless full-stack template: https://github.com/stackplanet/sourcestack

    If you're in the Node.js/AWS space you might find it interesting.

    Highlights: batteries-included dev experience, Typescript everywhere, Mithril on the front end as a "simpler React", TailwindCSS, Amazon CDK for infrastructure as code.

    I built this as an alternative to AWS Amplify for creating full-stack serverless web apps. Amplify is a nice tool, but as it's a high-abstraction framework that hides infrastructure behind libraries and code generation tools, I frequently end up fighting against it when it doesn't meet my requirements.

    In my opinion this is the essential and insidious problem of frameworks - they make certain things easy, but they require you to cede too much control and you end up constrained by their assumptions and locked in to their roadmaps.

    sourcestack takes a template based, low-abstraction approach that surfaces all infrastructure and common logic as source code within the workspace, giving you complete control over all aspects of your application. It aims to provide a batteries-included, forkable foundation for a web app that encourages adaptation and a deeper understanding of cloud infrastructure.

    I'm hoping that others might find it useful and perhaps be inspired to create forks or similar templates for other technologies.

  5. 2

    Oh man, I'm actually working in my dream stack, because I'm building a boilerplate for web app devs. I use:

    • Node.js on the back-end, which allows for common code to be shared directly between API and UI (Models, Validators, common libraries, etc.)
    • Vue on the front-end. The Vue/React wars continue, but I find Vue to be simpler, cognitively, which makes it easier for me to work quicker. (It's also smaller and faster, so!)
    • Tailwind for CSS. It's just never been easier to style components.
    • PostgreSQL and MassiveJS for database access. Postgres is just good and MassiveJS moves database access out of Models (which can be used on the front-end, so you don't want DB calls in there anyway) and into Services, which are then composeable chunks of work.
    • Jest for integration/unit testing of simple Controllers served up with Express routing.

    There's a bunch of other smaller things I've set up to make my life better, but those are the broad strokes. It's actually really nice writing code specifically for other developers to use, because I can justify spending time on making something work exactly the way I think it should, as it's something that other developers will end up using directly.

  6. 2

    Backend:

    • NestJS as Microservice
    • MongoDB as Storage
    • Reddis as Cache
    • Hosted in Kubernetes (Microservice design)

    Frontend:

    • NuxtJS, because better Performance than VUE
    • Hosted in CDN
    1. 1

      Hi Leon,

      Sorry to bug you, but can I ask what would you think of caching your query results in the CDN?

      We are developing an API for that, and that could interest you: http://www.querycache.com/

  7. 2

    Rails, Postgres, Sass and Redis are still the best infrastructure around.

    Stimulus has finally been getting the attention it deserves; Alpine makes my eyes bleed and my soul weep. You might also seriously look into the recent excitement around delivering "over the wire" updates using StimulusReflex and Turbolinks.

    https://docs.stimulusreflex.com/

    It's very worth the 10 minutes to check out the "Twitter clone" video. Thank me later...

  8. 1

    It depends on what you are trying to build.

  9. 1

    I would probably go serverless for my back-end: API Gateway, Lambda Functions (running Node or Go), RDS MySQL Serverless, Terraform (for IaC), ...

    For my front-end: Vue or Alpine (depending on the complexity of JS needed), Nuxt (if SSR is needed), and Tailwind CSS with (PostCSS).

  10. 1

    I'm currently building some things using Go and LitElement. The data is stored in a CockroachDB - that's somewhat Postgres compatible - and everything is deployed on top of Kuberentes. The entire thing is monitoring with Prometheus.

  11. 1
    • Reproducuble Double-Blinded Experiments
    • The Veil of Ignorance
    • High-ish degree of wealth redistribution between generations
    • High-involvement democracy based on informed engaged citizens
    • Melange

    .... sorry, what was the question again?

  12. 1

    Node, Apollo Server + Client, React, Tailwind CSS, Prisma + PostgreSQL + KnexJS, NextJS (if SEO important).

  13. 1

    If time were not a restriction, I wouldn't use any dependency (framework or library), but build a bespoke solution.

  14. 1

    In fact, I'm still thinking about best "boring" stack for my project. Cant decide: proceed with feature-proof Laravel or my own tiny fast PHP axe for REST APIs:

    https://github.com/gotzmann/comet

  15. 1

    It will depend on the project of course, but I can see myself with Golang + Clojurescript. Or all the way Clojure / Clojurescript, why not?

  16. 1

    JAMStack all the way!

    I'm still figuring out which backend framework is the easiest to iterate with, right now I'm checking out https://strapi.io/ which looks very promising and feels great so far! Coupled with a nice graphql interface and hosted on Google Cloud or AWS (for those sweet free credits!)

    On the frontend next.js whenever SEO is a topic because of the awesome server-side rendering capabilities. Otherwise, it's a setup of create-react-app, react-router, and the usual libraries.

  17. 1

    Node/Express, MongoDB, Angular, Material UI. Create a boilerplate template for all the things, re-use everything and just pump out products left and right. Find the one that gains the most interest then dump all of your time and energy into that one to grow it.

  18. 1

    I'm starting to really enjoy react native. Backend would be Ruby on Rails and postgres + Graphql

  19. 1

    Hej Håkan!

    I'm actually building a dev tool for others in exactly this space at Nhost.

    The service is a BaaS with a dream tech stack of:

    • PostgreSQL
    • Realtime GraphQL API (Hasura)
    • Auth (JWT tokens)
    • Storage (S3 with built-in permission system)

    You can read our new documentation here:

    https://docs-git-master.nhost.vercel.app/

  20. 1

    I think this is the exact opposite of the way you should be looking at things! Technology is a means to an end. There is basically only one reason I ever want to use a technology:

    1. It’ll help me accomplish my goal

    My dream tech stack lets me ignore the technology and focus on building my vision.

    1. 1

      That's super sad! Programming should be something you enjoy.

      If you're not optimizing for happiness, you're missing out. And let's be real: shipping something requires a marathon, not a sprint. If you enjoy the process of development such that it feels like artistic expression, the end result will be better in every way.

      1. 1

        I do enjoy it! But you know what I enjoy more? Watching my vision come to fruition.

        The thing I'm optimizing for isn't money. It's doing creative work. Seeing something in my head and making it real. That's what makes me happy. Technology happens to be one way I accomplish that, but ultimately it's a tool — just like my guitar and my pencil.

        Enjoying the process means enjoying the act of creating. Programming is fun, but dreaming about tech stacks feels the same to me as dreaming about which pencil to use.

  21. 1

    Hi Håkan, good question!

    I'm using Sass, Elastic, and then Vue (WebSockets, Vuex, and CASL) frontend with Node as the backend, feeding into: Express with Joi and Passport; MySQL via Sequelize; and Redis.

    I rebuilt the whole of the Under Cloud from scratch to replace what had been written in PHP and CodeIgniter (ancient, in Internet terms).

    So, in a sense, this is the dream stack I had in mind at the time, a little over 48 months ago — but things change so fast!

    In terms of the technologies that made the difference, that would be Elastic, Joi, Sequelize, and getting to grips with the vastness of AWS.