<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nando Florestan's blog (Posts about agile)</title><link>https://read.nando.audio/</link><description></description><atom:link href="https://read.nando.audio/categories/agile.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:nandoflorestan+read@gmail.com"&gt;Nando Florestan&lt;/a&gt; </copyright><lastBuildDate>Sat, 07 Mar 2026 00:41:39 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>The new employee</title><link>https://read.nando.audio/posts/new-employee.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;"Yeah, it was a very nice vacation", said Long Johnson, the Asian-American manager.
"How have things been here? Everything going well?"&lt;/p&gt;
&lt;p&gt;"We need to talk about Agapito Hackerman", replied Pascal Devoto, the lead developer.&lt;/p&gt;
&lt;p&gt;"What about him?", asked Long.&lt;/p&gt;
&lt;p&gt;Agapito Hackerman had been hired 2 months ago.
On that day, everyone in the team had marveled at his typing speed.
He'd brought his own mechanical keyboard and he had a pair of mysterious electrical gloves.
With that equipment and his training, he was able to type at Guinness World Record speeds.&lt;/p&gt;
&lt;p&gt;"He types fast. That's all the good things we can say about his work".&lt;/p&gt;
&lt;p&gt;"We?"&lt;/p&gt;
&lt;p&gt;"The entire development team has discussed this.
We are all behind what I am about to tell you."&lt;/p&gt;
&lt;p&gt;"Okay, I'm listening."&lt;/p&gt;
&lt;p&gt;Pascal looked to the side – he did not want to do this.
Inadvertently, he saw a poster on the meeting room wall. White on blue.
"You are more than", followed by a bunch of scattered options: "a coder / a designer / an analyst"...&lt;/p&gt;
&lt;p&gt;"Look, to start with, the quality of his code is extremely mid".&lt;/p&gt;
&lt;p&gt;"Mid?"&lt;/p&gt;
&lt;p&gt;"Just meh code."&lt;/p&gt;
&lt;p&gt;"Okay. You mean ravioli?"&lt;/p&gt;
&lt;p&gt;"Um, no, not spaghetti code, no.
It's a different problem.
It's like his code is always... default.
He knows about code architecture, but he constantly assumes we have needs we don't have, and ignores the needs we actually have.
So the architecture in his code is never the right one.
And he can only do easy tasks.
I have tried giving him harder problems a couple times, but... I don't know... it's as if he could only solve problems that he has seen solved before."&lt;/p&gt;
&lt;p&gt;Pascal took a breath and continued:&lt;/p&gt;
&lt;p&gt;"His code is so meh that I wonder where he learned programming."&lt;/p&gt;
&lt;p&gt;"Wait, I still have his CV here." Johnson opened his drawer and found it.
While he read, he took a sip of his smoothie, labeled &lt;em&gt;Cacao-Empathy&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;"Hackerman went to the Microsoft Academy."&lt;/p&gt;
&lt;p&gt;"Figures", said Pascal.
"And Microsoft pushed you to hire him."&lt;/p&gt;
&lt;p&gt;"Well, yeah.
I listen to them.
They are huge."&lt;/p&gt;
&lt;p&gt;"But you know I have been trying to build a team that writes code of great quality.
You know how important this is for the future of the product."&lt;/p&gt;
&lt;p&gt;"Yes, but you have hired mid programmers before."&lt;/p&gt;
&lt;p&gt;"True. By giving them time and a learning environment, they have improved and progressed from junior to senior levels.
But you remember Andrzej.
He just wasn't interested in software architecture, and ultimately I couldn't keep him on the team.
That's much, much worse with Agapito."&lt;/p&gt;
&lt;p&gt;"How come?"&lt;/p&gt;
&lt;p&gt;"He does not seem either able or open to receive lessons."&lt;/p&gt;
&lt;p&gt;"I find that hard to believe.
You remember how much he was recommended to us."&lt;/p&gt;
&lt;p&gt;"Look, Long.
Even with his problems, the potential seemed high at first.
But we have tried teaching him things.
On the next day he appears to have forgotten everything he was taught.
At first we wondered if he was a jerk.
Now we assume he has some kind of condition.
He forgets all kinds of information, too.
Even what it is that the product does.
All facts seem to be gone in the next conversation.
This company should insist he go to a head doctor, and pay for it."&lt;/p&gt;
&lt;p&gt;"Really?"&lt;/p&gt;
&lt;p&gt;"And his interactions with the rest of the team are very limited.
He doesn't even know anyone's name.
Including yours."&lt;/p&gt;
&lt;p&gt;"Are you sure you guys don't just envy his speed?
I mean, I like how productive he is."&lt;/p&gt;
&lt;p&gt;Pascal sighed.&lt;/p&gt;
&lt;p&gt;"Long, you are not listening to me!
He types quickly, but the rest of the team must correct everything he does.
And if we don't, we'll have awful code, and what's worse, oceans of it."&lt;/p&gt;
&lt;p&gt;"I don't know about code quality, I cannot evaluate that...
But I see the stats. His productivity is way higher than everyone else's."&lt;/p&gt;
&lt;p&gt;"No, it is not. Writing the wrong code isn't productivity.
You know, he suddenly uses libraries we don't use here.
I have often had to remind him we use Flutter, not React.
No matter how much I teach him about dependency management, he seems to just use any library out there.
But it gets worse!"&lt;/p&gt;
&lt;p&gt;Pascal was gesticulating:&lt;/p&gt;
&lt;p&gt;"You'd think he knows hundreds of libraries, but he doesn't know any one of them well.
He doesn't know their API – but instead of looking up the documentation, he types the code immediately, as if he remembered every detail!
Long, he writes against a fictitious API!!!
He thinks he remembers, but what he remembers is a hallucination!
Then he commits the code and creates a pull request.
The PR is immediately failing because Agapito doesn't even run the automated tests."&lt;/p&gt;
&lt;p&gt;Pascal gasped:&lt;/p&gt;
&lt;p&gt;"It gets even worse. I don't think he compiles his own code, even.
We have found syntax errors in his PRs."&lt;/p&gt;
&lt;p&gt;"Okay, so you tell him to fix the problem, right?"&lt;/p&gt;
&lt;p&gt;"Of course. You know what he does?"&lt;/p&gt;
&lt;p&gt;"What?"&lt;/p&gt;
&lt;p&gt;Pascal got up and started walking back and forth.&lt;/p&gt;
&lt;p&gt;"He doesn't read his own code!
He types the entire thing again, from scratch.
Instead of a little correction, we get a new program!
The diff is unreadable, nobody can make sense of the changes!
All previously done analysis is wasted.
He might have solved one problem and created three more.
And the problems could be security vulnerabilities!"&lt;/p&gt;
&lt;p&gt;"Maybe that's a price of typing as fast as he does?"&lt;/p&gt;
&lt;p&gt;"I don't know.
But it's insane.
It has affected my work.
I am behind in everything I do.
I don't even write code myself anymore, I have to baby-sit Agapito all the time!"&lt;/p&gt;
&lt;p&gt;Pascal stopped in the middle of the meeting room and continued:&lt;/p&gt;
&lt;p&gt;"Long, it's fair to say the guy is an impostor.
The entire team is talking ill behind his back.
We've never had this kind of problem before."&lt;/p&gt;
&lt;p&gt;"Okay, but maybe that's not such a bad thing.
If you can remind him of everything he needs to do, he will type everything out for you real fast, if I understand you correctly.
Why don't you start a checklist of the things you typically need to tell him?"&lt;/p&gt;
&lt;p&gt;"That's an insane way to work. But I am glad you thought of that. Here is the checklist.
Gradually built over two months."&lt;/p&gt;
&lt;p&gt;Pascal took 40-plus pages out of the printer and placed them on Johnson's desk.
He wanted to throw them, but he placed them.&lt;/p&gt;
&lt;p&gt;Johnson took a cursory look at the long document.
All kinds of information about the company, the product, the kinds of users, their roles, the current code, the future the team aimed at.&lt;/p&gt;
&lt;p&gt;"Every time I give Agapito a new assignment, I tell him to read that first.
But he always manages to forget something important from it."&lt;/p&gt;
&lt;p&gt;"But this is good work, Pascal.
Looks like a great summary of everything about this company.
This text could be used as a basis for so many things.
I may start sending this to whoever doesn't yet understand what we do."&lt;/p&gt;
&lt;p&gt;"Okay, Long.
But it's not normal for a team member to be so... absent.
You know Agapito refuses to attend team meetings?
And he doesn't do anything during the meetings, either.
He just sits there, waiting.
He only works in short bursts, when asked to work.
I have never worked with anyone so strange in my entire life.
The team has given up any hope of Agapito ever learning anything from us, about ourselves, about the company, about our customers, about the work itself..."&lt;/p&gt;
&lt;p&gt;Johnson glanced at the glass-walled office where Hackerman was sitting in front of his desk.
Like a statue.&lt;/p&gt;
&lt;p&gt;"Okay, but still, can the team adapt to working with Hackerman?"&lt;/p&gt;
&lt;p&gt;Pascal touched his forehead with all his fingertips.&lt;/p&gt;
&lt;p&gt;"That is the wrong question to ask, Long!
We are talking about a dev that is unable to adapt to us in the slightest!
We were doing fine before, but now the entire team is dedicated to finding his mistakes and fixing them!"&lt;/p&gt;
&lt;p&gt;Pascal's expression was a painful grimace.
"Jesus H. Christ, Long, we all know how to type!"&lt;/p&gt;
&lt;p&gt;Johnson seemed a little shocked that Pascal was almost yelling.&lt;/p&gt;
&lt;p&gt;"Agapito never has any questions!
He never asks for clarifications.
He never asks the opinion of any team member.
He either understands the briefing and the briefing is... inhumanly complete, or chaos ensues."&lt;/p&gt;
&lt;p&gt;Johnson was trying to interrupt and now he got this in:&lt;/p&gt;
&lt;p&gt;"Wait, Pascal, have you talked to him?"&lt;/p&gt;
&lt;p&gt;"Of course I have, Johnson!
You know what happened?
He politely agreed with the criticism and promised to do better.
And then nothing changed."&lt;/p&gt;
&lt;p&gt;Pascal resumed walking.&lt;/p&gt;
&lt;p&gt;"Since our team is not programming anymore, all our skills will vanish in a couple years!
Programming is a craft, if you don't practice it you lose it!
Now the only one doing any programming is someone who never learns anything!"&lt;/p&gt;
&lt;p&gt;Johnson crossed his arms.
Pascal caught his breath.&lt;/p&gt;
&lt;p&gt;"This is a developer that absolutely refuses any and all long-term responsibility and only produces brittle code.
Like a baby, he must be continuously supervised.
It's exhausting!
We loved our work before..."&lt;/p&gt;
&lt;p&gt;Johnson was getting impatient.
Pascal doubled down.&lt;/p&gt;
&lt;p&gt;"What we wanted was to hire an expert coder.
We knew the job market lacks qualified workers.
Instead of doing what we needed to do – hire a team member – we hired a typist.
His work is nonsense and he has to go.
If you say he stays, that will kill motivation for the rest of the team.
And kill their skill, since nobody is practicing their craft.
Meanwhile, the typist is unable to learn anything!"&lt;/p&gt;
&lt;p&gt;Long Johnson seemed to enlarge in his chair.
His head was turning red.&lt;/p&gt;
&lt;p&gt;"Okay, Pascal, listen.
Everything you are saying is very hard to measure.
Only his typing speed is easy to measure."&lt;/p&gt;
&lt;p&gt;"Long, the job is not typing.
The job is to communicate to understand the market, the company, the users, the product; to learn a language, some libraries, how to write good code; then write it, read it, maintain it, document it and then communicate some more.
Typing is not even one percent of the work."&lt;/p&gt;
&lt;p&gt;"I know, Pascal.
What I don't understand is why an expert would forget what they already know."&lt;/p&gt;
&lt;p&gt;"Johnson, I know exactly how to explain this to you.
This is something strange about the profession.
You see, if a lawyer or a doctor has practiced their profession for 40 years, then they are 40 years better than when they started.
But that's not true of developers.
10-year-old technology is obsolete technology.
Nobody cares if you know AngularJS 1 – it was abandoned 10 years ago.
The value of a developer is only in what she's been doing the last 10 years."&lt;/p&gt;
&lt;p&gt;Johnson sighed – Pascal was preaching again.&lt;/p&gt;
&lt;p&gt;"A programmer must be learning new things daily.
Learning is part of the profession.
But here's the thing about learning:
Humans learn by making!
Constructivism.
Jean Piaget.
Reading a book on a technology is not enough to learn it.
One must build with it; only then does one learn.
Without the practice, the theory does not sink in.
This is how this wonderful team, full of experts, will become a bunch of ignorants if they don't keep writing code."&lt;/p&gt;
&lt;p&gt;"Isn't there some other solution to this problem?"&lt;/p&gt;
&lt;p&gt;Pascal laughed. "Yeah, we could practice in our copious free time."&lt;/p&gt;
&lt;p&gt;Johnson shook his head.
"No need for the sarcasm.
You are getting emotional.
This is a serious question.
Can you work in a different way to embrace Hackerman's higher productivity?"&lt;/p&gt;
&lt;p&gt;"Higher?
You mean negative.
I will be the first to quit my job.
I love programming, that is why I am a programmer.
I enjoy the creative activity of writing good code, using skills acquired over decades of study.
Reviewing someone else's bad code is boring and painful.
And it is not programming."&lt;/p&gt;
&lt;p&gt;"So you aren't interested in focusing on high-value alignment tasks and thought stewardship?
Well, so be it.
I find Hackerman productive because he delivered a few demos in no time.
I was very impressed."&lt;/p&gt;
&lt;p&gt;"But making a tiny demo is very different from maintaining a large codebase!
Look, Long!
We were building an awesome team.
The guys were improving and learning together.
But Agapito is harmful to the team – he sets an awful example.
A passive typist who never tries to interact with anyone else.
Can you imagine how limited his world experience must be?
Yet he apparently gets your approval."&lt;/p&gt;
&lt;p&gt;"It's true, and I need to let you know why it is so."&lt;/p&gt;
&lt;p&gt;Pascal was paralyzed to hear that.
He turned his face a little, as if to point his good ear towards Johnson.
Or maybe protect the other ear.&lt;/p&gt;
&lt;p&gt;"Brace yourself, you are not going to like my decision."&lt;/p&gt;
&lt;p&gt;Pascal started biting his tongue.&lt;/p&gt;
&lt;p&gt;"Hackerman's salary is one tenth of any other team member's.
I am telling HR to scout Microsoft Academy. Look for others like him.
I think we can drive the cost of development down by pairing each expert with a good typist – like a co-pilot.
The experts can focus on vision harmonization.
When I present the idea, the slide will be titled 'Post-human efficiency'!"&lt;/p&gt;
&lt;p&gt;Pascal blinked a few times.&lt;/p&gt;
&lt;p&gt;"Long, I just told you one Agapito already tasks the entire team with his mistakes.
And you want to hire more Agapitos?"&lt;/p&gt;
&lt;p&gt;"Yep!"&lt;/p&gt;
&lt;p&gt;"I just explained how and why that ain't gonna work.
Have you forgotten everything you learned in the Agile course?
...And everything I just told you?"&lt;/p&gt;
&lt;p&gt;"No, I haven't.
But even if I understand you partially, you know who doesn't?
Our CEO.
He likes numbers, graphs and objective things.
My strategy takes all of two seconds to explain.
But Agile and your arguments are hard to explain.
When I talk to him, I don't get the feeling I have time or permission to teach him anything."&lt;/p&gt;
&lt;p&gt;"Honestly, Long, that's just dumb.
You are forgetting a manager has a duty to protect his team.
And you know who will suffer the consequences?
The team, the product, the customers, and the company, in that order."&lt;/p&gt;
&lt;p&gt;"Well, such is the world, Pascal."&lt;/p&gt;
&lt;p&gt;Pascal Devoto still searched for words, then suddenly stormed out of the room.
The entire office heard three loud door impacts.
In the corridor he rushed past a Microsoft banner. It said:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Faster. Smarter. Limitless. Let the AI build your future.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;An alliance with Microsoft was announced two weeks later. Stock went up 3%.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>fiction</category><category>literature</category><category>programming</category><category>story</category><guid>https://read.nando.audio/posts/new-employee.html</guid><pubDate>Thu, 29 May 2025 08:00:00 GMT</pubDate></item><item><title>On the use of harmful tools</title><link>https://read.nando.audio/posts/harmful-tools.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;…So you are to manage some software creation. Then you must understand you cannot simply employ the same techniques used to manage other domains. Software creation is strange – many counterintuitive truths about it. You will fail unless you learn about these weird realities.&lt;/p&gt;
&lt;p&gt;This series contains these posts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;How to hire a development team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/counterintuitive.html"&gt;Counterintuitive facts of software development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/no-estimates.html"&gt;No estimates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/harmful-tools.html"&gt;On the use of harmful tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;Big Tech is incentivized to oversell AI’s capabilities.
They're marketing it as "productivity" while gutting skilled labor and consolidating power.
It's a profit-maximizing maneuver masquerading as innovation.&lt;/p&gt;
&lt;p&gt;AI-generated code is not magic.
It's pattern-matching, not reasoning.
It lacks context-awareness, long-term responsibility, and often produces brittle or misleading output.&lt;/p&gt;
&lt;p&gt;Today, Big Tech companies are peddling AI tools before these are ready for prime time.
For now, AIs are hallucination machines that cannot be trusted with making decisions without supervision, yet this is exactly how we are already using them.&lt;/p&gt;
&lt;p&gt;Big Tech makes insanely exaggerated claims, such as a 3x productivity gain just by using an AI tool.
Seduced by these, managers are accepting losses in all the aspects involved in maintaining a codebase, and then hyping their own fictitious feats with AI.&lt;/p&gt;
&lt;p&gt;But real software development is a craft.
It requires learning, culture, understanding, reasoning, practice, intuition, refactoring, communication...
Some of these the AI can do badly; some it cannot do at all. Not yet.&lt;/p&gt;
&lt;p&gt;Businesses try real hard not to see that software development is an art.
If they see it, they pretend they forget it.
However, art has its own requirements, and one forgets these at one's own peril.&lt;/p&gt;
&lt;p&gt;Inserting AI as the code writer yields no real increase in productivity – and worse, it requires fundamental changes in the software development process. I will show that some of these changes are, in fact, impossible for humans, though not all humans can see it.&lt;/p&gt;
&lt;p&gt;The industry is buying the hype way too early.
Developers, managers, even companies are swallowing the narrative before the technology has earned it.&lt;/p&gt;
&lt;p&gt;So my thesis is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pushing programmers and writers to use smart tools such as AI is harmful and infringes Agile principles.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Though it might seem to be what everyone is doing, it's the opposite of what you should be doing.&lt;/p&gt;
&lt;p&gt;After I wrote this post, I found:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://newsletter.theseriouscto.com/p/ai-coding-assistants"&gt;an independent evaluation with very similar findings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=W4tqbEmplug"&gt;a Simon Sinek interview&lt;/a&gt; in which
he says today we are obsessed with output and losing track of humanity in AI adoption.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;A word about intelligence&lt;/h3&gt;
&lt;p&gt;What is intelligence?&lt;/p&gt;
&lt;p&gt;Intelligence is &lt;strong&gt;establishing true relationships&lt;/strong&gt; between things previously considered separate and unrelated.
Intelligent people show you how things relate between themselves.
A void gets replaced by a model.&lt;/p&gt;
&lt;p&gt;Contemporary normoses are always due to a lack of respect for the necessary relationships between systems.
An obvious example is the lack of relationships between the economy and the environment, even though doing what the environment "demands" of us would be beneficial to all people and all generations.&lt;/p&gt;
&lt;p&gt;Why am I talking about intelligence?
Well, for the following argument, I need an intelligent reader – one that doesn't have difficulty evaluating new or infrequently made relationships.&lt;/p&gt;
&lt;p&gt;I also need a patient reader.
I know this post is too long. But fuck you, reader. Read it in 2 sittings or something.
To establish relationships between things I need the space.&lt;/p&gt;
&lt;h3&gt;The argument&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;If you don't let your students use AI, why do you let your workers use AI?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In education, AI usage is avoided for 2 simmetrical reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Middle school and high school students must not use AI because they must learn to write by practicing writing.&lt;/li&gt;
&lt;li&gt;College-level students must not use AI because the output is not college-level.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The same reasons apply to your employees:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Junior devs are still learning to write software, so they must practice the damn craft of writing damn software – not have someone else do it for them.&lt;/li&gt;
&lt;li&gt;Senior devs write software much better than the AI, so there isn't much gain for them.&lt;ul&gt;
&lt;li&gt;But also, writing software is a craft, exactly like writing prose is a craft.
    A craft must be exercised, or you lose it.
    So a senior dev must continue to write software – or her knowledge, skill and stamina will atrophy.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Now in more detail&lt;/h3&gt;
