No more magic, please! (2023)
nickgeorge.net
nickgeorge.net
We swing from monoliths to microservices and back. From server rendering to client apps and now some bastardization of both via RPC calls.
I've seen this happen most often due to moving too quickly upfront and not putting in the time to really plan for later. We ship fast above all else but end up with a pile of tech debt and a team that's built skills around those very same tools and patterns that are causing problems at scale. Shifting later is extremely tricky (and interesting if you know what you're doing), but you often have a team that is ill suited for the next architecture and paying customers potentially with SLAs that make migrations difficult and risky.
Everyone wants to be a new Google/Apple level success story, few want to admit that this is an increasingly mature and sometimes moribund industry.
VC funding definitely pushes a certain type of incentive on startups building dev tooling, hosting services, and frameworks. Those companies do one heck of a job convincing the devs shipping sites that we need to use the new hotness because everything else is old and busted.
- Accept this is how we make our money and that being paid to be the $INFRA person (replace with your infra tool or cloud provider of choice) is not necessarily a bad thing unless you can't translate that into whatever the next $INFRA is
- Go build the next $INFRA and sell it to all the people like you that didn't like the old $INFRA (or lose everything, obviously this is risky)
- Complain
I don't think the third option is really a good strategy in life. A lot of the frustrating things in industry exist for good reasons (that more often than not, turned out to be bad/inconvenient a lot later) and life is too short to get upset at things when you're being paid to understand them.
But obviously a config file is just a program and you need to know how to debug it when something goes wrong, and it's not helpful when "what does this config do" is hard to see because the thing it configures is intentionally obfuscated.
On the other hand, a lot of frustrating things that could be fixed with a modicum of effort are neglected on the basis that "nobody's complained". Sure, pick your battles, but don't be so compliant that you leave easy wins on the table.
1. accept the problem
2. become part of the problem
3. complain - but please don't
I can't help thinking there must at least be some fourth way . . .
Always feel helpless when app engines cloud, managed db, managed kubernetes upgrades or something else fails. Slow builds, builds getting stuck, upgrade issues, overcomplicated new concepts, cloud outages, slow support.
One exception to them all is Vercel, it's just amazing. Haven't had any issues, fast deploys, works instantly. What a joy.
A lot of traditional approaches are gratuitously stateful, and there's a lot of room for tooling improvement there even if you want to avoid YAML.
Stateless infrastructure is amazing. Checking my infra into code is awesome.
Or literally anything to do with certificates/keys. GPG in particular is actively hostile toward stateless operation, far more than is necessary in an admittedly tricky field.
This is kind of an arbitrary line to draw. You can learn the ins and outs of Nginx, but that's also "configuring a tool" rather than "software engineering".
Of course, the advantage of something like Nginx is that it works on any Linux box, so you're not locked into your third-party infrastructure vendor. But most front end frameworks are compatible with many "one step app deployment" vendors, as long as you're careful to avoid any proprietary features.
> The obvious answer is because it is easier.
No. The answer is that it’s more robust in the face of operator error, it’s repeatable and it’s auditable.
On the other hand, at least they aren’t hand-coded by Steve (who left the company last week)