We are different than the Tech Giants. We can and should develop software differently from them. Generally, we have simpler needs.
A Part of the Tech Giant Discussion
Lately, there is a wider discussion in the public sphere about some of the ills that come from the emergences of very large tech giants (companies) that control or influence large aspects of our lives and society. Those are interesting, and I believe worthwhile, discussions. This article is but a sliver of that larger discussion.
How does the existence of these tech giants affect our software development practices? In one way, they encourage the creation of complex software solutions.
A Different Class of Problems
These exist: super-large companies that serve super-large swaths of the population with super-expansive products. They employ some of the smartest and brightest and most innovative among us (to optimize an ad, a Like or a Buy button, among other things).
But these are not you or me (statistically-speaking).
This is a different class of problem.
I am a super small company, serving a minimally-viable audience with products that yesterday were toys.
Different Problems, Different Answers
Do I need 99.999% up-time? Do I need to auto-scale? Do I need redundancy?
Do I need to A/B test? Do I need to optimize my mobile experience?
Do I need to be AAA accessible? Do I need a CDN?
Do I need to follow that convention? Do I need the lint rules?
Do I need CI? Do I need to upgrade? Do I need a certain architecture?
Do I need to use that protocol? Do I need to follow that framework pattern?
Do I need that project layout? Do I need to split up this code?
Do I need monitoring? Do I need persistent logs? Do I need backup?
Do I need to depend on that library? Do I need to cover that case?
The answers to those questions aren’t definite. It’s a giant “it depends”. We say this and joke about it. Then why do we sometimes fail to act like it?
The gravity of the Tech Giants are large and difficult to escape from within software development. They have great talent. They write great think-pieces. They prove their need in great white papers. They (and their influence) are prolific on the speaking circuit. They invent and push the state of the art for their class of problem. It’s all very exciting.
In some ways they’ve surpassed us. (In so many things!) Why not in software development as well?
We software developers and architects and operations engineers try to keep up. We use the latest, greatest. We want to be on the cutting edge. We don’t want to look inferior or be inferior. We want to be marketable. We want to attract some of the best and brightest.
But we will be more bright if we see these as often different classes of problems. We will stop resume-driven development. We will learn best-in-class tools and apply them to our best-in-class problems.
Avoid the Cost
It’s fun to punch above your weight, but it takes a lot of effort. Yes, you might be prepping your team and product to be the next rocket ship. Good luck to you.
But if you’re happy to play within a certain scale and class of problem, you might want to avoid some of the costs of those more expansive problems.
Save money. Save time. Save the need to get more help. Save the need for some of those conferences tempting you to a new tech. Save your breath trying to keep up.
What do you think? Are there different classes of problems? Do we attempt to develop software in the mode of the tech giants when we could otherwise happily avoid it?
Edit: I’ve added this example because it really speaks to the same idea.
A company not using Docker - They feel some pressure to use it. They don’t see the need. They see it as meta work getting in the way of the real work they need to do.