planning
The Thing-deadline calculus
The best-laid plans
But bulldozers move mountains
Good design is redesign
Obsessed with absolute numbers
A warning against the limitations of my own prescriptions
The plan must anticipate all that is needed
Many a corner office
Individuals matter
Driving engineers to an arbitrary date is a value destroying mistake
The value-destroying effect of arbitrary date pressure on code
An Article by Gandalf HudlowThe mandate from above is clear, just get it done! Avoid everything that's in the way: all advice, all expertise, all discovery efforts that detract from hitting the Date™!
What these organizations don't realize is that all software change can be modeled as three components: Value, Filler and Chaos. Chaos destroys Value and Filler is just functionality that nobody wants. When date pressure is applied to software projects, the work needed to remove Chaos is subtly placed on the chopping block. Work like error handling, clear logging, chaos & load testing and other quality work is quietly deferred in favor of hitting the Date™.
Hofstadter's Law
An Idea by Douglas HofstadterIt always takes longer than you expect, even when you take into account Hofstadter's Law.
Planning doesn't make for better software
A Fragment by Robin RendleMy own time in a Silicon Valley startup has proved this much to be true; planning doesn’t make for better software. In fact today our design systems team doesn’t have sprints, we don’t have tickets or a daily standup. Each day we come to work, figure out what’s the most important thing that we could be doing, and then we—gasp!—actually do it.
Watching so many other teams slowly flail about whilst they plan for quarter 3.2 of subplan A, whilst our team produces more work in a week than they all do combined in a quarter has been shocking to me.
After four years of working in a large startup, I know what I always assumed was true: you don’t need a plan to make a beautiful thing. You really don’t. In fact, there’s a point where overplanning can be a signal of inexperience and fear and bullshit. The scrum board and the sprints and the inane meetings each and every day are not how you build another Super Mario 64.
Instead all you have to do is hire smart people, trust them to do their best work, and then get the hell out of their way.
Yagni
A Definition by Martin FowlerYagni originally is an acronym that stands for "You Aren't Gonna Need It". It is a mantra from Extreme Programming that's often used generally in agile software teams. It's a statement that some capability we presume our software needs in the future should not be built now because "you aren't gonna need it".
The Sense of Style
Classic style
The guiding metaphor of classic style is seeing the world. The writer can see something that the reader has not yet noticed, and he orients the reader’s gaze so that she can see it for herself. The purpose of writing is presentation, and its motive is disinterested truth. It succeeds when it aligns language with the truth, the proof of success being clarity and simplicity.
The truth can be known, and is not the same as the language that reveals it; prose is a window onto the world.
The assumption of equality
Classic writing, with its assumption of equality between writer and reader, makes the reader feel like a genius. Bad writing makes the reader feel like a dunce.
Nominalization
The English language provides bad writers with a dangerous weapon called nominalization: making something into a noun.
Instead of affirming an idea, you effect its affirmation; rather than postponing something, you implement a postponement.
"Comprehension checks were used as exclusion criteria” would be better said as “we excluded people who failed to understand the instructions.”
“There is not any anticipation there will be a cancellation” would be better as “I don’t anticipate that I will have to cancel.”
Zombie sounds, unlike the verbs whose bodies they snatched, can shamble around without subjects. That is what they have in common with the passive constructions that also bog down these examples.
The curse of knowledge
The better you know something, the less you remember about how hard it was to learn.
The curse of knowledge is the single best explanation I know of why good people write bad prose. It simply doesn’t occur to the writer that her readers don’t know what she knows - that they haven’t mastered the patois of her guild, can’t divine the missing steps that seem too obvious to mention, have no way to visualize a scene that to her is as clear as day. And so she doesn’t bother to explain the jargon, or spell out the logic, or supply the necessary detail.
Structural parallelism
If the new phrase has the same structure as the preceding one, its words can be slotted into the waiting tree, and the reader will absorb it effortlessly. The pattern is called structural parallelism, and it is one of the oldest tricks in the book for elegant (and often stirring) prose.
“He maketh me to lie down in green pastures; he leadeth me beside the still waters.”
You live only once
The logician would argue, You only live once should be rewritten as You live only once, with only next to the thing it qualifies, once.
The logician would be unbearably pedantic, but there is a grain of good taste in the pedantry. Writing is often clearer and more elegant when a writer pushes an only or a not next to the thing that it quantifies. In 1962 John F. Kennedy declared, “We choose to go to the moon not because it is easy but because it is hard.” That sounds a lot classier than “We don’t choose to go to the moon because it is easy but because it is hard."
Such tortuous syntax
How does a writer manage to turn out such tortuous syntax? It happens when he shovels phrase after phrase onto the page in the order which each one occurs to him.
The problem is that the order in which thoughts occur to the writer is different from the order in which they are easily discovered by a reader. It’s a syntactic version of the curse of knowledge. The writer can see the links among the concepts in his internal web of knowledge, and has forgotten that a reader needs to build an orderly tree to decipher them from his string of words.