faff n. An unnecessary or over-complicated task, especially one perceived as a waste of time. v. To waste time on an unproductive activity.
I've been thinking a lot about faff in tech recently. I love being a software engineer, but if we're being honest we've all experienced work where we couldn't help but think "Why is this so hard?"
Sometimes this is because you're solving a hard problem (if you're building sci-fi nano-bots then this post probably isn't for you.). But other times the complexity is coming from over-eager software developers implementing pure faff. When your infrastructure is more complicated than your business logic, then your feature to faff ratio is way off.
"But this infrastructure will be useful one day" you cry, as PagerDuty alerts yet again.
That's why we're going to talk about contextual faff. This is faff that's faff because it's ill-timed. You don't need that complexity right now, and you don't know if you'll ever need it.
So why not push back the faff until it's not faff at all? Build a Majestic Monolith. Host your application on Heroku. Scale your database vertically for as long as you can. I guarantee that the payroll savings will be more than enough to pay the fixed costs of a nice PaaS.
What's more, all that extra time will be spent on beautiful, polished features. Instead of a collection of half-baked content served up in a technically interesting way, you'll have an amazing feature-set that your users love. Your feature to faff ratio will be high indeed.
And hey, when you're the next FAANG and you've just signed up your 10,000,000th user, you'll have a big enough engineering org that you can afford to have a team focus on that database sharding. My money is on them doing it better anyway.