3 ms·
My last 3 consulting gigs have all had the same general issue - they went with the "quick to start up", scalable solutions and immediately smacked into a brick
by tomlagier 6y ago
My last 3 consulting gigs have all had the same general issue - they went with the "quick to start up", scalable solutions and immediately smacked into a brick wall of complexity. These are 1 to 3 person eng teams that started with serverless functions, NoSQL databases, and event-based architecture and not even 6 months down the line had to hire an expensive consultant to shake out their architecture and point them at something less scalable but more practical to build on at their size.
If they didn't have VC, they'd likely die on the spot, drowned before they even had a shot at real product-market fit under the weight of their own accidental complexity.
Now, is there a set of common patterns that works well enough for startups to iterate quickly with, that _also_ scales? Probably. Can you be successful with NoSQL et al out of the gate? Almost definitely. Does it make it _much harder_? I have three anecdotal data points that point to "yes".
From my work over the last year, I'd suggest "choose boring technology" over "worry about scaling early" 10 out of 10 times. You need something that scales _conceptually_ before it can scale in the cloud, if you don't know what your core business value is or how your product actually works it's really damn hard to build a cloud-native app that anyone can actually iterate on. You're fighting incidental complexity every step of the way.
Maybe in 5 or 10 years, when the average developer has a wealth of experience in scaling technologies, when serverless functions have fewer dramatic downsides, when we start seeing out-of-the-box event driven full stack frameworks, when the bleeding sharp edges are sanded off NoSQL and we've figured out a good story around schemas and validation, then it starts to look more attractive for young companies. Until then, though? Stick with the boring stuff.
EDIT: Though, re-reading this, I suppose I should acknowledge my own survivorship bias - the companies that figured out their scalable, cloud-based tech stack early have no need for my consulting services...
- sk5t 6y ago"Choose Boring Technology": http://boringtechnology.club/ http://boringtechnology.club/
- macspoofing 6y agoGreat comment. This mirrors the ridiculous 'big data' fad of a few years ago, where startups would deploy Hadoop clusters to crunch through Terabytes (or even Gigabytes!!) of data ... a task that could have been done much better by a well resourced monolithic system that was easy to implement, and easy to maintain and understand and just worked.
- je42 6y agoI am the only FTE in engineering. Have 10ish cloud-run services plus a full K8Ss cluster, all in GC. and it is pretty good. So even, in a one person situation, i decided to split services sometimes into two. Main reason for having separate services is - a different privacy/security context or deployment time: So one service had so many native libs that it needed that i didnt want to wait 3 minutes to build to deploy when independent code had changed. So far I would say the setup totally practical for our use-case. A monolithic setup would have been slower. Mainly, with regard to quickly iterating.