Code as a Commodity: you get what you pay for
Code is cheap now. My attention isn't. So I started pricing every change like a vendor contract.
it is so cheap to ship software these days.
and some of it works even!
and honestly I think that’s awesome. the barrier of entry in tech has always been too high, and I can’t wait to see what new perspectives bring as more people get to bring their ideas to life.
It does have its drawbacks though…
I think we’re all a little guilty of shipping slop
But it’s become a balancing act between how much code I can produce vs how much code I can read, or need to read.
A lot of our engineering practices are built around humans reading, understanding, and maintaining code.
But how much do I need to read?
Does every change deserve the same amount of my attention?
Right now my attention is the bottleneck ;)
So what happens if we remove that part?
Code ships without being read.
ok.
What happens then?
What would it take for you to ship code no human had ever read?
That sentence sounds crazy, in multiple directions. On one hand absolutely not.
On the other, I use closed source applications every day and rely on them in everything I build. I’ve never read that code.
so how can we reconcile that dissonance?
Why do we trust some units of software but others we need to evaluate every line?
To me the crux of it is trust, reliability, and efficiency.
basically just don’t steal my data, work when I need you to, and go fast.
Let’s think about the contracts you sign for service providers.
How do you establish trust?
How much reliability are you paying for? How many 9’s?
What are the hardware specs?
want more 9’s? pay more. you get what you pay for.
I’ve been thinking about code in the same way and it’s vastly changed about how I manage my work, time, and attention.
code works like that now too. writing it is basically free. what costs money is knowing it works. you can pay up front with a better model, or after with tests, more passes, and the priciest one of all, me actually reading it.
Is this a minor UI feature, let’s say adding a button? I have a quality baseline that needs to be met, but beyond that, honestly I don’t care. Does it do what I need? Does it look and feel right? Is it performant enough? great. Ship it.
at the other extreme, software on a critical path needs much more extensive verification. that’s where you pay full price.
This is where engineering and designing a system comes into play, because at its essence, this is engineering. Understanding the system and its components and their criticalities. Knowing where to invest, when to save, when to build, when to buy
I think if we extrapolate that, it leads to where software is going. and maybe it’s a modular marketplace system. If I look at a component as a black box, or an interchangeable entity, then it gives me the explicit choice to spend where I need it, but more importantly, move faster and cheaper where I don’t.
I see a future where components are commoditized and interchangeable. you go to the software store and buy the components you need and a big enough board that they all fit on. spend where you want to, customize what you need, rip out a piece and upgrade down the road.
till then, LGTM
avery-jones.net/blog/code-as-a-commodity/