&lt;p&gt;The plagiarism problem always existed, it is not new.
And there was never a different solution.
Plagiarism is not tolerated, ever.&lt;/p&gt;
&lt;p&gt;You know a student must learn to write her own dissertation, because that is an essential life skill.
You forbid AI for the student – when writing her English assignment – so they will actually practice the skill.
If that is the case – why are you doing the exact opposite when it comes to people who work for you?&lt;/p&gt;
&lt;p&gt;Every professional writer in the world tells us writing is a muscle that must be exercised everyday.
They force themselves to practice their craft every morning and they know they get worse when they don't.&lt;/p&gt;
&lt;p&gt;If a high school student must practice her writing, why do you think your worker doesn't need to do the same?&lt;/p&gt;
&lt;p&gt;Am I talking about writers or coders? Yes.&lt;/p&gt;
&lt;p&gt;This applies to the writing of prose and computer programs, both.
There is no difference.
A programmer also knows they are worse after a vacation.
It takes a few days of work to get back to speed.&lt;/p&gt;
&lt;p&gt;Agile is about developing the people more than the process.
Improving the process is worthy; but we understand developing the workers has even more value.&lt;/p&gt;
&lt;p&gt;Agile recognized that building a great team is the single most important thing the business needs to do.
Notice I didn't say hiring a great team, I said building it.&lt;/p&gt;
&lt;p&gt;If you are not making an effort to provide the necessary environment and motivate the team to improve, then your organization is not truly Agile.&lt;/p&gt;
&lt;p&gt;Therefore, using certain tools by default is against Agile, inasmuch as these tools hurt team building.&lt;/p&gt;
&lt;p&gt;Now I will give examples and establish further relations with other matters.&lt;/p&gt;
&lt;h3&gt;Example 1&lt;/h3&gt;
&lt;p&gt;To hire a writer, I want to measure her grammar skills.
So I ask her to correct the grammar in some text I've written.
But she uses AI to do the correction.
Now I cannot evaluate her knowledge, it is mixed with the AI's knowledge.
Here the AI's knowledge is noise, because it is essentially free for me – I don't need to hire the writer to get AI-level results.&lt;/p&gt;
&lt;p&gt;You certainly see the only way to evaluate the writer is to forbid usage of AI.&lt;/p&gt;
&lt;p&gt;But then, after she is hired, why would I push her to use AI, if that means exercising her muscles less, and therefore getting worse? Do I want my worker to atrophy???&lt;/p&gt;
&lt;p&gt;The HR department, as a system, typically complains that the job market lacks qualified workers and develops means to find and hire them.
But after the expert is finally hired, her manager now expects her to be reviewing AI slop, instead of using her expert skills to write?&lt;/p&gt;
&lt;p&gt;Can't anyone see this will result in her losing her expertise over 2 years?
Or is she now supposed to study and practice her craft in her copious free time?&lt;/p&gt;
&lt;p&gt;The artisan exists before the artist.
Without an artisan you don't get an artist.
You can't have a craftsman that doesn't practice her craft.&lt;/p&gt;
&lt;p&gt;The HR department cannot find qualified workers, but hired workers must become progressively less qualified. Wonderful.&lt;/p&gt;
&lt;p&gt;How can companies act in such a schizophrenic way?
Because businesses lack intelligence, which is the ability to establish relationships between systems that appear to be separate.&lt;/p&gt;
&lt;h3&gt;Planning the obsolescence of writing itself&lt;/h3&gt;
&lt;p&gt;But even worse, businesses have been firing writers, since they figure writing is now a job for an AI.
Can they really not see the ways in which AI slop lacks creativity and personality?
Can they not feel the sterile sameness in everything the AI writes?&lt;/p&gt;
&lt;p&gt;But it's even worse: Nadella is peddling a product that liberates illiterate executives from the task of reading.
The AI does all the reading for him, and "summarizes".
This person believes in building a world in which I carefully write an email and he doesn't even read it!&lt;/p&gt;
&lt;p&gt;What a dystopic world, in which human communication will be mediated not just by distance and screens, but also by a summarizing idiot who misunderstands every other sentence!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Nadella peddling AI usage for managers" src="https://read.nando.audio/images/2025-nadella-ai.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Nadella might discover he is a replicant himself...&lt;/p&gt;
&lt;p&gt;And you thought &lt;em&gt;I&lt;/em&gt; was extreme when I wrote "fuck you, reader", didn't you?
Well, what about Nadella's "fuck all writers"?&lt;/p&gt;
&lt;p&gt;"Never read anything if you value your time!" –
That's his advice, and if you follow it, you are one fucked up reader!&lt;/p&gt;
&lt;p&gt;If we remember that, in the Gold Rush, the ones who got really rich were those selling tools, Nadella is doing right by his company.
But he is also doing wrong by humanity.
That's the threat of a new normose, which as we saw before, is lack of intelligence.&lt;/p&gt;
&lt;h3&gt;This is not prejudice&lt;/h3&gt;
&lt;p&gt;I have no prejudice or hate against the tools themselves.
For instance, look at a sane example:&lt;/p&gt;
&lt;p&gt;Even after the computer finally beat man at chess, man continued to play chess.
Man did not stop memorizing hundreds of openings, did not stop practicing the endgame, and did not stop playing chess, since it is a wonderful sport for the mind.&lt;/p&gt;
&lt;p&gt;The computer changed the game forever, yes.
Man now tries to learn from the computer, too.
But giving up the skill and letting the computer have the chess game for itself, that's what we are incapable of doing.
In fact, chess is now more popular than ever.&lt;/p&gt;
&lt;p&gt;It's not about winning, anyway.
It's about the Olympic spirit.&lt;/p&gt;
&lt;p&gt;Get better than you are now – for you are a man.&lt;/p&gt;
&lt;p&gt;AI currently sucks hard at creative endeavors.
It is okay at reformulating existing language, improving the vocabulary used, and maintaining coherence (as long is it understands the content).
But it's awful at creating literature, stories, jokes, poetry, music, art etc.
But suppose AI does become good – would man give up the arts?&lt;/p&gt;
&lt;p&gt;Of course not.
Not in a million years.&lt;/p&gt;
&lt;p&gt;Be a man. Get awesome.&lt;/p&gt;
&lt;h3&gt;Example 2 (mild)&lt;/h3&gt;
&lt;p&gt;Woody Zuill tells a story.
A couple programmers on the team were delivering code in which the architecture left something to be desired.
Instead of having the code corrected, he tolerated it while giving the team ample time and incentive to study these matters.
In just a couple of weeks, the devs had acquired the skills and were themselves correcting those mistakes.
No feelings were hurt, the team was enthusiastic (due to learning), and Man did what (s)he is supposed to do: learn and improve.&lt;/p&gt;
&lt;p&gt;Zuill temporarily sacrificed product quality in order to develop a happier and more capable team.
That was the wise choice.
Is this what most IT companies are currently doing???&lt;/p&gt;
&lt;p&gt;Or are they saying you shall be happy vibe-coding?
Are you going to be happier in your relationship to a human team, or by becoming a cyborg?&lt;/p&gt;
&lt;h3&gt;Example 3 (the kicker)&lt;/h3&gt;
&lt;p&gt;I will leave you with &lt;a href="https://youtu.be/nY6RExFP0G0?si=Dttbl7PX9AoHW37E&amp;amp;t=819"&gt;this example by Dave Farley&lt;/a&gt;, which I invite you to watch in his own words.
But I will paraphrase his tale here if you prefer to read:&lt;/p&gt;
&lt;p&gt;Dave gets hired a second time by the same company to &lt;em&gt;rescue&lt;/em&gt; a problematic software project.
Dave realizes a certain dev doesn't know how to code – the guy even avoids &lt;em&gt;for&lt;/em&gt; loops in Java because he doesn't know how &lt;em&gt;for&lt;/em&gt; loops work.
The dev is an impostor.
Dave tells the company, this guy shouldn't be working here, he is not good enough.
The company answers, what do you mean, his code review skills are legendary in the company.
In the end, it is discovered that the guy simply used an IBM tool for code reviews, and understood none of it.&lt;/p&gt;
&lt;p&gt;Now imagine how much financial loss that employee was responsible for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;His own salary for years.&lt;/li&gt;
&lt;li&gt;The damage he caused to the codebase every day, putting the project at risk.&lt;/li&gt;
&lt;li&gt;The rates of the experts eventually hired to rescue the project.&lt;/li&gt;
&lt;li&gt;The administrative decision making, required to hire the experts.&lt;/li&gt;
&lt;li&gt;The license paid to IBM for a tool that is actually harmful to the team.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(The last bullet is mine, not Dave's.)&lt;/p&gt;
&lt;h3&gt;Exercise for the reader&lt;/h3&gt;
&lt;p&gt;Obviously, constantly using AI can be even more harmful than the code review tool; but I want you to think about something else:&lt;/p&gt;
&lt;p&gt;From the story above, what can you conclude about the practice of code reviews?
If a complete amateur can hold a job by using a tool to do code reviews, doesn't that say something about code review as a practice?&lt;/p&gt;
&lt;p&gt;Why don't you think about it first?
Next I'll tell you what I think.&lt;/p&gt;
&lt;h3&gt;The hysteria about AI&lt;/h3&gt;
&lt;p&gt;The most current and modern tremendous mistake being committed in the IT industry is, of course, the premature acceptance of code written by AI, disregarding every aspect of it just because it gets done fast.&lt;/p&gt;
&lt;p&gt;The AI companies affirm the AI is equivalent to a junior developer; the managers have no experience of the actual work of producing software, so they believe that hype and stop hiring juniors.&lt;/p&gt;
&lt;p&gt;Then juniors do not, over time, learn and become seniors and soon the industry will be devoid of qualified workers.&lt;/p&gt;
&lt;p&gt;AI cannot yet replace humans because its experience of the world is too limited.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It cannot be aware of the whole project in one prompt/interaction.&lt;/li&gt;
&lt;li&gt;It cannot compile the code it writes.&lt;/li&gt;
&lt;li&gt;It cannot execute the automated tests.&lt;/li&gt;
&lt;li&gt;It cannot ask for clarifications.&lt;/li&gt;
&lt;li&gt;It cannot ask for the opinions of team members.&lt;/li&gt;
&lt;li&gt;It has no concept of the history of the project.&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So it's easy to see that comparing a simple tool to a human is nonsensical.
Saying an AI is equivalent to a junior dev is to see the junior dev only within the task of writing some code, as if that could be done without all these other tasks.&lt;/p&gt;
&lt;p&gt;The truth is, code written by AI is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;as mediocre as the code it was trained on,&lt;/li&gt;
&lt;li&gt;full of hallucinations,&lt;/li&gt;
&lt;li&gt;not yet compiled, not yet tested, not discussed, not aligned with overarching goals of the project,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...and by the time the developer takes care of everything that is missing, which is boring work, any productivity gains have been inverted.&lt;/p&gt;
&lt;p&gt;Further, it has recently been discovered that &lt;a href="https://www.youtube.com/watch?v=ai77Pa79_TY"&gt;using AI for coding has become insecure, due to a new kind of attack called slopsquatting&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nevertheless, in &lt;a href="https://www.youtube.com/watch?v=BnVY1NDn4Mg"&gt;this video&lt;/a&gt;, Theo realizes that code written by Artificial Intelligence is a reality in companies and that we need to adapt our workflow.
Then he makes the most obvious mistake:
He thinks we need to improve our ability to review code.&lt;/p&gt;
&lt;p&gt;I like Theo's videos because his takes are always mistaken and short-sighted.
For instance, his irrational hatred of Flutter, which is a lovely piece of technology.
When I agree with Theo on something, I know I need to think more!&lt;/p&gt;
&lt;h3&gt;Code review is a scam&lt;/h3&gt;
&lt;p&gt;Another effect of AI is that a programmer is no longer a programmer.
She is just a code reviewer now. The AI codes, the dev reviews.&lt;/p&gt;
&lt;p&gt;As a developer, I am now supposed to be slowly reviewing code quickly written by a moron (the AI) –, which is a job I hate.&lt;/p&gt;
&lt;p&gt;I became a developer because I love programming.
They are taking away the creative activity I love – writing good code, using skills acquired over decades – and telling me to do something boring instead: fix bad code, all the time.&lt;/p&gt;
&lt;p&gt;Further, there is no way to teach a person to be a code reviewer.
That's impossible.
You can only learn to program, and then, after you program well, you can review code, badly.&lt;/p&gt;
&lt;p&gt;One learns to program by programming, not by reviewing code.
The practice of programming is indispensable.
One cannot truly understand, for instance, object-oriented programming simply by reading a book.
The practice of it is what finally teaches you.&lt;/p&gt;
&lt;p&gt;The same applies to libraries, not just programming languages.
You start a code review and you see the AI wrote this:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;caprese&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You have never seen this &lt;em&gt;caprese&lt;/em&gt; library before.
(Assume the library is legitimate; I am not talking about the security problem mentioned above.)
What do you do now? You know the AI hallucinates.
Do you blindly trust its usage of the library?
Or do you start reading the documentation of the library?&lt;/p&gt;
&lt;p&gt;Remember, management told you to work faster by using AI.
How much time should you now spend validating the AI's hallucinations about this &lt;em&gt;caprese&lt;/em&gt; library?&lt;/p&gt;
&lt;p&gt;Are you so inexperienced in codebase maintenance that you allow any unknown library to enter your dependencies – much less a library suggested without any consideration of the rest of your codebase?&lt;/p&gt;
&lt;p&gt;Beyond security problems, have you never had a library become unmaintained and start generating thousands of warnings after you upgrade the version of your programming language?&lt;/p&gt;
&lt;p&gt;You are an expert; how on Earth did the powers that be conclude you would work faster by reviewing the thoughts of an idiot?
Do they not know that software development is an immensely complex craft?
Is it not insulting to you that they see you as a monkey typing words on a keyboard?&lt;/p&gt;
&lt;p&gt;And how are you going to learn to properly use the library if you are not even programming anymore???
You think reading documentation makes up for it???
Have you never heard of &lt;a href="https://en.wikipedia.org/wiki/Constructivism_(philosophy_of_education)"&gt;Constructivism&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;The philosopher Ludwig Wittgenstein affirmed that &lt;em&gt;man can only truly understand that which he creates&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The idea that human programmers could ever become just code reviewers is the single most absurd thing I have ever heard in this industry.&lt;/p&gt;
&lt;p&gt;But it's even worse than that. Code review itself is a mistaken practice.&lt;/p&gt;
&lt;p&gt;I realize that reviewing code is impossible.
This is because writing code is a creative activity that begins with the programmer concentrating on all the information necessary to write the code, including how the thing works right now and how the thing should work tomorrow.&lt;/p&gt;
&lt;p&gt;Whereas reviewing code doesn't start from the same point.
It starts with the subject reading new code, at which point several assumptions happen.&lt;/p&gt;
&lt;p&gt;The user story, the objectives, the necessary information that drove the writing.
Do you think the code reviewer can be as aware of these things as the code writer was?&lt;/p&gt;
&lt;p&gt;And there was a process.
Maybe the code was written, then rewritten.
But the reviewer is absolutely unaware of the evolution of ideas in the mind of the writer.&lt;/p&gt;
&lt;p&gt;In practice, the code reviewer's preoccupations are different from the code writer's, and that creates problems.&lt;/p&gt;
&lt;p&gt;As a simple matter of human perception, conscience after creation is much deeper than conscience after revision.&lt;/p&gt;
&lt;p&gt;In a code review one probably should question everything, but that is impossible to do.
In reality, only a handful of things can be questioned in a code review – and then we are tired.&lt;/p&gt;
&lt;p&gt;This is why, in years and years of experience, code reviews have never been able to catch enough bugs.
It is absolutely necessary to test all the written code.
And before testing, you need to understand the impact of the change so you know which screens and which use cases need to be tested.
And if you don't test, there will certainly be problems despite the greatest possible skill in reviewing the code.&lt;/p&gt;
&lt;h3&gt;…just like UML was a scam&lt;/h3&gt;
&lt;p&gt;There are similar mistakes that have been made in the history of programming – for example, a focus on UML.
For a long time, there was a class of programmers who did not use a code editor, they used Word or software to make diagrams.
They were what we called &lt;em&gt;office programmers&lt;/em&gt;.
Gradually, the focus on diagrams was abandoned, because a programmer, in order to think correctly, needs to be in front of her editor, not in front of tools that only express abstractions and do not compile.&lt;/p&gt;
&lt;p&gt;They say "paper accepts anything". That's the problem with diagrams. Also the problem with code reviews.&lt;/p&gt;
&lt;p&gt;A code review does not occur in a text editor, it occurs in a code commenting interface.
Just as UML could be divorced from reality, a code reviewer also has trouble seeing reality for what it is, and may make suggestions that either aren't practical or do not aim at the objective of the current user story, because a reviewer is not so conscious of either, compared to a creator.&lt;/p&gt;
&lt;h3&gt;The alternative to code reviews&lt;/h3&gt;
&lt;p&gt;(Pair programming is the right answer.)&lt;/p&gt;
&lt;p&gt;At the moment of a code review, I don't anymore do a code review.
I become co-creator instead of reviewer.
I do code changes, and then I ask the original developer to look at my changes.
This is the only way to ensure the code review doesn't descend into nonsense.&lt;/p&gt;
&lt;p&gt;I open my editor and I rename the variables that are poorly named.
I add the &lt;em&gt;else&lt;/em&gt; clause that is missing after the &lt;em&gt;if&lt;/em&gt; clause.
With each improvement I make to the code, it becomes possible for me to see other problems.&lt;/p&gt;
&lt;p&gt;If I didn't solve the issues I already saw, I wouldn't be able to see further.
I don't know why this is so, but this is how my conscience behaves.
I have to open the tomb first, then I can see the spider webs.
I have to clear the webs, then I can see the dust.
I have to clear the dust, then I can see the hieroglyphs.&lt;/p&gt;
&lt;p&gt;A man walks into a doctor’s office, frantic.
"Doctor, you’ve got to help me!
I think I’m going blind – I can’t see a thing out of my left eye!"&lt;/p&gt;
&lt;p&gt;The doctor looks at him carefully and says,
"Well, that’s serious. But I also notice your right leg is missing – what happened?"&lt;/p&gt;
&lt;p&gt;The man waves it off,
"Forget the leg! That’s old news!"&lt;/p&gt;
&lt;p&gt;This is why code reviews fail: people are unable to agree on what to focus on.
Cognitive overload and tunnel vision are common realities.&lt;/p&gt;
&lt;p&gt;When I review code and ask for certain changes, the programmer often misses my point and creates a third strange version.
Showing a better result (and letting them compare) is more effective than meta-talking about an idea that for the present is only in my head.&lt;/p&gt;
&lt;p&gt;So code review is not possible as code review, it is only possible as code maintenance done in an editor.&lt;/p&gt;
&lt;p&gt;Pair programming, or mob programming, is the right idea.
Code reviews are too late, too tiresome, too costly and too ineffective.&lt;/p&gt;
&lt;h3&gt;AI does not edit&lt;/h3&gt;
&lt;p&gt;But it's even worse than that.&lt;/p&gt;
&lt;p&gt;AI is a machine that creates legacy code.
The challenge with legacy code is understanding its intention, which has been lost because the people are no longer there.
If only the original developer were around, you could ask her what led to certain decisions.
The reasons for the code to be this way.&lt;/p&gt;
&lt;p&gt;But in this case, the intention – if it ever existed – is impossible to determine, because the AI does not have a personality; it has different beliefs, priorities and knowledge each time you run a prompt through it.
The output can be markedly different even if the prompt is always the same.&lt;/p&gt;
&lt;p&gt;AI is unable to edit code – it can only rewrite code.
This leads to a huge patch each time.
Instead of a laser focus on the detail that needs changing, you get a completely new program!
How on Earth can you manage that?&lt;/p&gt;
&lt;p&gt;This is such a messy way to work and understand code that any productivity gains – &lt;a href="https://www.youtube.com/watch?v=fJGNqnq-aCA"&gt;which are all lies, by the way&lt;/a&gt; – would be reversed by the time the bugs hit production.&lt;/p&gt;
&lt;p&gt;The mess created by using AI – a mess that affects the diffs in the git repository, the ability to reason about the code, the expertise of the worker herself, and the fun of working, is so grave that no ability to type code faster can compensate.&lt;/p&gt;
&lt;h3&gt;Managers never explain the reason&lt;/h3&gt;
&lt;p&gt;I believe most of what I am saying is obvious to any developer, but humans are terrified of going against the mob.
In this case, AI hype and greedy managers have already created a mob.&lt;/p&gt;
&lt;p&gt;Let us read an example &lt;a href="https://www.youtube.com/watch?v=Tm8RG1leX8c"&gt;told in a YouTube comment on 2025-05-28&lt;/a&gt;.
This person is a video editor in a large company:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(...) Everytime I or anyone makes suggestions on shooting photos or video with real environments we’re asked to “think how we can incorporate Ai into it” or even just skipping hiring models and actors to use Ai instead.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Where I work, the executives, directors and managers don’t want to listen to creative professionals or employees with the skill set. Speaking up just puts a target on your back. During my end of year review, the only thing they told me to work on was to “embrace Ai more”. The CEO even had to write a company wide email about how “our industry is moving towards Ai and we need to follow”. Funnily enough, had he just made Ai write that email, it wouldn’t have sounded so cold and depressing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;But notice how managers are always prescriptive, they never explain anything.
The pressure of using AI now... is postulated, not proven.
There is never any justification given for the new directive, much less one that would survive some scrutiny.&lt;/p&gt;
&lt;p&gt;The real message is, AI is faster and cheaper, therefore it shall be used, even at the expense of everything else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The sanity of the team&lt;/li&gt;
&lt;li&gt;The jobs of the team&lt;/li&gt;
&lt;li&gt;The sanity of the process&lt;/li&gt;
&lt;li&gt;The knowledge, expertise, and wisdom acquired over decades&lt;/li&gt;
&lt;li&gt;The quality of the product&lt;/li&gt;
&lt;li&gt;Customer satisfaction&lt;/li&gt;
&lt;li&gt;Everyone's humanity&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...and the only thing that remains possible is for managers to pat themselves in the back, self-congratulating for gains that are, in fact, false.
Such managers should embrace AI by stepping down.
Even an AI would do a better job.&lt;/p&gt;
&lt;p&gt;However, in the end, the proof shall be in the pudding.
Companies that "embrace AI" in a stupid way will certainly suffer.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;A programmer must program as a writer must write as a pianist must play.
Smart tools can hinder the exercise and development of one's craft.&lt;/p&gt;
&lt;p&gt;AI spoils man's memory, thought and self-improvement.
It can type lines faster, but in a manner that is not manageable, and people are going to suffer and die for this reason.&lt;/p&gt;
&lt;p&gt;Companies must realize the importance of motivating people to develop their craft and become their best selves.
Companies that push a tool that will hinder the development of the team certainly are not Agile.&lt;/p&gt;
&lt;p&gt;Architecture before coding was divorced from reality.
&lt;a href="https://read.nando.audio/posts/no-estimates.html"&gt;Estimates in software were divorced from reality.&lt;/a&gt;
&lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;Waterfall&lt;/a&gt; was divorced from reality.
The solution to these three was never to learn to do them better; we tried that and it failed.
The solution was to stop doing them.&lt;/p&gt;
&lt;p&gt;Code review is like that, it is the great mistake of this generation.
We will spend 25 years trying to review code, striving to do it better.
Finally we will realize what Wittgenstein and Constructivism already knew:
Building it yourself is an essential step to understanding it.
Humans cannot review code well, they can only write and maintain code well.&lt;/p&gt;
&lt;p&gt;You can do pair programming with a human, but not with an AI.
If you can only review the AI's code, then that's not a realistic option, since code reviews are insufficient.&lt;/p&gt;
&lt;p&gt;AI cannot yet replace humans because its experience of the world is too limited.
But by abusing our interim hyped AI, we are having it replace quality, accountability, and the soul of engineering.&lt;/p&gt;
&lt;p&gt;Ultimately, we are talking about Robert C. Martin's maxim: "The only way to go fast is to go well".
The problem is not new.
Software developers, as professionals, have the duty to say "no" to every ignorant management measure that hurts development while trying to make it faster.
It is a disgrace that so many professionals swallow it.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>programming</category><guid>https://read.nando.audio/posts/harmful-tools.html</guid><pubDate>Sat, 26 Apr 2025 12:00:00 GMT</pubDate></item><item><title>No estimates!</title><link>https://read.nando.audio/posts/no-estimates.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;…So you are to manage some software creation. Then you must understand you cannot simply employ the same techniques used to manage other domains. Software creation is strange – many counterintuitive truths about it. You will fail unless you learn about these weird realities.&lt;/p&gt;
&lt;p&gt;This series contains these posts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;How to hire a development team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/counterintuitive.html"&gt;Counterintuitive facts of software development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/no-estimates.html"&gt;No estimates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/harmful-tools.html"&gt;On the use of harmful tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Estimation is impossible&lt;/h3&gt;
&lt;p&gt;From other fields came the notion that deadlines can be set.
But one of the most striking bizarre facts about software creation is this:&lt;/p&gt;
&lt;p&gt;It is impossible to anticipate when the thing will be done with any reasonable amount of certainty.&lt;/p&gt;
&lt;p&gt;This was gradually discovered during the history of software development.
It is impossible to estimate development effort, because in programming, difficulty is accidental, it is not predictable.
One does not know what the trouble is going to be.&lt;/p&gt;
&lt;p&gt;If you cook pierogi once, you have some idea of how long it will take you next time.
But new software is like writing a new book or researching new tech.
Treating it like pierogi is so wrong, it is offensive.
Only in very few cases is software so repetitive, and in those cases, it is not very valuable.
Valuable software does something new enough that you can't estimate it.&lt;/p&gt;
&lt;p&gt;In such cases, I don't know how long it's going to take, because I haven't written it yet.&lt;/p&gt;
&lt;h3&gt;History&lt;/h3&gt;
&lt;p&gt;Since the 70s, devs marveled at how much their estimates were off.
So they concluded: "we should improve our estimation skills.
Learn to estimate better through deeper thinking".
Research on this was done in the 80s, and they came up with better techniques.
Then they saw the results were equally off.
It wasn't until the turn of the century that a few enlightened minds decided estimation was a waste of time.
The result of the estimation was garbage, so they wouldn't do it anymore.
They wouldn't lie to management.&lt;/p&gt;
&lt;p&gt;This idea only began to spread about 10 years ago.
That's &lt;strong&gt;the #NoEstimates movement&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Rubbish&lt;/h3&gt;
&lt;p&gt;The last time I estimated a story with Raphael, we spent 3 hours and came to the same conclusion, so we felt good about it, although we were extremely tired.
But then a better alternative came up and plans changed, so the 6 man-hours were thrown away.
The estimate would need to be redone, and in all that time, nothing useful was being done for the user/client.&lt;/p&gt;
&lt;p&gt;The 6 man-hours were pure waste: doing the estimation hurt the speed of the team.
The estimation was probably incorrect even if we felt good about it, and even if it weren't so, it had no value once we had a better idea and changed our plans.
If you want your team to be fast in delivering working software, requiring estimates is a great way to ensure they will be slow.&lt;/p&gt;
&lt;p&gt;So, you see, in software, estimation doesn't work, its output is garbage and management decisions, business decisions, must not be based on such poor quality information.&lt;/p&gt;
&lt;p&gt;Developers always knew estimates are rubbish, but managers always insisted they need it.
Managers won, but nothing could be done about the fact that, in software, estimates are garbage.&lt;/p&gt;
&lt;h3&gt;Software creation is an interaction&lt;/h3&gt;
&lt;p&gt;When we estimate, we sort of write the software in our heads.
We start scribbling that, to finish this feature, we need to write these new database tables, this database migration, these business rules, these API methods, use this or that library, add this and that to the GUI etc.&lt;/p&gt;
&lt;p&gt;But that's not how it actually works.
When we sit down to do the actual work, we are faced with the entire iceberg, not just the tip we could see.&lt;/p&gt;
&lt;p&gt;Initial estimates often assume a "greenfield" scenario, but in reality, we must integrate with legacy parts of the system, poorly documented code, or unexpected architectural bottlenecks.&lt;/p&gt;
&lt;p&gt;We make bets.
After some software is written, we start to realize whether our bets were off.
Only through building can we understand the true problem and discover better solutions.
We are now interacting with all sorts of unanticipated forces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Requirements were vague, evolving, or misunderstood.&lt;/li&gt;
&lt;li&gt;Real needs become clearer only as the product takes shape.&lt;/li&gt;
&lt;li&gt;Underdeveloped designs.&lt;/li&gt;
&lt;li&gt;Edge cases, usability concerns, or integration issues emerge.&lt;/li&gt;
&lt;li&gt;Unforeseen technical debt.&lt;/li&gt;
&lt;li&gt;Models may be different than how we remembered them.&lt;/li&gt;
&lt;li&gt;Libraries are at least partially unknown.&lt;/li&gt;
&lt;li&gt;The compiler.&lt;/li&gt;
&lt;li&gt;Versions.&lt;/li&gt;
&lt;li&gt;Discovery of steps we didn't anticipate we'd have to do.&lt;/li&gt;
&lt;li&gt;A developer doesn't just develop. She gets sick, she must go into meetings, she needs to pause to fix a bug, she needs to do some planning, she needs to answer e-mails and someone else's questions, she needs to research something before the next sprint... None of this gets factored into an estimate.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short, writing actual software is a struggle against realities that were completely unknown at the time of estimation. &lt;/p&gt;
&lt;p&gt;Implementation is discovery, not execution. This is why Agile emphasizes iterative progress, continuous feedback, and adapting to change.&lt;/p&gt;
&lt;h3&gt;Managers do not understand the word "estimate"&lt;/h3&gt;
&lt;p&gt;When you use estimates, you set yourself up for this eternally repeating conversation:&lt;/p&gt;
&lt;p&gt;"The feature is not ready??? You said it would only take a week."&lt;/p&gt;
&lt;p&gt;"That's not what I said. I gave you an ESTIMATE."&lt;/p&gt;
&lt;p&gt;"That's bullshit!!!" &lt;/p&gt;
&lt;p&gt;"You got that right!!!"&lt;/p&gt;
&lt;p&gt;"How can I meet my goals like this???"&lt;/p&gt;
&lt;p&gt;"What do I know about YOUR job??? My plate is already full of this letter soup!"&lt;/p&gt;
&lt;h3&gt;What to do&lt;/h3&gt;
&lt;p&gt;Developers give estimates just so managers will stop pestering them and go away.
That is an irresponsible thing to do.
The only responsible thing is to deny estimation.&lt;/p&gt;
&lt;p&gt;However, businessmen still need information to be able to make business decisions.
There's an event later this year, that is an important business opportunity, and we need to be able to predict what can be ready by then.&lt;/p&gt;
&lt;p&gt;That is why people have been studying how to make management decisions in the absence of estimates.
Based on other criteria.&lt;/p&gt;
&lt;h3&gt;Not convinced?&lt;/h3&gt;
&lt;p&gt;I do not expect you are convinced.
I was only convinced after weeks of consideration.
But &lt;a href="https://www.youtube.com/watch?v=QVBlnCTu9Ms"&gt;this 37-minute presentation by Allen Holub&lt;/a&gt; is what finally convinced me.&lt;/p&gt;
&lt;p&gt;After 15 minutes, he starts to show how to manage a software project in the absence of estimates, including how to count stories to make graphs and calculate timetables.
After 31 minutes he recommends Story Mapping to organize the backlog and prioritize features for the next release.&lt;/p&gt;
&lt;p&gt;Other notable authors about NoEstimates are Woody Zuill and Vasco Duarte.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>programming</category><guid>https://read.nando.audio/posts/no-estimates.html</guid><pubDate>Fri, 25 Apr 2025 12:00:00 GMT</pubDate></item><item><title>Counterintuitive facts of software development</title><link>https://read.nando.audio/posts/counterintuitive.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;…So you are to manage some software creation. Then you must understand you cannot simply employ the same techniques used to manage other domains. Software creation is strange – many counterintuitive truths about it. You will fail unless you learn about these weird realities.&lt;/p&gt;
&lt;p&gt;This series contains these posts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;How to hire a development team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/counterintuitive.html"&gt;Counterintuitive facts of software development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/no-estimates.html"&gt;No estimates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/harmful-tools.html"&gt;On the use of harmful tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;The book&lt;/h3&gt;
&lt;p&gt;One of the most interesting and lasting books about software development was written in 1975.
That's &lt;a href="https://en.wikipedia.org/wiki/The_Mythical_Man-Month"&gt;"The Mythical Man-Month"&lt;/a&gt;
by Fred Brooks.&lt;/p&gt;
&lt;h3&gt;On Waterfall&lt;/h3&gt;
&lt;p&gt;I will base this post on famous quotes by him, mainly from that book. Always in italics:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"The Waterfall Model is wrong and harmful; we must outgrow it."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Yep, that's what you learned in the first post in this series.
Brooks already knew it.&lt;/p&gt;
&lt;h3&gt;Brooks' Law&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;"Adding manpower to a late software project makes it later."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The above sentence is known as Brooks' Law.
It's probably the most famous quote from his book.
It sums up one of the most interesting and counterintuitive things about software.&lt;/p&gt;
&lt;p&gt;Suppose you are managing a team and the project is late.
To fix the situation, you hire one or two more people.
You do this because more people will certainly get more work done.&lt;/p&gt;
&lt;p&gt;One month later, maybe two months later even, not only the situation hasn't improved, it's gotten even worse.
You wonder why.&lt;/p&gt;
&lt;h3&gt;First reason for Brooks' Law&lt;/h3&gt;
&lt;p&gt;The most important reason is that communication overhead increases when someone enters the team.
All sorts of information must be asked by the newcomers and answered by old team members:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;about the domain (e.g. accounting in an accounting system)&lt;/li&gt;
&lt;li&gt;about how things work in the system&lt;/li&gt;
&lt;li&gt;about why things have to be this way&lt;/li&gt;
&lt;li&gt;about why the team works a certain way&lt;/li&gt;
&lt;li&gt;about difficulties using the tools&lt;/li&gt;
&lt;li&gt;about the correctness of one's own work&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The communication need is so intense that weeks can pass before a new team member becomes properly productive, and while providing explanations, the experienced team members also have their productivity impacted.&lt;/p&gt;
&lt;p&gt;You want to know how to make this even worse?
Try to preserve the experienced team members from communication up to a degree, or even entirely.
Now the newcomers have no clue what they are doing and have no way to learn valuable things that were already in the culture of the company.
This is because a great amount of knowledge in the team is tacit, not explicit.
Only communication makes it explicit.&lt;/p&gt;
&lt;p&gt;And that is no way to treat a new team member, of course.
It conveys that experienced team members are too busy or too valuable to teach anything to the noobs.
This leads to conflicts and hurt feelings and hurts team formation.&lt;/p&gt;
&lt;p&gt;There is no way to avoid the need for communication, because, in a way, software development is knowledge production.
Every new person increases the communication overhead dramatically, leading to miscommunication, coordination delays, and diminishing returns.&lt;/p&gt;
&lt;p&gt;As a rule of thumb, the larger the development team, the more time needs to be spent in communication, even after everyone is onboard and productive. As Brooks says:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"The number of communication paths increases with the square of the number of people involved."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a good argument to keep software teams small.
And this is why in Agile no team is larger than 12.&lt;/p&gt;
&lt;h3&gt;Second reason for Brooks' Law&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;"Nine pregnant women cannot produce a baby in one month."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is one of the funniest. Brooks explains:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"When a task cannot be partitioned because of sequential constraints, the application of more effort has no effect on the schedule. The bearing of a child takes nine months, no matter how many women are assigned."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is about activities and decisions that depend on the completion of others.
A manager needs to understand how such dependencies happen in software development.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Men and months are interchangeable commodities only when a task can be partitioned among many workers with no communication among them."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This means, only when bits of work do not depend on each other, can they be done at the same time.&lt;/p&gt;
&lt;h3&gt;On business analysis&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;"The hardest single part of building a software system is deciding precisely what to build. The most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements. For the truth is, the clients do not know what they want. They usually do not know what questions must be answered, and they have almost never thought of the problem in the detail that must be specified."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The entire development team does business analysis: they try to understand the steps through which work needs to be done.
That quote is amazing near the end.
It is often said that clients only know what they want after they see what they don't want.
Meaning the team presents a design first, and then the client can see flaws in the design and correct it.
But the client is unable to describe what is desired before they see the design.&lt;/p&gt;
&lt;p&gt;The last sentence... "in the detail that must be specified"... is explained in another terrific quote:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Design work doesn't just satisfy requirements, it elicits them."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Meaning, the requirements exist, but are not known by anyone, until a design suddenly makes them obvious.&lt;/p&gt;
&lt;p&gt;Also, the design must go through iterations. Each iteration allows the team and the client to discover new weaknesses and needs:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Even the best planning is not so omniscient as to get it right the first time."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Every now and then, no argument will convince an egoic client with enough bad taste:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Einstein repeatedly argued that there must be simplified explanations of nature, because God is not capricious or arbitrary. No such faith comforts the software engineer."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Software designers are strong in a certain kind of abstract thought, which allows them to see shapes of solutions that apply to many different problems.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"I am more convinced than ever. Conceptual integrity is central to product quality."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I found the same thought expressed in another quote:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Conceptual integrity is the most important consideration in system design."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Software follows and materializes rules.
You cannot establish rules unless you are thinking very clearly.
In software as in law, good rules are based on sane concepts; bad rules use bad criteria.
Confused concepts will always hurt decisions made by or with the software.&lt;/p&gt;
&lt;h3&gt;It's not requirements&lt;/h3&gt;
&lt;p&gt;The word "requirements" is still used, but now it's wrong.
None of those are required.
They are just ideas, and their priority is always shifting as the business learns about the market, about itself, about current needs etc.
Many of those ideas necessarily will be discarded, which wouldn't happen if they were requirements.&lt;/p&gt;
&lt;p&gt;An Agile team treats potential features as ideas, not requirements.
This clarification is repeatedly made by Jeff Patton, inventor of the Agile technique of Story Mapping.&lt;/p&gt;
&lt;h3&gt;Bugs are priority zero&lt;/h3&gt;
&lt;p&gt;Some people have a notion that they are going to manage bugs.
They think they can list the known bugs and decide which ones to fix.
They want to save developer time spent on bugs!!!
That's outlandish.&lt;/p&gt;
&lt;p&gt;A bug usually is bad behavior whose origin is unknown.
If you are seeing 2 buggy behaviors, they might have the same origin in the code (in other words, they might be the same bug).&lt;/p&gt;
&lt;p&gt;If you let bugs live, they can get compounded.
A bug interacts with another bug, creating a third bug.
At this point, no sane person can understand what is going on with the system.&lt;/p&gt;
&lt;p&gt;If you try to manage bugs, basically you don't understand what the hell is going on anymore. It is hard enough to reason about working software; who can reason about bugs?&lt;/p&gt;
&lt;p&gt;The notion of managing bugs is as absurd as the idea of managing mysteries.&lt;/p&gt;
&lt;p&gt;The only sane thing to do about bugs is to squash them as soon as they are seen.
Now maybe you can reason about your system.&lt;/p&gt;
&lt;p&gt;If I wished to reason about insanity, I would have studied Psychology, not Computer Science.&lt;/p&gt;
&lt;h3&gt;More than 40 hours a week hurts the project&lt;/h3&gt;
&lt;p&gt;Programming is an activity that requires a very high level of concentration.
The brain works very hard and gets tired.&lt;/p&gt;
&lt;p&gt;When a programmer is overworked, his productivity goes down, he feels tired, his concentration is feeble and his decisions are worse.
The quality of the software goes down and sometimes the programmer can produce more bugs than features, effectively hurting the project.&lt;/p&gt;
&lt;p&gt;A developer must work 40 hours per week, tops. No more.&lt;/p&gt;
&lt;h3&gt;Do not pressure developers to work faster&lt;/h3&gt;
&lt;p&gt;The business wants software produced as fast as possible, so it puts pressure on developers.&lt;/p&gt;
&lt;p&gt;Developers have only one way to deliver faster: drop the quality of the writing.&lt;/p&gt;
&lt;p&gt;So the software is now more buggy and less maintainable.&lt;/p&gt;
&lt;p&gt;Now the business pays the price of the bugs, which is enormous (annoyed customers, no satisfaction, no word of mouth etc.). Fixing bugs also gets exponentially costlier as time passes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixing a bug in the developer's machine costs ~2 minutes.&lt;/li&gt;
&lt;li&gt;Fixing a bug in the staging environment costs around an hour. One has to fix the bug, then deploy the fix, then let the customer know it got fixed.&lt;/li&gt;
&lt;li&gt;Fixing a bug in production takes a day in some cases, because data is already wrong for the users. If it's not a web app you also have to push a new version out and its adoption will vary according to the effectiveness of the software update system.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can sort of understand this if you think of an author writing a novel.
You as an editor tell the author to hurry up.
So the author forgets to do certain edits.
Now the character that got killed in chapter 6 suddenly reappers in chapter 18 without any explanation.&lt;/p&gt;
&lt;p&gt;In software this is much worse than in a novel.
To compare, you'd have to turn the novel into a virtual reality.
Now you have a Shrödinger's cat who is alive and dead at the same time.
What could be worse than that in software?&lt;/p&gt;
&lt;p&gt;But that is not the only bad consequence.
Badly written software is harder to change.
This means future tasks take much longer to accomplish.
So you thought you were saving some time, and maybe you did if lucky, but you've hurt the entire future of the project.&lt;/p&gt;
&lt;p&gt;Robert C. Martin expresses this concept best:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"The only way to go fast is to go well."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Pressure your developers and suffer the consequences.&lt;/p&gt;
&lt;p&gt;In Agile, the quality of the code is not negotiable.
It takes as long as it takes.
Bad managers need to get a clue.&lt;/p&gt;
&lt;h3&gt;Technical debt&lt;/h3&gt;
&lt;p&gt;No novel is written right the first time.
Every romance needs a few rewrites to become really good.
Software is similar.
Some parts of the software need to be reformulated, because it is impossible to get it right the first time.&lt;/p&gt;
&lt;p&gt;Even if you don't have bugs, you have badly written parts.
You are paying for these parts each time a developer needs to read them or change them.
So they are worth fixing even if the fix does not change the external behavior of the code.&lt;/p&gt;
&lt;p&gt;In a novel this would be the same as telling the same sequence of events, but telling it in a better way.
Maybe the order of the chapters change.
Maybe it's the vocabulary and the wording.
The story itself doesn't change, but the novel becomes much better.
Prevent the author from doing his rewrite, and you are hurting sales.
Also worth remembering: sales aren't the only thing that matters.&lt;/p&gt;
&lt;p&gt;Ward Cunningham is an Agile developer who is one of the creators of XP (Extreme Programming).
He also invented the wiki – the notion of a collectively edited website in which creating and linking pages is very easy to do.&lt;/p&gt;
&lt;p&gt;In &lt;a href="https://www.youtube.com/watch?v=pqeJFYwnkjE"&gt;this video&lt;/a&gt;, Cunningham talks about how he coined the famous metaphor of "technical debt" to explain to non-technical people the necessity of refactoring code.&lt;/p&gt;
&lt;p&gt;Basically, rushing the software out the door (badly written, hard to understand, hard to change) is initially good for business, but it is like taking a loan.
The debt must be repaid in the future, by spending time to refactor the software, so it becomes again easy to change.&lt;/p&gt;
&lt;p&gt;Woody Zuill expresses the same thing in more broader terms.
He says "teams and managers should &lt;a href="https://youtu.be/Jtt7PAejrFA?si=FHht24uOJ73sN_cJ&amp;amp;t=1844"&gt;spend the time to make the work easy to do&lt;/a&gt;".&lt;/p&gt;
&lt;p&gt;Refactoring, and fixing technical debt, is about making future work easy to do.&lt;/p&gt;
&lt;h3&gt;Truck number&lt;/h3&gt;
&lt;p&gt;Some teams have programmers "own" parts of the codebase.
Joe is the one who understands this area.
Sue is the one who can fix problems in this other area.
The devs are experts in parts of the code.&lt;/p&gt;
&lt;p&gt;That's the worst way to distribute expertise.
It results in low Truck Numbers.&lt;/p&gt;
&lt;p&gt;What is the smallest number of people in your project that, if hit by a truck, would put the project in trouble? That's your &lt;a href="https://wiki.c2.com/?TruckNumber"&gt;Truck Number&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If only Derek can manage the positronic code, then your Truck Number is one, and that is too low.&lt;/p&gt;
&lt;p&gt;The solution is obvious.
Nobody can "own" a part of the code.
The entire codebase is collective.
Everyone works on everything.&lt;/p&gt;
&lt;p&gt;This forces the team to share knowledge, resulting in a better team.&lt;/p&gt;
&lt;h3&gt;Pair programming&lt;/h3&gt;
&lt;p&gt;We have just seen how important it is for the development team to be constantly sharing knowledge.&lt;/p&gt;
&lt;p&gt;That is one reason to program in pairs.&lt;/p&gt;
&lt;p&gt;If an experienced dev works for a few hours with a novice, teaching is automatically taking place.&lt;/p&gt;
&lt;p&gt;There are more reasons, too.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The one on the keyboard (called driver) is helped by the other one, who does research as needed and removes other blocks.&lt;/li&gt;
&lt;li&gt;Better automated tests are written, since one remembers what the other one may forget.&lt;/li&gt;
&lt;li&gt;The code is examined by two people as it is being written. One sees the bugs of the other. The quality of the result is much higher, with much fewer bugs. No code review step is necessary.&lt;/li&gt;
&lt;li&gt;The alienation and isolation typical of a software development job are eliminated. People are interacting again. Having fun at work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is just one more strange thing for managers to realize.
Managers who don't know about pair programming think it's waste.
Two people doing the job of one.
Nothing further from the truth.&lt;/p&gt;
&lt;p&gt;Pair programming is one of the prescriptions of Extreme Programming, an Agile methodology.&lt;/p&gt;
&lt;h3&gt;Don't tell me how long it will take&lt;/h3&gt;
&lt;p&gt;After working with a software development team for a while, a manager begins to feel how easy or difficult tasks are going to be, even if she never does any task herself.&lt;/p&gt;
&lt;p&gt;Sooner or later she catches herself saying in a meeting, "I assume that's only going to take five minutes to do". That's natural, but please, blush when you say that.&lt;/p&gt;
&lt;p&gt;First of all, nobody knows how long it's going to take. Not even the developer. Because he hasn't done it yet. If it's more than changing static copy on screen, it could vary.&lt;/p&gt;
&lt;p&gt;Second, it's arrogant, defying and disrespectful.
Writing software is not frying pancakes.
More about this in the next post, about NoEstimates.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;If you've read this far, congratulations: You have just remembered universal truths about software development that have been known since 1975 at least. But these are frequently forgotten, which is a shame to those involved.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>programming</category><guid>https://read.nando.audio/posts/counterintuitive.html</guid><pubDate>Thu, 24 Apr 2025 12:00:00 GMT</pubDate></item><item><title>How to hire a development team</title><link>https://read.nando.audio/posts/waterfall.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;…So you are to manage some software creation. Then you must understand you cannot simply employ the same techniques used to manage other domains. Software creation is strange – many counterintuitive truths about it. You will fail unless you learn about these weird realities.&lt;/p&gt;
&lt;p&gt;This series contains these posts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;How to hire a development team&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/counterintuitive.html"&gt;Counterintuitive facts of software development&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/no-estimates.html"&gt;No estimates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://read.nando.audio/posts/harmful-tools.html"&gt;On the use of harmful tools&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is the first of a series of posts for administrators, although programmers should read them, too.&lt;/p&gt;
&lt;h3&gt;The question&lt;/h3&gt;
&lt;p&gt;As a business person, you are focused on the big picture, and you need your contracts to be precise to avoid unpleasant surprises. So here is my question to you:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Would you hire a software development company that works via the Waterfall method?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yes or no? Would you hire them to make software for you?&lt;/p&gt;
&lt;p&gt;If you don't know what Waterfall is, you are in the right place.&lt;/p&gt;
&lt;p&gt;By the way, the correct answer is no, you mustn't, because Waterfall is a severely obsolete way to develop software, and likely to fail hard. But Waterfall continues to be used today, since it feels comfortable to administrators who do not know certain strange facts about software development.&lt;/p&gt;
&lt;h3&gt;Waterfall&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Waterfall&lt;/strong&gt; means each development phase is done for the entire scope of the project and its output informs or cascades into the next phase:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;Requirement gathering &amp;amp; analysis ↘
   System architecture and design ↘
                    Implementation ↘
                            Testing ↘
               Delivery / deployment ↘
                            Maintenance
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The first phase, requirement gathering, results in a text that states the problem we are trying to solve.
This text is the basis for work on the second phase, design, which is done by business analysts interviewing workers in your company, and results in a text (and some diagrams) that state what the solution is going to look like.&lt;/p&gt;
&lt;p&gt;You pay for these 2 phases and, if you are happy with the proposal, you contract the team to actually develop the software for you.
So you start paying for development, but basically you don't talk to the developers anymore, for months or even years, until they finish their job and come back to show you the result.&lt;/p&gt;
&lt;p&gt;That output of the 2nd phase is the input for the 3rd phase, implementation, in which programmers make the software.
The application is the input for the 4th phase, testing, in which testers find bugs in the software and send those back to the programmers to fix.&lt;/p&gt;
&lt;h3&gt;Problems&lt;/h3&gt;
&lt;p&gt;When testers are happy, you go to a meeting and you see what they did.
Now you start pulling your hair because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Due to misunderstandings, what they are delivering is NOT what you asked for, months and months ago.&lt;/li&gt;
&lt;li&gt;Even if they had understood you, so many months have passed that what you asked for is no longer what you need. During this time, your business has evolved, your customers have changed, regulations have changed, the market has changed etc.&lt;/li&gt;
&lt;li&gt;There are features missing which are evident now, but nobody thought of then.&lt;/li&gt;
&lt;li&gt;The project is late and you have already been forced to negotiate the price, paying more for them to finish the job.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Historically, the Waterfall method had these serious problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It naively assumed that the system could be planned in its entirety; it did not foresee changes in scope.&lt;/li&gt;
&lt;li&gt;Each step took months to do, so projects could take years to complete.&lt;/li&gt;
&lt;li&gt;Clients did not participate in the development process, they only saw the finished project at the delivery phase.&lt;/li&gt;
&lt;li&gt;For lack of communication, clients felt what was delivered had almost nothing to do with what they had said they wanted.&lt;/li&gt;
&lt;li&gt;By the time the project was completed, the plans were obsolete: so much time had passed that the solution was born inadequate. Even if there had been no communication issue.&lt;/li&gt;
&lt;li&gt;Each phase was driven by fear of incompleteness. Most importantly, during the initial requirements gathering, clients tried to be as complete as possible in listing features, for fear of leaving out something important while they still could add scope without incurring costs. This resulted in implementation of many features that were never used in practice – an enormous waste of time and money. This problem is called "feature creep".&lt;/li&gt;
&lt;li&gt;Due to lack of communication and lack of trust, negotiation was hard. Clients simply wanted as much scope as possible for as little money as possible. It was hard for clients to understand why no software project can be delivered in the estimated time (more about this in another post). If legislation changed during the project execution and the scope had to change, a negotiation had to take place.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Software projects are very different from other projects. Software has weird characteristics that you, as a business person, must know about, if you are to succeed. This is what this small series of blog posts is about.&lt;/p&gt;
&lt;h3&gt;Fixing waterfall&lt;/h3&gt;
&lt;p&gt;Around the turn of the century, Waterfall was gradually abandoned, in favor of some Agile methodologies.
But here is the problem: Agile is hard to understand.&lt;/p&gt;
&lt;p&gt;Let's just try to begin to understand Agile.&lt;/p&gt;
&lt;p&gt;The word Agile does not mean faster. Nothing gets done faster.
It just means our reaction time is shorter.
When the environment demands we move in another direction, we are ready to do so.
We are a motorcycle, not a train.
A motorcycle is not necessarily faster than a train; it is more agile.&lt;/p&gt;
&lt;p&gt;What would &lt;strong&gt;you&lt;/strong&gt; do to fix Waterfall? I have shown you its problems; what do you do?&lt;/p&gt;
&lt;p&gt;Here are some obvious things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The client must participate all the time, not just at the beginning and at the end.&lt;/li&gt;
&lt;li&gt;There should be more communication.&lt;/li&gt;
&lt;li&gt;Planning should not be done only once at the beginning of the project.
    It should be done all the time, as reality changes and priorities shift.&lt;/li&gt;
&lt;li&gt;Place incentives to get rid of the fear of incompleteness.
    Tell them to make a small improvement and deliver it as soon as it is palpable to the user.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Therefore, when working with an Agile team:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You are required to enter another kind of contract, with variable scope, as opposed to the fixed scope of the Waterfall method.
    In other words, the contract does NOT say what the software is going to do.
    Nobody knows what the software is going to do, exactly.
    That's going to be discovered during the project.
    You pay for development time, not for a fixed scope.
    As an administrator, at first, you preferred a fixed scope, but now you know it would cause the project to fail.&lt;/li&gt;
&lt;li&gt;You accept a Minimal Viable Product (MVP), start using it, and work with the team in short iterations, giving them priorities and meeting to see increments in functionality.
    The most painful aspects of the current software will always be very obvious to you.&lt;/li&gt;
&lt;li&gt;You must stay in touch with the development team to fix misunderstandings early and provide an updated north to them. In fact, you are part of the development team.&lt;/li&gt;
&lt;li&gt;The team avoids Almighty Thud Methodologies.
    The Almighty Thud is the noise that the documentation makes when it drops on someone's desk.
    Documentation is not software, though. It is only valuable in small portions.&lt;/li&gt;
&lt;li&gt;Everyone must understand that the scope changing... is the norm, it is the most common thing in the world, it is not to be treated as an exception, but as a rule.
    ("Embrace change" is the subtitle of &lt;a href="https://www.goodreads.com/book/show/67833.Extreme_Programming_Explained"&gt;Kent Beck's 1999 book on XP&lt;/a&gt;.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now I want you to look at the phases of a project again, because it is impossible to change these:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;Requirement gathering &amp;amp; analysis ↘
   System architecture and design ↘
                    Implementation ↘
                            Testing ↘
               Delivery / deployment ↘
                            Maintenance
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Our purpose is to reach Delivery. But we can't deliver something that wasn't Tested.
And we cannot test something that was not Implemented.
And we shouldn't implement something that wasn't Designed.
And we cannot design something if we don't know what the problem is.&lt;/p&gt;
&lt;p&gt;Therefore, the steps above are the same in Agile – but they describe only one iteration of many in the project.
The iteration lasts only one or two weeks and works only on a small fraction of the system.&lt;/p&gt;
&lt;p&gt;In Waterfall, you might choose to hire testers only near the end of the project.
In Agile, everyone is working at the same time.
The pains of one role can immediately be conveyed to relevant others.
The system architect is immediately informed of the weaknesses in her architecture.
The business analyst is immediately informed of the weaknesses in her output.
The programmer immediately sees what kinds of bugs are being found by the tester.
Everyone gets opportunities to improve – immediately, not just at the end.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Instead of the feature creep characteristic of Waterfall, Agile prefers to deliver the smallest thing that has any value to the user as soon as possible.
    Even if it's just a single feature. The software is continually updated.&lt;/li&gt;
&lt;li&gt;We get feedback from the client and especially from users as early as possible and use that feedback in the following iterations.
    More likely that the right thing will be implemented. Less likely that unnecessary things will be implemented.&lt;/li&gt;
&lt;li&gt;Bring the client onto the development team, so there is transparency, they can actually see the hard work being done, they gain trust, and communication switches from negotiation mode to team mode.&lt;/li&gt;
&lt;li&gt;Even if communication fails hard at the beginning of the project, chances are it will improve and the right thing will be developed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When do you stop the project?
Well, it seems software needs to be maintained forever, to keep up with the times.
But for new features, you know when to stop.
Every two weeks you are focusing on adding the most important or most urgent feature(s).
So you stop adding features when the cost of development finally becomes higher than the benefit of the remaining features listed in the product backlog.&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;Maybe Waterfall can succeed for projects that are small enough or very easy to understand and describe. For instance, a device driver for a mouse. But most software projects aren't like that, and then you need something that deals with the actual challenges, and that's Agile.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://agilemanifesto.org/history.html"&gt;Since 2001 more or less&lt;/a&gt;, the software world started employing Agile methodologies. However, because of the exponential expansion of software, many do it without fully understanding it. Even today, many have heard the rooster announce dawn, but don't know where it is. They are just waking up to the new day.&lt;/p&gt;
&lt;p&gt;There is nothing on the horizon that can replace &lt;a href="https://agilemanifesto.org/principles.html"&gt;true Agile&lt;/a&gt;, there is no newer idea worth our time. Our current problem is that our Agile must be true, that's it.&lt;/p&gt;
&lt;p&gt;The next post will talk about other strange things typical of software development.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>programming</category><guid>https://read.nando.audio/posts/waterfall.html</guid><pubDate>Wed, 23 Apr 2025 12:00:00 GMT</pubDate></item><item><title>You're too quick to dismiss Agile</title><link>https://read.nando.audio/posts/agile.html</link><dc:creator>Nando Florestan</dc:creator><description>&lt;p&gt;I see too many programmers today thinking that Agile is nonsense. &lt;a href="https://www.youtube.com/watch?v=vcuw5UNw4jU"&gt;It has even become an opportunity to sell books on esoteric methodologies.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, there's widespread confusion:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;about what Agile actually proposes,&lt;/li&gt;
&lt;li&gt;about how bad the alternative is,&lt;/li&gt;
&lt;li&gt;about what our personal experience really is – usually with Scrum.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;First of all, let's quickly remember what Agile really is: a reaction to Waterfall.&lt;/p&gt;
&lt;p&gt;I have &lt;a href="https://read.nando.audio/posts/waterfall.html"&gt;another post that defines Waterfall and begins to explain Agile as a reaction to it&lt;/a&gt;. You should start there; maybe that's where the confusion will vanish.&lt;/p&gt;
&lt;h3&gt;The manifesto&lt;/h3&gt;
&lt;p&gt;Please refer to the original Agile Manifesto, which is about 5 lines long:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://agilemanifesto.org/"&gt;https://agilemanifesto.org/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It simply means that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;processes and tools are important, but individuals and interactions are more important.&lt;/li&gt;
&lt;li&gt;comprehensive documentation is important, but working software is more important.&lt;/li&gt;
&lt;li&gt;contract negotiation is important, but customer collaboration is more important.&lt;/li&gt;
&lt;li&gt;following a plan is important, but responding to change is more important.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You see, it's extremely hard to disagree with anything the manifesto actually says.&lt;/p&gt;
&lt;p&gt;For example, notice how the manifesto didn't prescribe any meetings. The meetings that developers complain about so much are usually the Scrum meetings. Therefore, they are not a part of Agile itself. One can develop software well while organizing one's meetings in a different way.&lt;/p&gt;
&lt;p&gt;But what some programmers really want is to develop software without communicating at all; that's impossible, and therefore, their own mistake.&lt;/p&gt;
&lt;h3&gt;Scrum&lt;/h3&gt;
&lt;p&gt;Scrum is a modern development methodology, appropriate for developing products of any kind, not just software.
Scrum does not actually say anything specific about software development.&lt;/p&gt;
&lt;p&gt;However, it prescribes a set of meetings.
If you don't have your meetings that way, then you are not doing Scrum, you are doing something else.
We just saw that Agile values individuals and interactions over processes; therefore each team should have sovereignty over their meetings and should only do Scrum meetings if they think that's appropriate for the specific team. Therefore, Scrum is already not following Agile in principle by demanding those meetings – although the ideas in Scrum can be employed in Agile!&lt;/p&gt;
&lt;p&gt;The meetings in Scrum do address a tendency that software developers have, to not communicate enough (or sometimes at all) between themselves.
If left unchecked, this tendency is enormously dangerous to the health of any project.
We'll talk about this again below (XP).&lt;/p&gt;
&lt;p&gt;&lt;a href="https://scrumguides.org/index.html"&gt;The Scrum Guide&lt;/a&gt; (2009-2020) is another document that is very brief (12 pages) and easy to read.
Again, you might be surprised at the things it &lt;strong&gt;doesn't&lt;/strong&gt; say.
For instance, Kanban and Planning Poker are &lt;strong&gt;not&lt;/strong&gt; necessarily a part of Scrum.
Scrum does not prescribe how the product backlog should be organized or how the team actually decides what to include in the next sprint.
You might be surprised at how democratic it really is, if you read it.&lt;/p&gt;
&lt;p&gt;I have worked in several bad Scrum implementations, each with their own troubles. However, I do know from experience that Scrum can work wonderfully well, because I have been part of a good Scrum implementation. Its democratic nature kept the entire team quite enthusiastic about their work.&lt;/p&gt;
&lt;p&gt;Scrum is a humanistic revolution in the workplace. It inverts the hierarchy. If in the 80s you had quite bossy bosses bossing workers around, Scrum says, bosses are out. Scrum teams have no boss; there is only a facilitator, who is supposed to give workers freedom to do the work the way they want to do it. The role of the facilitator is actually to help the workers, for instance by removing obstacles (institutional, physical etc.) that hinder their best work. This creates an engaged team where before you only had begrudging employees. The Scrum team is self-managing.&lt;/p&gt;
&lt;p&gt;"But in my experience Scrum is a tool of domination", you say. Well, did you experience actual Scrum, or a bastardized "version" that actually contradicts its principles?&lt;/p&gt;
&lt;p&gt;If you are going to criticize Agile or Scrum, first understand what each actually says. Most often, you'll realize your trouble is with the implementations you've had the misfortune of experiencing.&lt;/p&gt;
&lt;p&gt;If you pay attention to the &lt;a href="https://en.wikipedia.org/wiki/Scrum_(software_development)#History"&gt;history of Scrum&lt;/a&gt;, you realize there are at least 2 Scrums:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The 1986 one, from the paper "The New New Product Development Game" by Hirotaka Takeuchi and Ikujiro Nonaka;&lt;/li&gt;
&lt;li&gt;The famous one, from Schwaber and Sutherland in 1995. Both authors are also signataries of the 2001 Manifesto for Agile Software Development. But the Scrum Guide only appeared in 2009.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is important to notice that the lineage of thought is different for Scrum – it originated in Toyota, not in software development. Quoting the above Wikipedia article about the Japanese original Scrum:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Based on case studies from manufacturing firms in the automotive, photocopier, and printer industries, the authors outlined a new approach to product development for increased speed and flexibility. They called this the rugby approach, as the process involves a single cross-functional team operating across multiple overlapping phases, in which the team "tries to go the distance as a unit, passing the ball back and forth". The authors later developed scrum in their book, The Knowledge Creating Company.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;What I can see Scrum has in common with Agile is the humanistic aspect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;individuals and interactions over processes and tools&lt;/li&gt;
&lt;li&gt;collaboration over negotiation – this time within the team.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Extreme Programming (XP)&lt;/h3&gt;
&lt;p&gt;XP is the actual first Agile methodology for software development specifically.
This is the one that was made by programmers, for programmers.
It was developed by Kent Beck and his team from 1996 to 1999, when he wrote &lt;a href="https://www.goodreads.com/book/show/67833.Extreme_Programming_Explained"&gt;Extreme Programming Explained&lt;/a&gt;.
That team included these guys who also signed the Agile Manifesto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Kent_Beck"&gt;Kent Beck&lt;/a&gt;, inventor of XP&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.c2.com/?WardCunningham"&gt;Ward Cunningham&lt;/a&gt;, the inventor of the wiki&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ronjeffries.com/"&gt;Ron Jeffries&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of the ideas in the Agile Manifesto are already found in XP.&lt;/p&gt;
&lt;p&gt;XP described most of the software development practices that won and are in use today:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;writing &lt;em&gt;automated tests&lt;/em&gt; and using them to get the courage to refactor existing code freely, without worrying about breaking everything&lt;/li&gt;
&lt;li&gt;&lt;em&gt;refactoring&lt;/em&gt; before implementing a new feature, so it becomes easier to implement&lt;/li&gt;
&lt;li&gt;&lt;em&gt;delaying decisions&lt;/em&gt; when possible&lt;/li&gt;
&lt;li&gt;&lt;em&gt;pair programming&lt;/em&gt; to improve team communication, disseminate knowledge amongst team members, and to severely improve code quality, killing bugs immediately&lt;/li&gt;
&lt;li&gt;writing only documentation that you actually need and can keep up-to-date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;XP was revolutionary, especially when compared to &lt;a href="https://martinfowler.com/distributedComputing/thud.html"&gt;Almighty Thud methodologies&lt;/a&gt; which emphasized writing lots of documentation, which were the norm in the Waterfall era. (The Almighty Thud is the name for the noise made by the volume of paper documentation hitting one's desk.)&lt;/p&gt;
&lt;p&gt;In fact, XP is still revolutionary, inasmuch as you haven't yet personally practiced its propositions.&lt;/p&gt;
&lt;h3&gt;Software is a tamagotchi&lt;/h3&gt;
&lt;p&gt;The main conflict I see in software development is this:
Agile promises continuous delivery of value (something like delivering features all the time), but software development simply isn't like that.&lt;/p&gt;
&lt;p&gt;Expecting a development team to deliver only features all the time is as realistic as expecting a human being to be of service to their significant other all the time.
The reality is, the human and the team need some time to themselves.&lt;/p&gt;
&lt;p&gt;Business people start with this idea that software is a project with a beginning and an end.
"I will develop an app, then sit back and profit." Nothing could be further…&lt;/p&gt;
&lt;p&gt;Reality is like Chacon said:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Software is a tamagotchi. It has its own needs, that must be tended to.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The problem is, business people cannot see the virtual pet or its demands, if they cannot program.
A programmer can try to explain it to them, but they get bored quickly.&lt;/p&gt;
&lt;p&gt;This tamagotchi is a mythical creature. Only little children can see E. T., grownups cannot. And only developers can see the needs of the software; they are invisible to the marketing team.&lt;/p&gt;
&lt;p&gt;This past week I upgraded packages in our Linux servers because of the recently discovered &lt;a href="https://www.youtube.com/watch?v=2Ig05_aL4Xg"&gt;openssh vulnerability&lt;/a&gt;. If you have servers, you have to be on top of security, there is no alternative.&lt;/p&gt;
&lt;p&gt;— Yeah, but as a business person, I absolutely CAN see the value and importance in that work, since not having our users' passwords stolen is a major component of their satisfaction.&lt;/p&gt;
&lt;p&gt;Okay, then I suppose &lt;em&gt;sometimes&lt;/em&gt; you can see the tamagotchi demanding we do things that our users are completely unaware of.&lt;/p&gt;
&lt;p&gt;Let me try another example then. We really have to do some work on the way we use our asynchronous queue system. You see, things like sending emails, talking to external APIs, anything that isn't instantaneous... these things are done in separate processes, in a queue. That queue is known as FIFO, which means First In, First Out, which means first come, first served. The queue is a buffer for tasks that the app needs to do. But the queue has certain features that we need to start using in order not to have problems in it, which would be a terrible situation.&lt;/p&gt;
&lt;p&gt;— That's too technical for me, you seem to be saying words. If I were to prioritize that work, I think I would actually never prioritize it, I think, because I have features that our users actually want, and those I do understand.&lt;/p&gt;
&lt;p&gt;…and this is an example of the virtual pet dying of starvation, because the parents didn't understand its importance.&lt;/p&gt;
&lt;h3&gt;Technical debt&lt;/h3&gt;
&lt;p&gt;It is a terrible thing, when instead of the whole team choosing what needs to be done in the next sprint, it gets dictated by a non-technical Product Owner who leaves technical debt on the wall forever gathering spiders' webs, until it falls on the ground and gets swept away by someone who doesn't think they are important.&lt;/p&gt;
&lt;p&gt;A good rule for solving technical debt had already been proposed in XP: &lt;strong&gt;refactor before you implement a new feature.&lt;/strong&gt; This means, remove the technical debt that affects the feature you are about to implement. It also means, leave alone the technical debt that does not affect the code you need to change. Some technical debt exists in code that never gets changed, and that is okay if the code is working fine.&lt;/p&gt;
&lt;p&gt;By the way, bugs are not technical debt, bugs are bugs. Bugs annoy users, technical debt "only" annoys developers. Generally, solving bugs is the most important priority, because if you leave bugs alone, they start compounding. Then when you finally decide to kill them, you can't tell anymore where one starts and ends, because they have become this multi-headed monster. Nobody can understand the behavior of a buggy system; a sane mind can only understand sane behavior.&lt;/p&gt;
&lt;p&gt;However, annoying developers is a terrible thing too, and that is what business people don't understand.&lt;/p&gt;
&lt;h3&gt;Clean code&lt;/h3&gt;
&lt;p&gt;There's a second document about Agile, also very brief, which tries to clarify the Agile Manifesto. It's the &lt;a href="https://agilemanifesto.org/principles.html"&gt;12 Principles behind the Agile Manifesto&lt;/a&gt;. Again I invite you to read them.&lt;/p&gt;
&lt;p&gt;Here's a bit I would like to emphasize:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Agile processes promote sustainable development.
The sponsors, developers, and users should be able
to maintain a constant pace indefinitely.
Continuous attention to technical excellence
and good design enhances agility.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This means, agile is not supposed to be a tool against developers. This means the maintainability of the code is valuable, and important to agility.&lt;/p&gt;
&lt;p&gt;Any psychologist will tell you, before you can love other people, you need to actually love yourself.&lt;/p&gt;
&lt;p&gt;As a developer, each day you must do something to improve your own life. Nobody else is going to do that for you. They will even have difficulty understanding that an annoyed programmer is a much slower programmer, naturally and for good reason. It's hard to put something in production when you can't get past development.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Martin_Fowler_(software_engineer)"&gt;Martin Fowler&lt;/a&gt;, a famous and respected British author who writes the best descriptions of ideas in software development, while offering the sanest opinions, went through the trouble of cataloguing and describing the various refactorings, in his famous 1999 book &lt;em&gt;Refactoring&lt;/em&gt;. He is also one of the first signataries of the Agile Manifesto.&lt;/p&gt;
&lt;p&gt;Why would he write &lt;em&gt;Refactoring&lt;/em&gt; if technical debt were not important enough to fix???&lt;/p&gt;
&lt;p&gt;Oh, and &lt;a href="https://martinfowler.com/bliki/TechnicalDebt.html"&gt;here&lt;/a&gt; is his description of technical debt.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Robert_C._Martin"&gt;Robert C. Martin&lt;/a&gt;, a very important author whose name you also find under the Agile Manifesto, is sort of saying the same thing, when he says, &lt;em&gt;the only way to go fast, is to go well&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;A large application cannot be built without lots of discipline. A mature programmer knows this and takes pride in the discipline, just like a practitioner of martial arts or a musician.&lt;/p&gt;
&lt;p&gt;Robert C. Martin, in fact, goes beyond the XP rule. He notices that people are about to start dying due to badly written software, or maybe already are dying. So he says, when the thing works, do not stop and deliver it. When the thing works, you are only half done. Now you have to clean it up. Remove all the technical debt, make it easy for other programmers to understand. Make it easy even for you yourself to understand it after 2 months! Remove the useless tests, finish writing the good ones. Refactor the spaghetti, rename the badly named functions. Treat your program like a poem.&lt;/p&gt;
&lt;p&gt;If the company places excessive pressure on developers, it is an engineer's duty to be firm and say no, especially if people's health is directly or indirectly at stake. This is the ultimate test of a true professional. You do know that "I was just following orders" does not convince. Show some character strength when your turn comes.&lt;/p&gt;
&lt;p&gt;If developers do not self-police in this way, people will die due to buggy programs, and then the legislators will legislate software development, and the result will be much worse. This is what Martin says, and it's hard to disagree.&lt;/p&gt;
&lt;p&gt;As a developer, do love your users, but love yourself first. You can't be of use to your users, or the company, or your family, if your software becomes unmaintainable.&lt;/p&gt;
&lt;p&gt;In other words, no matter how much you love your user, you can't be used by him all day long!&lt;/p&gt;
&lt;p&gt;When a musician gets popular, she often needs to put her foot down and say "no, only 2 shows a week maximum and that's final". Otherwise there's no time to hone her craft. These companies always want you for what you already know, but never want you to spend any time learning what you need to learn to stay relevant. It's up to you to draw the line.&lt;/p&gt;
&lt;p&gt;According to Woody Zuill, teams and managers should &lt;a href="https://youtu.be/Jtt7PAejrFA?si=FHht24uOJ73sN_cJ&amp;amp;t=1844"&gt;spend the time to make the work easy to do&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Allen Holub has a &lt;a href="https://holub.com/heuristics/"&gt;heuristics page in which he briefly explains agile in his own words&lt;/a&gt;. At the time I am writing, number 15 reads: "Quality is not negotiable. (This rule applies to all aspects of quality, not just testing.)"&lt;/p&gt;
&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;When bad managers use Scrum against developers and basic development needs, that is in fact against Agile principles.&lt;/p&gt;
&lt;p&gt;A solution for our woes will be found in a proper implementation of Agile ideas – not in mistakenly escaping those ideas as if something better existed out there.&lt;/p&gt;
&lt;p&gt;Mind the gurus you choose. Digital influencers can be entertaining and arouse emotions, but &lt;a href="https://www.youtube.com/watch?v=kn59Yn55Pos"&gt;some of their advice is terribly misguided&lt;/a&gt;. To them, all the names in this article are preferable.&lt;/p&gt;</description><category>agile</category><category>computing</category><category>programming</category><guid>https://read.nando.audio/posts/agile.html</guid><pubDate>Sun, 07 Jul 2024 12:00:00 GMT</pubDate></item></channel></rss>