Lately I've been advising a few companies with exciting nascent products about infrastructure/reliability/technology matters and I am surprised with the set of common issues/patterns I encounter. A few common key points I have observed in a 🧵... (happy to elaborate more)
1/ Fancy, bleeding edge infrastructure will not turn your company into the next Google. Infrastructure, in an early stage company, should be kept to the minimum, even if it comes at the cost of certain waste.
(Very rarely your product is going to preserve the same needs for a long period of time, hence, lots of upfront investment in infrastructure might actually damage your ability to iterate).
2/ Focus on optimizing those parts of your stack that are important for your product. (example: if your product needs super low latency, invest in very distributed infrastructure. If not, that will be a road of pain).
3/ Your most important asset is focus. The true 10X developer is the ruthless removal of distractions.
4/ Related to the above. If most of your work is of an unpredictable nature, invest heavily in making it predictable or negligible. There is a huge amount of focus wasted in firefighting (managing incidents, for example).
5/ Monitor what matters. You don’t need to know when a random hard drive in a random server is failing. You need to know when that has any user impact.
6/ Treat any anomaly (good or bad) as a learning opportunity. An incident should have a postmortem to minimize the risk of recurrence. A happy accident should also be analyzed, to explore opportunities you might have not predicted before.
7/ (sad to say this in 2020) The ability to iterate fast is much more useful than long validation cycles. Treat rollbacks as new deployment events.
8/ If you can afford it, try your crazy ideas as quickly as possible with small sets of users. Be ready to rollback^H^H^H^Hforward.
9/ Keep feedback loops as short as possible. A CI process with flaky tests that steal hours of attention is probably worse than your ability to try your software with real humans.
10/ Your product quality and future is in the hands of creative minds. Treat those minds with respect and most importantly with trust. Let ideas fail. Celebrate the failures. Learn from them.
11/ Do not copy blindly organizational models without understanding their background. Your ideas, your vision, your people should shape your very own organization.
12/ Infrastructure cost can skyrocket quickly. Make sure you will be able to pay for those components that are expensive (i.e.: transcoding, render, training ML models) when you are 10X the size at any point in time. If you are scratching the limits, consider optimizing.
13/ Factor out repeated needs and platformize them. When you have created a building block 5 times, it might be the right time to settle on one blessed way, even if it has shortcomings.
14/ Make development and creativity a team activity. Having a go-to person for each specific piece of technology puts you at risk and puts that person in a shitty position.
15/ Don’t sweat too much about technical debt. There is no such thing as a company free of technical debt. Just make sure you know about the stinky corners of your stack. Tackle those problems when it matters.
16/ There is no such thing as “software X solves 100% of my problem”. Do not let this become an excuse for reinventing every possible wheel.
I have a bunch more, but as @Robotclimbing would say, that’s a good place to stop. WDYT?
You can follow @davidpoblador.
Tip: mention @twtextapp on a Twitter thread with the keyword “unroll” to get a link to it.

Latest Threads Unrolled:

By continuing to use the site, you are consenting to the use of cookies as explained in our Cookie Policy to improve your experience.