Software Development

My Preferred Technology Stack

All the pieces I use to build a web app quickly and how they all connect together

What is a tech stack?

A tech stack is a set of technologies that make up the building blocks of a websites. Regardless of what your website will be about, you'll need to consider the front-end (what the user will see), the back-end (what the user will do, if it's not just static), server and networking (how they'll find you on the internet) and a database (to save data, of course). This could be enough if your a blog or a small business, as long as it's hosted on a moderately sized server. However, if you're going to have a ton of traffic you'll need to expand the architecture to support the load. We'd need to use something like microservices with Docker (to package app services as portable container images), Kubernetes (to orchestrate the containers), Redis (for caching and as a message bus), a load balancer (to spread the traffic across servers), a CDN (content delivery network) and a whole bunch of additional processes to maintain consistency, availability, persistence, and security. It's a lot of work! But at the end you have a system that can auto-scale depending on the traffic, so you only pay for what you need.

What I've tried in the past

If you're running a static site thats only gets a few hundred visitor a week than this is completely over engineered and a simple site from WordPress or Square Space would suffice. I've built several sites with these platforms and they're great if you're going to keep things fairly standard. However when I used these products, I repeatedly get to a point where I want to do something or make it look a certain way, but I'm limited by the theme, plugin, or my reluctance to learn php. I would need to open up the hood and go all Frankenstein on it and it isn't fun or pretty and quickly all the benefits of using these platforms started to fade away. Before that I would build sites with raw HTML and CSS and just ftp it to a hosted webserver. Then I tried some popular content management systems and realizing I would need to code more of the site myself to expand its functionality. I tried Django, Flask, and another python micro web framework. It was eye opening and the things I could do grew wildly. But there was still a problem, at the end of the day I couldn't build everything in Python, JavaScript is king on the browser and there are a lot more JS libraries for the web than python web libraries. For a straight forward API it's excellent, but I thought, "If I want to build a more sophisticated web application there must be a better way." It was around this time I started looking into JavaScript frameworks. I would have to learn a new language, but I knew it'd be worth it when I saw everything these frameworks did out of the box. If you make enough websites the hard way, (without the help of too many code libraries) you start to develop a process, a certain way of structuring your directories or managing routes. This is what a JavaScript framework is made up of, but it’s been refined over many iterations to make the development experience and application way better in pretty much all aspects. I went through the Hello World examples of Angular.js, React.js and Vue.js since these were the frameworks I was hearing the most buzz about. Long story short, now I got frameworks for my frameworks! I went from building a web app that resembled the monster of Frankenstein to a magnificence that's more like a luxury Autobot Transformer. It's like I'm rolling in what I've assembled to be the Rolls-Royce of tech stacks. Try me! ... *pause for dramatic effect* ... Now. Without further ado. Allow me to introduce to you... my monolith!

My Current Tech Stack

As you can see, I'm using Vue.js (w/ Nuxt, Vuex and Veutify) for the front-end, Node.js (w/ Express.js) and Python3 for the back-end, MongoDB (w/ Mongoose) for the database, Redis (w/ RedisJSON) for caching and communication between microservices, Ngnix to launch a reverse proxy on an open port, Cloudflare for the DNS and more caching. And everything is running on a VPS from AWS. This architecture is more than capable of handling my projects across the whole world wide web effectively.

Building a web application has become much easier than 10 years ago with all these new layers of abstractions and once you understand the purpose of each tool it's simple to swap things out for other technologies as things evolve or I work with other people.

Some Things I Still Want To Explore

Even though it's an amazing amalgam of software I'm still learning and trying new things all the time. I still want to learn and play around with:

  • Serverless Functions
  • Typescript
  • Sass
  • Firestore
  • Jenkins
  • Terraform
  • GraphQL
  • Apollo
  • Auth0
  • Okta
  • Ionic
So what do you think?

*Required