Rant: What the stack?
Date: 11th Oct 2022
You have the eureka moment, you have an idea that would solve some real problems. Being an engineer, you jump in to build a web or a mobile app. You choose a web app because you can ship faster.
Looking at the options, you think if you would need a React App or a more complete meta framework with routing like Next.js. You choose Next.js.
You start building pages and realize that you would need a component/styling library, but now you’re confused between a CSS first option like Tailwind or Bootstrap or a React based component library like Headless UI or Chakra.
Soon you realize that you need a user login, you look at the authentication options. You have options like Auth0, Okta, Cognito, Firebase, etc. You don’t want to be locked-in to a specific provider for everything, you choose Auth0 and integrated with NextAuth.
Then you realize that your users would need to save some user data and then you decide whether you want to build your own backend or use a managed service like Firebase, Supabase, AWS DynamoDB. Thinking about building & deploying your own backend gives you chills to the bone. Over time you have realized that Node + Express is just barebones. You briefly think about Dockerizing and deploying over Kubernetes. But soon, you give up and you choose Firebase and you lock yourself into Google Services.
Later you want some sort of Email, Push Notification, SMS services, you choose Twilio because other services have some global limitations. You rush to deploy and now you have multiple environments and their own data.
You write a migration script that upgrades your data-structure over time. Oh! We forgot TypeScript, we need some TypeScript and maybe a third service likes using GraphQL, why not use that. But deep down, you are guilty if you used the correct State management solution in the front-end? Was it Redux Toolkit or the new shiny state management solution in the town. Or some FAANG company announced a new state management solution that was very specific to their use case and you’re spending hours explaining your engineering team why that’s not the perfect library for your use-case; you somehow convince your teammates (but deep inside, you’re also dealing with some FOMO).
Is the local state typed with the persistent entities? Oh, let’s also add some LocalStorage and deploy everything. But how do we test all that, we need one more environment, maybe one environment per branch. Let’s write another migration script.
But wait, you need to inform the users about the new feature that you just shipped, let’s add them to a newsletter service and send them an update email. How about some scheduled emails? Let’s use a CRON service (do we even have one?). What about the multilingual option, how about a CMS like Contentful or Strapi and as the brand grows, wouldn’t you need a design system?
You are soon dealing with engineering problems and you totally missed the actual problem that you were trying to solve.
—
The engineering fatigue and the decision paralysis takes the fun away of solving real life problems. It’s 2022, and I still miss building web-apps on top of Ruby on Rails and Laravel. It made everything a breeze but today a monolith stack has it’s own challenges, because we usually need a decoupled API layer, a lightning fast web-app that can be distributed over the Edge network, we might need a complimenting mobile app that shares code from the web app and relies over the same API backend. And all that packaged under a nice and beautiful deployment pipeline that can be distributed with a click of a button. Is it already time to build a more complete stack that lets us focus on solving the actual problem rather dealing with the engineering problems!
Let’s build one?
Best, Sanket
PS: Oh no, I forgot to include Storybook, i18n for currency, the new shiny hook (just for fun and some ego boost because I know more than you know)… and the new payment gateway API that wraps other payment gateways that wraps other services and charges me 3% extra. Also, I don’t test my code because it never fails. Sorry! But my rant isn’t over. Let’s fix it!
If the post rings a bell, follow / join me on my journey of building the stack of the future! I am building in public and the updates would be posted to Twitter.