Just another day in life of one.
August 2014, I was in the process of evaluating tech stack for my next project. For last few projects I used MEAN stack , most recent being Resumite and I loved working on Express and Angular but now it was time to move on, as future of both seems very doubtful.
5:00 am in the morning and I was exploring the newly discovered world of Isomorphic JS with React, flux and what not. Being a JS lover, I am fascinated with future of isomorphic/universal era of the web.
Web apps started with full server side rendering to SPA(Single page application), next logical choice is obvious. Better SEO, performance and fully functional UX, what more you can ask from a browser where things are not much in your control.
Two straight days and I went through analysing Express, Kraken, Sails, Loopback, HapiJS, ReactJS, React-engine, Flux, Dustjs, Hybrid apps, full isomorphic apps and things I don’t even bother to remember. After this mind-blowing exercise I had my winners.
- HapiJS over kraken, express, sailsJS and loopback, because of security and configuration over code.
- ReactJS over Dust, Angular, Handlebar— Performance was amazing and server-side rendering made it a clear winner.
- Architecture : Fully Isomorphic apps over hybrid — Its new and challenging concept and people are just experimenting on it for now.
Finally I have it. It was simple yet complicated as no best practices were available for Isomorphic apps that time.
Techie in me was happy, dude this is awesome to work on. Hipster of hipsters Stack. But wait…, You run a startup and have deadlines for shipping the product in next 30 days and if you haven’t noticed you are the full stack designer here.
That’s bummer, right?
I closed the lid of mac and started walking around with nothing but a curious why in my mind.
Why I have to pick between cool tech to work on and hustling to launch beta?
Why this tradeoff?
Why walk of “savvy tech stack” to “just ship it” was so rapid?
I had two options.
- Go with my usual stack and be ready to re-write it once I have big bucks from investors or customers, which at the end of the day will cost my customers, not to mention slow growth and shitty product flow (You hustled, didn’t you?)
- Do something innovative. I had no idea what!
There is a saying “If you are not embarrassed with the first version of your product you are late to the party”, but coming late to the party is a better choice than showing up naked and making a show out of yourself.
I don’t believe in rushing to launch the product and ship junk to users. But that also doesn’t mean you need to wait for the perfection. MVP is important and so is the sequence of prototypes. If you are planning to build a car, building a motorcycle is not minimal viable prototype. It is a disaster and waste of resources.
Goal should be to build something that works but also is the right step towards your final goal.
In the world of tech, things move with speed of light. Your best bet is to stay as independent as you can of the frameworks you are using. In longer run, this will help you stay flexible towards your choices and more robust about your product.
At the end of the day, this is what I chose to do and happy with it till date.
- React as view framework, I wrote all components independently and all interactions as pure functions that would take react powers as parameters and can be replaced by any other framework if I choose to do so.
- React for server as well as backend rendering, I started with server side rendering only to make sure I get things right and don’t have to repeat myself when I take leap to transfer state to client side and provide SPA experience to my users. Fortunately, React made it really easy. Other choice could be Handlebars.
- BEM and SASS, the way I wrote CSS was amazing in itself and deserves another post.
I chose to stay lean, independent which i believe always helps in long run.