Moxie Marlinspike: Agile is killing software innovation
Moxie Marlinspike criticized Agile development for stifling software innovation, claiming it limits developers' understanding of technologies and may increase failure rates in projects by isolating teams.
Read original articleMoxie Marlinspike, a prominent figure in information security, criticized Agile development during his talk at Black Hat, claiming it hampers software innovation. He argued that the focus on rapid development and abstraction has led to a lack of understanding among developers about the underlying technologies they work with. Marlinspike emphasized that this "black box" approach confines engineers, preventing them from leveraging their expertise to innovate. He noted that programming education has shifted towards high-level languages, neglecting essential low-level skills that provide context for understanding complex systems. Marlinspike suggested that security researchers, who delve into the intricacies of software, possess a deeper understanding of technology than many developers. He likened this knowledge to a form of "wizardry," where understanding the fundamentals can empower individuals to create meaningful advancements in software. The discussion highlighted a growing concern that the Agile methodology, while designed to enhance flexibility and speed, may inadvertently contribute to higher failure rates in software projects by isolating teams and limiting their visibility into the broader development landscape.
- Moxie Marlinspike argues Agile development stifles software innovation.
- He claims developers lack understanding of underlying technologies due to abstraction layers.
- Programming education has shifted focus away from low-level languages.
- Security researchers may have a better grasp of software fundamentals than developers.
- The Agile methodology may lead to higher failure rates in software projects.
Related
Don't Let Architecture Astronauts Scare You
Joel Spolsky critiques "Architecture Astronauts" for prioritizing high-level abstractions over practical software solutions, urging developers to focus on user needs and tangible outcomes rather than complex architectural concepts.
Scrum is the Symptom, not the Problem
Adam Ard critiques Scrum as a micro-management tool that undermines developer productivity, arguing that corporate processes prioritize control over empowerment, necessitating engineers to seek ownership or freelance opportunities for true change.
Signal Developer Explains Why Early Encrypted Messaging Tools Flopped
Moxie Marlinspike discussed the failures of early encrypted messaging tools at Black Hat 2024, emphasizing the need for user-friendly design and managing complexity in software development, while expressing optimism about AI's potential.
We have this idea in modern management theory that responsibility and decision making must travel up the corporate hierarchy. That execs are best positioned to make product level decisions. Or decisions of any kind. And peons at the bottom - the “individual contributors” who do all the programming must know the least about the product.
But that’s completely backwards. The people on the ground in any organisation know the most about what’s really going on. If we disempower them, and try to turn software engineering into an assembly line process (jira tickets go in, code comes out) then of course programmers stop innovating. They’re explicitly, and intentionally distanced from their capacity to improve the product in creative ways.
To be clear, I also don’t think the answer is to pretend we’re all equal and have an entirely flat management hierarchy. Different people have different skills, and a healthy organisation needs lots of talents to thrive. But there’s lots of ways to do that which don’t disempower the people on the ground.
The book Reinventing Organisations is a gem of a book. It totally blew my mind on this stuff. It talks about all sorts of different ways that innovative companies have upended their corporate structures, and along the way have been able to get the best from their people. If / when I start a company, I’m tempted to make it required reading.
But I'm not convinced that Agile is really to blame for the compartmentalization of knowledge and down-skilling of software engineering, as it has happened in every other industry too. It seems like a tendency of mass production. Car companies may be founded by small teams of master generalist mechanics, but they end up employing hundreds of thousands of ordinary technicians who know only what they need to know. Same for furniture factories and carpenters. Why not for software too?
My issue with them, though, is one that I don't usually see spelled out very often. All three promise, whether directly or implied, freedoms and responsibility being pushed further down the org chart. In reality all three are implemented in a way that further centralizes control towards the top of the org, leaving independent contributors at the bottom feeling almost entirely powerless.
I've always wanted to see a company flip OKRs on their head. Every employee should define key results for their little corner of the company. Managers should be responsible for taking those as fact and working to build a direction for the team that aligns as many of those results as possible. By the time you get to the top you have leadership setting the company's direction based on what the employees know to be most important rather than leadership seeming to energy on a hilltop to force key results down on everyone else.
Bottom up, not top down. Hire well, train well, and trust your people. It could fail spectacularly but at least your people would be respected and enjoy the ride, and we'd all learn something about the pros and cons of running a company without a dictatorship.
This has been my general experience with agile as practiced at three different outfits.
Here's a theory on why (some form of) Agile is problematic: Subdividing work into smaller parts is typically beneficial. However, in computer programming, this approach often fails because even the smaller tasks require some creativity, and unexpected challenges are likely to arise.
The person who did the subdividing gains a lot of insight while breaking down the larger problem. However, when transferring a portion of the work to a developer, much of this knowledge is inherently lost. The developer must then devise a creative solution, and lacking the necessary information, may either come up with a suboptimal solution or need further communication with the original architect.
There is no clear-cut solution. Some might argue for more experienced developers who have all the necessary knowledge readily available in their heads. Others might advocate for better design diagrams and documentation to capture all the relevant information. Ultimately, it requires careful consideration, or luck, to strike the right balance. But the dogmas of Agile certainly aren't helping much.
How to tell you’ve been in an industry for more than 20 years.
Spend time around excited young programmers, and you’ll find the magic is still there. It’s just different than it was 20 years ago. I remember the people with 20 years of experience back then telling me how awful everything was, but I was having way too much fun making things to give them much attention.
Value:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
Principles:
1. Customer satisfaction by early and continuous delivery of valuable software.
2. Welcome changing requirements, even in late development.
3. Deliver working software frequently (weeks rather than months).
4. Close, daily cooperation between business people and developers.
5. Projects are built around motivated individuals, who should be trusted.
6. Face-to-face conversation is the best form of communication (co-location).
7. Working software is the primary measure of progress.
8. Sustainable development, able to maintain a constant pace.
9. Continuous attention to technical excellence and good design.
10. Simplicity—the art of maximizing the amount of work not done—is essential.
11. Best architectures, requirements, and designs emerge from self-organizing teams.
12. Regularly, the team reflects on how to become more effective, and adjusts accordingly.
https://en.m.wikipedia.org/wiki/Agile_software_development
For most of the critics, I would say "become more Agile" as a solution.
Not to mention the now capital-A Agile practices, courses, certifications(!!) and processes (!!?!?) which end up being exactly against the spirit of the original manifesto.
SCRUM isn't agile, it's SCRUM. Kanban isn't agile, it's Kanban. Doing something that has lots of process but that isn't waterfall isn't agile just because it isn't waterfall - it's a thing with lots of process.
Agile is about responding to the context of the team and the customer. You probably need a way to keep track of what needs to be done, and have regular updates about blockers and progress, but that's it.
The problem is if you ask people who have never been software engineers to manage a software engineering project, they're going to struggle to communicate, because they have no natural intuition of what the hell is going on. The project management industry is quite happy to serve these people by inventing big complex processes to keep them busy and sell them books, courses, certifications and conferences.
Most of big tech won't allow someone to manage an engineering team or project manage those projects without a good amount of hands-on engineering experience. The rest of industry needs to pick up on this.
People without that experience can learn. But they should adapt to software being what software is, not try and bring processes derived from those invented for other domains to software.
Agile done well is absolutely amazing, when its in the hands of teams who have all built software, understand their customer problem and the milestones they need to hit (yes, deadlines are unavoidable in any modern business environment, sorry), and each other.
Trust me, I remember when waterfall was the way. Waterfall is so bad, that even when you do 2-week long waterfall sprints (waves at SCRUM), it feels awful.
Go back to the Agile Manifesto [1]. It's all you need. Keep track of what was decided or discovered (bugs, features that are needed, and so on). If you have regular bottlenecks due to skill/knowledge imbalances, steal pairing from XP. Maybe explore Theory of Constraints but resist Kanban unless you understand exactly what it is doing and why. Have regular conversations as a group, and one-on-ones, not just between managers and reports, but between each other. Hold short but regular retros to understand systemic issues and then make sure the actions are actioned.
It's not that hard. It's just Agile.
Great article. If only we could make the people holding the bags of money understand...
The smaller software is, the less it needs to be designed by committee.
I get that this isn't ALWAYS doable. And that when you're designing things for end users that are allergic to reading any documentation, in-line or otherwise, it's an uphill battle. But it's an ideal to strive toward where possible to avoid monstrosities like systemd and pulseaudio.
Some of the best code is the code written by one person.
Want to stay creative as a programmer, be a lone wolf... Do what you like and whenever you like, follow the creative spark...
Closing and locking thousands of Signal issues automatically and locking all conversations for "spring cleaning"...
... which feels exactly like something somebody oversubscribed to agile methods in the wrong way would do.
We might not have killed software engineering as much as we are exhausting the list of things that very smart programmers will just figure out on their own.
Related
Don't Let Architecture Astronauts Scare You
Joel Spolsky critiques "Architecture Astronauts" for prioritizing high-level abstractions over practical software solutions, urging developers to focus on user needs and tangible outcomes rather than complex architectural concepts.
Scrum is the Symptom, not the Problem
Adam Ard critiques Scrum as a micro-management tool that undermines developer productivity, arguing that corporate processes prioritize control over empowerment, necessitating engineers to seek ownership or freelance opportunities for true change.
Signal Developer Explains Why Early Encrypted Messaging Tools Flopped
Moxie Marlinspike discussed the failures of early encrypted messaging tools at Black Hat 2024, emphasizing the need for user-friendly design and managing complexity in software development, while expressing optimism about AI's potential.