Aurelia + Firebase = The Ultimate MVP Stack
Tags: aurelia, javascript, startup
Published: 2020-01-13 02:03:42

When it comes to tech stacks, there are many different options to choose from. In-fact, it can be quite overwhelming picking each individual part of your eventual stack. 

When it comes to the front-end, there is no shortage of options. Do you go for something well-known and used by the community like React, do you buck hype and go for Vue (aka React Lite) or do you purchase yourself a first-class ticket on the hype train and choose something like Svelte?

All of these decisions you make matter. Are you making them for the right reasons, are you choosing a specific piece of technology because it's popular or because you feel it is the right fit for the job?

For me, I made a conscious decision in 2015 when I first saw Aurelia's announcement on the homepage of Hacker News to stop blindly following trends, to start thinking for myself and to start using what I want to use, even if it is not the popular option.

Over the years I have crafted the perfect stack, a stack suited to niche side-projects as well as MVPs and even something more serious (if you invest enough time and commitment before the next idea comes along).

## Aurelia and Firebase

By combining Aurelia and Firebase together, I get an immensely powerful and flexible stack.

- Aurelia for the front-end
  - Standards-based framework with enhanced HTML and Javascript
  - Conventions based, meaning you can focus on the task at hand and spend less time configuring the framework
  - Official packages for; routing, HTTP requests (via Fetch), form validation and state management
  - Plays nicely with TypeScript
  - Works nicely with micro-front ends
  - Support for Web Components
  - Dependency injection (DI) for nicely dealing with inter-app dependencies
  - Powerful and extendable templating syntax
  - Easily scaffold new components and resources using the Aurelia CLI
  - Class-based and easy to test
  - Has no Virtual DOM meaning any library can be used (including those that touch the DOM) and requires no workarounds to use them
- Firebase for the backend
  - Firestore for the database
  - Authentication for signup, sign in (also provides easy support for oAuth authentication and numerous providers)
  - Functions for the backend scripting aspect of my backend
  - Storage for static files (aka Amazon S3)
  - Hosting (the ability to deploy site changes via CLI)
  - Easy language for writing security rules
  - A managed infrastructure that doesn't require a paid consultant to configure

Using the above two options in my toolbox, I am able to get functional applications out in record time. Once you get passed the initial learning curve that all frameworks, tools and platforms have, your productivity will increase a hundredfold.

The result is a thing of simplistic beauty. I am not spending hours configuring packages for routing, form validation, writing a tonne of boilerplate logic for state management or trying to work out what packages to even install in the first place. I take what I need out of its pristine packaging and I start building almost right away.

Best of all, Aurelia doesn't have a Virtual DOM or any DOM abstraction for that matter. Instead, it has a reactive binding system. This means that you can use libraries that touch the DOM (jQuery or elsewise) and drop-in sdks like Firebase without the need for hacks and bridges to get them working. Things are plug and play.

When you don't have to write a bunch of framework/library specific configuration and boilerplate, it's amazing how productive you can be. And you don't realise how much time you spend on these things until you use something like Aurelia and then it really hits you that you could have had all of this free time a long time ago.

I am not going to win accolades for choosing Aurelia and choosing Firebase. A lot of people happily will use the popular option and that will always be the case. I truly believe if there was an MVP head-to-head battle, my stack would result in me being victorious almost every time.