December 06, 2019

My Year-in-Review 2019: Tech Stack

The amount of new software produced these past few years are tremendous. You get new frameworks, patterns, and methodologies left and right.

After years in this industry, and my subtle resistance to bandwagoning, I present you my tech stack this 2019. I hope this inspires some of you to learn, if not, discover these somewhat old things I use:

Primary Language: Node.js

I’ve been in love with node.js since it came about in 2011. Slowly adopted it through it’s iojs days and the release of 4.x. It’s been my primary driver that got me through my career and made me actually enjoy it.

It’s a versatile platform that deserves some praise (and some of the flak). But I can’t deny how productive I am when I work with node, compared to any other language.

Here’s a recommendation that I always make: If you are in a big javascript team and you are noticing that the work has been getting messier by the day. Explore Typescript and make sure your team is kept safe from yourselves.

Database: PostgreSQL

I have been around enough times to know when a tool would give you a headache, or make your life better. and databases are that one sort. I’ve learned that the simplest solution is the best solution. and that PgSQL provides that simplicity. Need a simple document store? JSONB. Need a time-series database? TimescaleDB. Distributed? Citus. All under one umbrella.

Now why not MySQL? Now this is just a matter of preference, and nothing scientific. I love the added functionalities provided by PgSQL such as inheritance and concurrency. You’d also find that PgSQL is more extensible than the former. Meaning, people (not me), can create better solutions on top of a well proven system.

Cache & Bus: Redis / Redis PubSub

Not Kafka? Where’s Kafka? Well folks, This year has been a year where I have gone back to my roots and when my data needs have drastically reduced. All my asynchronous messaging needs are well served by an instance of Redis. I can’t believe how much time this saves me in implementing asynchronicity into my projects.

A word of caution though, if you are handling billions of bytes of data; actually consider a proper messaging system, I suggest zeromq, It’s great!

Frontend: Next.js

Now this is what I love about this year. The fine folks at zeit have created so many wonderful products and one of them being Next.js.

Whenever I have the chance, I would recommend this library. It drastically reduces the amount of time it takes to create a frontend app with features that you would normally get from actual 2 week sprint amount of effort.

A quick summary of the features you get out of the box: server-side-rendering, AMP support, routing, code splitting, static exporting, and all with webpack extensibility.

I have made all my projects with this beauty and I have not regretted once. I highly suggest that you try it.

Honorable mentions are: nuxt.js (vue) and sapper (svelte).

Favorite Libraries:

  • fastify — clearly is a winner in the API framework department. It keeps you sane and safe with out-of-the-box jsonschema support. Very fast compared to express too! However, the amount of libraries built around fastify are still miniscule compared to the likes of koa and express.
  • got — axios has been riddled with issues for a long time and it’s about time we need a decent replacement. Enter, got. This small library supports everything that axios and more. I suggest you replace your fetch libraries to use got instead!
  • React — I still love React and the community around it. It’s still a relevant technology that still has huge potential. A small shout out to Cassidy Williams @cassidoo on twitter for being the most entertaining person in the Javascript community.
  • eslint-plugin-security  (If you haven’t been using ESlint and Prettier in your projects, well it’s time to get out of your caves and start now. Here is a gist that you can start learning from.) This particular ruleset notifies you of potential security flaws that you might not notice. Very useful to catch simple flaws that you might’ve thought is perfectly fine.
  • eslint-plugin-jsx-a11y — If you work with React and JSX, you’ll definitely need to have this in your arsenal. This beautiful ruleset forces you to be aware of accessibility in terms of your HTML work.
  • Jest/Enzyme — I have been a fan of jest since it was released. It’s such a simple testing framework that doesn’t get in the way, especially when working with React via Enzyme.

Runtime Ecosystem: Micro

I’ve been playing around with Golang for the past 2 years and early on, I stumbled into micro as one of the most used API frameworks. However, their direction took a turn and they invested heavily into creating it into a microservice runtime.

To date, they have created a microservice runtime that you can deploy easily for any of your projects with compatibility with well known providers/tools. I love playing around with what they created, given the amount of passion and time it took to get to where they are; an enjoyable experience.

I highly recommend you guys to try out the micro.mu runtime in your next Golang project

Favourite Cloud Provider: AWS (still)

Well, they do have the biggest marketshare (so far). I am impressed by the sheer amount of work put into the AWS services and the continuous improvement over the years. It has drastically given me the flexibility to deploy my projects in whatever architecture I need them to be. I’m still anxious with bill-shock, even though they have made ways to alleviate this through AWS budget, lightsail, and better pricing communique.

With that said, my next favorite would be: DigitalOcean and Netlify

Favorite Tools:

  • Multipass & Microk8s — When kubernetes came out, I was intimidated with how the set up looked like. Months later, microk8s came via multipass. What a joy to work with a local k8s cluster with these two.
  • Hashicorp Vault — I’ve always loved storing my environment variables in a .env file, following the 12-factor principle, but managing connection credentials were a pain. Then I employed AWS Secrets Manager, and not long after, Hashicorp’s Vault to manage these. I’ve never looked back.
  • Github Actions — One thing I admire with gitlab was their CI tool. One thing that, as an avid github user, lacked. And I for one, love consolidation of tools. I was happy when Github Actions went GA this year and immediately played around with it!
  • Serverless — With the rise of serverless functions, this type of software was needed. This tool helped me deploy to AWS Lambda so easily, it was unbelievable.
  • gRPC — Although, I suggest to only use this in Golang, writing proto files were a joy because of the strictness it implies. gRPC also makes it really easy to provide efficient connections between services. I can’t wait for the day when browsers can fully support gRPC.

Favorite Pattern

There were not so new patterns that I loved working with this year. One of them being the concept of “immutable”. I’ve been applying it to database planning, capacity planning, programming, and state management. In various programming disciplines, immutability made sense.

Here are a few others that I got fond of this year

  • GraphQL — A relatively new model, i’ve had fun with this query language. Facebook has created a language that solves a facebook level problem. However, I’ve yet to implement this into a project and let alone have one make sense for it.
  • OpenAPI — Following my fondness of strictness in anything you consume, I value the guys from swagger in improving the OAS
  • External IAM — I don’t like recreating the wheel over and over again. Thus I fell in love with the concept of External IAM. I have been using Auth0’s services a lot this year with my projects. I have never seen an open source equivalent, perhaps it is a vertical that I can go into?
  • Resiliency — As with my article written 2 years ago, I am still adamant of employing resiliency within software.

What’s for Next Year?

The arbitrary “next” year is always exciting for me! I hope it is for you too. Here are some of my plans that I want to achieve next year!

EMBA at Smartly — at the time of this writing, I am trying to get myself into the Smartly EMBA. I believe this is a natural progression for me in adding knowledge on how to run businesses properly and successfully.

Learn more Golang — I believe Golang is a very good language that will pick up more popularity next year. I want to employ this language into one of my projects.

Do speaking engagements — I have a passion to teach people. But I have never pursued the medium of public speaking. Next year, I will plan and make it a reality.

Thank you for reading up til the end. I hope you copy this format and create your own tech reflections. Let me know if you do, and i’ll drop by and read them!

Never stop learning.

This article was originally published in December 06, 2019, here.