May All Your Monoliths Be Majestic
Hello there, travelers.
I wanted to tell you a bit about a yet-unannounced side project that I started work on this week. Specifically, I wanted to talk about some of the architectural decisions that I made and what the outcome of those decisions has been so far.
For this project I’ve decided to take the approach of building a majestic monolith. The term “monolith” has a rather negative connotation surrounding it in the software space. When someone hears “monolith” they will most likely immediately picture a Big Ball of Mud: a software system that is “a haphazardly structured, sprawling, sloppy, duct-tape-and-baling-wire, spaghetti-code jungle”.
While that sort of system is a monolith, it is not of the majestic kind. It is entirely possible to build a monolithic application that is still loosely-coupled, well-factored, and modularized without losing the simplicity and velocity that having a single deployment unit can provide.
Here’s a glimpse at what the stack looks like so far:
- Rust as my language of choice
- Rocket to provide the web framework foundation
- Tera for view templating
- Diesel for interacting with the database (Postgres)
One of the things that I’ve immediately noticed about working with this particular stack is just how easy it is to crank out new features. Most of my previous projects, as well as my projects at work, have maintained a separation between the backend and the frontend. The backend would be a REST API that the frontend—usually a React app—would consume. While this is a nice architecture, especially for larger teams, it suffers from being entirely too much of a burden for small team, especially when “small” is code for “just me”.
There are still some more additions to the stack in store; I still haven’t figured out the stories for styling or providing progressive-enhancement with JavaScript will be yet. And I’m sure that I will be talking more about this project in coming newsletters.
For now, I will leave you with some cool findings from the internet:
- Declarative memory management: This is a lengthy (but well-worth it) blog post about the way Rust manages memory. It’s a super fun read and I would highly recommend, especially if you’re not super familiar with Rust.
- Too Tired to Do Everything? How to Live Better Without Burning Out: For those of you who are feeling burnt out (like I currently am), I hope you find this helpful.
Until next time,
Marshall
P.S. It has come to my attention that at least one of my subscribers was getting warnings about my newsletter from their email provider. I am going to get a proper domain setup for my newsletter to hopefully address this issue.