Only Debate The Non-Linear
thelog.farm> I would rather implement a self-service e-commerce platform for a company’s merchandising team, rather than make it easier for engineers to service a ticket to build a /products/hat/:id endpoint every 6 weeks.
Sounds like the author is trying to justify building new stuff without being responsible for any of it.
Whatever delusions they have about the "non-linear", the big ideas are almost certainly not going to come from an engineer who doesn't have a seat at the table with the people actually running the business.
If one did they would hear all kinds of stuff that would not only wreck their self-esteem, but not have any obvious technical solutions. Engineers are not smarter than anyone else. Imagine that.
It's not so much about finding the non-linear but about finding what actually matters to the business you work for first. It's almost never going to be more software.
> It's not so much about finding the non-linear
No matter who you are in a company, there is, with probability one, someone who has specific context on something that is non-linear... that you, from your context, think is just linear. (If you're in leadership, this is even more important to understand!)
And if you're arguing that something else is non-linear and thus more important, you're de facto arguing on whether the thing you want to deprioritize is linear.
As CTO at a relatively-early-stage startup, one of my most important jobs is to give both technical and non-technical colleagues the benefit of the doubt that they've spotted something that I didn't know was a critical non-linear opportunity, and juggle expectations so that the non-linear thing they discovered can be addressed before it becomes either a problem or a missed opportunity.
For instance, "customer X filed a ticket that they will need Y" can be easy to dismiss as a linear improvement-per-unit-work that's out of scope... but I need to keep my door open to hearing from our Customer X quarterback that Customer X is the nexus for an entire consortium of partners who all need Y and will adore us for it, in ways that might outrun the incremental improvements we'd already had planned. And, similarly, if an engineer discovers that Z is a non-linear drag of technical debt, that could be equally vital to our ability to move in an agile manner in the near future.
But I do hope each person allocates their advocacy-time (or prickliness-allocation, or communications bandwidth, depending on who you ask) towards the things they believe are the most non-linear, so we can make the right decisions as a team without getting bogged down in meetings and debates. And they know I'll try to do the same. So the mental model, "only debate the non-linear," is very useful up and down the stack.
> Engineers are not smarter than anyone else. Imagine that
This kind of anti-intellectualism is extremely harmful. In reality engineers generally are smarter than average and that’s a good thing if you like things like safe aviation.
Smarter in the thing they know about, sure. Most people have some area where they're above average. Software engineers just happen to have that area intersect with a marketable and, recently, socially valued skill.
>> "if you like things like safe aviation."
Safety is less about intelligence and more about diligence. Brilliant doctors still balk at checklists even though they save lives. Most engineering disasters happen because someone skipped a safety measure.
The useful checklist is itself a product of higher than average intelligence. It’s entirely possible to diligently follow a useless or even harmful process.
The useful checklist is a product of experience. Items come from death and disaster caused by not doing what the item says to do.
> If one did they would hear all kinds of stuff that would not only wreck their self-esteem, but not have any obvious technical solutions. Engineers are not smarter than anyone else. Imagine that.
From personal experience sitting with higher management I can assure you that they are one of the dumbest, most ignorant people I have ever met.
I know more about business and their products than they do. Their only qualifications are high self-confidence and social connections. I wouldn't trust them to do even simple manual labor.
I find that the kind of rhetoric espoused by the author is too eagerly neglectful of negative nonlinearities. An organization needs to survive before it can consider "optimizing for the first derivative".
Most engineers will tell you that the transition from a junior engineer to a senior engineer, or the truly transformational work in our careers, does not come from just crushing tickets non-stop for extended periods of time.
Of course it doesn't. And that's because "the transition" he refers to is an illusion at best, and a lie we tell ourselves at worst. It's all about politics and getting on your boss' good side. Toot your own horn and you'll move up the ladder of made up titles. Congratulations. It's not more complicated than that.
Most managers don't look at code, and even when they do, they can't distinguish good work from CRUD boilerplate. Most managers don't know what it is you do, only what you say it is you do.
And the reason why we're in this situation in the first place is because our management class is filled with people who just want things to work without issue so they can collect a paycheck off of someone else's labor and provide for their families.
Managers don't care about your work, and you are being tricked into caring about your work so that managers don't have to.
The situation that you describe is regrettable common in my experience, but by no means ubiquitous, and I'm optimistic actually reaching the end of its lifespan.
I've been out of big-name marquee tech for several years now, but as recently as late last decade it was in fact possible to achieve meaningful seniority as an engineering manager on the back of serious engagement with the subject matter. I at one time managed a team of roughly ~35 serious engineers and several managers in a critical path and was considered senior enough to be called an L7 because I read at least and usually commented on one or more diffs a day, and worked on and usually landed a diff or two a week.
I don't know where the meme started that managing technical work was orthogonal to understanding technical work, but CTOs like Carmack disagree (FWIW little old me does as well). In almost any other field from fabrication in a shop full of machines to a law firm, the top person is the most expert person, and I think it's a weird path-dependent aberration that software got off that proven paved path.
YMMV but this stuff is IMHO getting so complicated that I think managers will be trending more rather than less technical for the foreseeable future.
YMMV. The transition is real. Whether you can get rewarded for it is a different question. Sure, in some organizations it doesn't matter, but in others it matters.
There's is a continuum in how well you can perform as a software developer and this is a non-linear phenomena. That said the "title" is definitely often a made up thing.
It's not like politics don't come into play. Politics are always at play. But doing an obviously poor job with great politics won't work in most organizations and you can be a good engineer and still understand the politics and advance your abilities and advance in the organization.
4/5 managers from my career fit this description.
I've had 2 managers who were better than this, and they were prior programmers who still understood the code but had moved up.
The best managers are good coders who realize that by directing they can actually accomplish more across many areas than they could have as a individual contributed.
But 4/5 are disconnected paycheck collectors who need to be told stories
I wanna push back on this.
> Good coders who realize that by directing they can actually accomplish more across many areas.
This isn't a manager, this is a director. Great to have but not the person you want directly managing teams. The people you want directly managing teams are "servant managers", "shit umbrellas" or because it's silly there's even terms for these just "non-shitty managers." Managers should be people who enable the devs not because of their coding talent but because of their non-coding talent. They organize all your work into a nice little streams so you don't have to carry the mental load, advocate for the needs of your team by translating tech speak into product management speak, dealing with all the external requests to your team (i.e. saying no), handling on-call schedules, coordinating with the release managers and support, helps you with career development, the list goes on.
A good dev manager lets you turn off brain to all annoyances and distractions not related to your technical work.
You’re describing a good secretary.
No, that is a very good description of a competent team lead.
To me it seems like the author is saying “An important decision is a nonlinear one, where a nonlinear decision is one that might have a big impacts.”
So this whole post boils down to something like: “only debate decisions that might have big impacts.” I don’t really see what’s interesting about that idea.
Tech writing could do with less "this is technical" signaling and more actual precision. Use ordinary words to express ordinary concepts ("big impact") and technical words for technical concepts ("nonlinear", "exponential"). Don't use technical words to fluff up ordinary ideas.
Sadly, it seems that people absolutely love doing this.
The author stops at an intuitive leap before developing the idea into something easily put into practice.
Actually doing what the author describes is often impossible except in an intuitive way. How could you know a priori which decisions might have big impacts? On a project of any complexity you need either deep specific experience or a very accurate working model of the entire project. You aren’t likely to have either.
This has been previously covered in depth, even in software, although of course it could possibly be improved.
Painting the bikeshed is one example: http://phk.freebsd.dk/sagas/bikeshed/
It’s not only uninteresting- it’s wrong. Linear costs of bad decisions can kill a business in so many ways.
> So this whole post boils down to something like: “only debate decisions that might have big impacts.” I don’t really see what’s interesting about that idea.
And yet, many people might agree with it but still debate trivial matters
Yes, but when you say "trivial", I think you actually mean "pedantic". This is an important distinction because...
Click to read more (28 min read)
Love this article, hope it becomes a foundational piece in some tech org cultures, that reward engineers to focus on "better than linear improvements", vs. pedantic debates I've seen teams that strive for improvement grow so used to for the cheap feeling of improvement they provide.
nit: (so I don't lose the habit) that flashing gif in the middle causes a more than linear nuisance while I'm trying to read the article, otherwise LGTM!
There's some project management guru who wrote a book on managing projects that helped keep people micromanaging them.
Years later I read that he really regretted it because he realized that project shouldn't be even started unless they're too important to be micromanaged...
It is, don't start linear return projects...
> “optimizing for the first derivative” played well with this approach
That's... still linear? If the concept of non-linearity is supposed to add anything to this article, arguably this should be at least the second derivative!
Unfortunately as it is used in science and maths/engineering, non-linear popularly has two meanings: one is that it is continuous (the one you seem to be using), and one is that it is proportional: i.e. the derivative is fixed (which is what the author is using).
Only if the first derivative is constant. ;)
I spent the weekend trying to decide if I should bother trying to change a technical decision recently made at work, and this piece was useful because it gave me a new categorization to think through. The phrase from the article that jumped out at me was "eliminate whole swaths of work".
I'm coming in to the project at a point where a couple of dev-months have already gone into learning and spinning up [the unsupported infrastructure we will have to maintain that has nothing to do with our actual app], and I'm confident nobody wants to scrap it all - but that sunk cost is nothing compared to maintaining everything for the next x years. There are zero functional challenges or business costs from using [the existing supported infrastructure from another department], and it would immediately eliminate the six highest items on the project list of risks. And it's not that they thought about this and decided not to: as far as I can tell from specs, design docs, etc., it has simply not occurred to anyone on the project.
My key takeaways:
>"Only debate the non-linear. If there is a strong case to be made that a proposal will create some non-linear [positive] impact, then it is worth debating at some length. [...] As a concrete example, I would rather implement a self-service e-commerce platform for a company’s merchandising team, rather than make it easier for engineers to service a ticket to build a /products/hat/:id endpoint every 6 weeks."
Reminds me of the Joel Spolsky story about one of his employees, Noah Weiss:
"Thanks or No Thanks - A young employee came up with an idea that added a million dollars to our bottom line." (Inc. Magazine, Jan 2009)
https://www.inc.com/magazine/20090101/how-hard-could-it-be-t...
Apparently Noah debated creating a job board with Joel (Joel was originally against it) -- until he eventually got his way... and added a million dollars to Joel's company's bottom line...
Related: "Pick your battles"
I usually don't like this kind of article with too abstract or general advice. But this one's nice: the good old "choose your battles wisely" + useful heuristic.
I'm generally fine with this principle so long as I get to pick all the linting rules.
"Anybody who cares about linting rules shouldn't be picking the linting rules." - Vector's Razor
In my ideal world, `lint --fix` on file save, every time.
In my experience linter suggested fixes are good enough for suggestion, and it's probably worth setting up a key binding for accepting them in your IDE, but should absolutely never be applied blindly and automatically.
This quality possibly varies from linter to linter, YMMV.
That fits audiophile discussions to a tee. :)
TL;DR; summary from ChatGPT:
The author reflects on their struggle to discern whether a debate is worth having in a work context, leading them to identify the need to find an equilibrium level of conflict, which can increase efficiency and morale of a team. They argue that this level is rooted internally in an individual's confidence level and emphasise the importance of periodic debates, which can outweigh occasional critical discussions. To find this equilibrium, the author advises a personal principle to only debate the non-linear, i.e., issues that can have a non-linear impact on the organisation, as opposed to those that add incremental value.