RSSAmplifier

Blog

Sander Hoogendoorn

Articles on agile, software architecture, microservices, and the craft of writing code.

sanderhoogendoorn.comRSS feed ↗165 posts

Latest posts

From Excel to AI: we've been here before

It is 2026. Everybody is building software — no developers required, just describe what you want and the AI builds it. I have seen this before. Twice, actually.

Why Living on Six-Month Branches Is Not a Viable Strategy

A LinkedIn post about someone nearly losing six months of work on a single local branch is not a story about bad luck. It's a story about bad practice — and why trunk-based development is the fix.

The True Magic of Refactoring Club

Refactoring isn't a favor you ask permission for. It's the first rule of Refactoring Club: you don't talk about it, you just do it — before the small stuff quietly becomes technical death.

A tale of starting on time and arriving too late

A sleeper bus and a slowboat through Laos both left exactly on schedule and both arrived hours late. Sound familiar? A travel story about why software projects never really have a fixed arrival time.

A tale about dumping kerosene and building the right things right

Measuring developer productivity by counting commits works about as well as measuring air base activity by counting kerosene use — it just teaches people to dump kerosene. What DORA gets right, and what comes after it plateaus.

How to survive as a developer in the exponential age of AI and vibe coding

A student asked whether it's still worthwhile to become a software developer in 2025. The answer runs through thirty years of AI hype cycles, the Gartner Hype Curve, and forty years of layering abstractions on top of abstractions.

The sense and nonsense of pull requests

A LinkedIn post questioning pull requests racked up 350,000 views and a bonfire of discussion. Pull requests make sense when you don't trust the code coming in — but trust, not process, is the real variable.

Why we suck at estimation

Yesterday it happened again. On my Twitter timeline. Someone angrily posted “developers should finally learn how to estimate better.” Another case of work not being done at the end of a sprint. Or worse, another project that didn’t make its deadlines. There isn’t a single developer out there who hasn’t run into similar experiences. After another deadline is not met, […]

Dear agile coaches, we're not life coaches, are we?

The Agile Manifesto was written by techies who wanted to improve software development. So why do so many self-proclaimed agile coaches, with no software background, end up drifting into life and business coaching?

A glimmer of hope

In September 2003 I visited the friendly city of Arhus in Denmark to deliver a talk at the JAOO conference. At that time, JAOO was an established software development conference, with well-known speakers such as Martin Fowler, Kent Beck, Linda Rising, and Erich Gamma. And me. When I arrived at the venue, one of the organizers offered to give me […]

Stoppen met projecten. Waarom metaforen uit bouw en fabrieken niet passen in de IT

Software development leent zijn terminologie van de bouw en de fabriek — architectuur, bouwen, de lopende band. Maar die metaforen kloppen niet, en het wordt tijd voor een eigen metafoor: die van het laten evolueren van een product.

The product owner: the single-person bottleneck

When organizations map their traditional roles onto Scrum, the product owner slot usually gets filled by a former project manager or analyst — and quietly becomes the single-person bottleneck the team was supposed to get rid of.

The left-handed project manager

A job ad for an 'agile project manager' who's also not afraid of running PRINCE2 projects. At that point you might as well be hiring for a vegan project manager, or a left-handed one.

Features en kwaliteit

Stel. Je wordt wakker met een goed idee. Je pakt je laptop en begint te programmeren in de taal die je het beste ligt. Visual Basic for Applications. PHP. Javascript. Niet heel veel later is je applicatie klaar. Je toont de applicatie aan een vriend wiens probleem ermee is opgelost. Je eerste tevreden klant is binnen. Vervolgens geef je her […]

Monoliths, microservices and boiling frogs

Microservices is a hot topic. There is a plethora of opinions, conference talks and blog posts about microservices. I started doing microservices myself three-and-a-half years ago, when I was designing a system for an insurance company. Since then I have done many talks on the topic, published articles and presented training courses. Usually, I ask my attendees if they have […]

Verplicht leuk doen

Verplicht leuk doen Enkele maanden geleden had een goede vriend een kennismakingsgesprek bij een gerenommeerde webwinkel. Het grotendeels blauw ingerichte kantoorpand viel op. Vrijwel alles was gelabeld. De koelkast, de snoepautomaat, de koffieautomaat. Als een aanleunflat van een Alzheimer-patient. Maar er was meer. Alle labels werden ook nog eens begeleid door kwieke one-liners. Allemaal onder…

Agile beyond refinements

Even though the year is still young and still cold, I have already presented two training courses. One on microservices for a transportation company. And one on agile for teachers at a high school who want to adopt agile techniques to their classes. Although the topics were quite different, attendees at both courses had a similar background in doing agile: […]

Scrum volgens het boekje

Een organisatie die al zeven jaar Scrum doet belt voor een review, want ze zitten vast. Al zeven jaar Scrum doen is geen achievement — het is een signaal van niet meer evolueren.

Do. Or do not. There is no try. Well actually, there is.

One of the great things about being a programmer is that you never stop learning. Even after having programmed for almost 35 years, I still improve on the way I write code. About a year ago, the way I write code changed once again when I started to apply monads and especially the Try class. Do. Or do not. There […]

Yes, microservices implies a distributed system

In September 2016 I will do the closing keynote for SwanseaCon in Swansea, Wales. Although my talk will evaluate agile after twenty years, InfoQ interviewed me preceeding the conference on one of my other favorite topis, microservices. Here’s the answers to InfoQ’s questions. InfoQ: What are the biggest problems that organizations have with monolithic software products? Monolithical systems,…

Shooting hoops and why learning is non-linear

It’s April and the sun is slowly becoming more powerful, warming the people in the green and white deck chairs in Green Park in London. A few minutes ago, I took the tube to travel back to Heathrow Airport, and afterwards home. Next to me a man is playing a game on his mobile device. Despite feeling drowsy from the […]

Why the project metaphor doesn’t fit software development

In 2009 I hired a building contractor to build a house. Together with an architect and the contractor I worked out the features. We wanted a basement, we carefully picked the materials, the location of the windows, the placement of the rooms, the bathroom, the attic and everything the contractor needed to come up with a price and a delivery […]

What is agile architecture anyway? The red pill and the blue pill

Having coached many teams, projects and organizations on both software architecture and agile, one of the questions I’ve been asked a lot over the past fifteen years is: what is agile architecture? Unfortunately, there is no easy answer to this question. There is no simple truth out there. What agile architecture really is considered to be is different from organization […]

Microservices Q&A

In September I will run a masterclass on microservices at Luxoft in Moscow, Russia, see www.luxoft-training.ru/master-class/sander. In preparation of this masterclass, here’s a short Q & A on microservices. Is it worth applying microservices? Q: In your article Microservices. The Good, the Bad, and the Ugly you described different aspects of development. Readers may think that using a…

A programmer’s mind explained (to project managers)

Earlier last week I was trying to refactor around two thousands lines of code, optimistically being convinced that the component could offer the exact same functionality in less than two hundred lines. My refactoring was an intuitive step-by-step process that involved creativity and a lot of concentration. Happily working on my code I slowly got into the zone, a happy […]

Microservices. The good, the bad and the ugly

Back in 1988, when I was first employed by a company for writing software, the world was fairly simple. The development environment we had was character-based, the database was integrated and traversed with cursors, and we built a whole new administrative system covering everything but the kitchen sink. It took us five years to complete the project, basically because the […]

Jack Sparrow and the End of Scrum

If you, are working in technology, like me, there’s a chance that you live under the impression that our field changes faster than you can keep up with. Once you have learned how to work with the latest version of a technology of your choice – not even having mastered it – it will have evolved into a newer version, […]

So … Does agile improve productivity?

Over the past fifteen to twenty years I’ve been invited numerous times to help organization move from traditional to iterative and agile software development. Without exception whenever I have a first board room meeting at any organization, I start the conversation with the same questions: why do you want to move to agile? What is it you are trying to […]

Working software over proce$$es and fools

Agile hippies think all tools are evil. Scrumdamentalists follow the Scrum Guide like a bible. Agile suits just want to sell you an enterprise platform. In reality, there's no such thing as an agile tool.

Limit Tags to Labels

Recently we’ve introduced Tags for work items on www.speedbird9.com . You can add tags either from the menu when you create an item in Work Items | New, or from the Edit Work Item feature. Tags are replacing Labels because we’ve received many requests for allowing multiple Labels or Tags with work items, whereas it was only possible to add […]

Failing fast

There is an intriguing question that pops up frequently in organizations developing software in projects: when is a project successful? For sure, one of the most (mis)used resources on the subject is the Standish Group. In their frequently renewed CHAOS Report they define a project successful if it delivers on time, on budget, and with all planned features. For a […]

Setting due dates for work items on www.speedbird9.com

www.speedbird9.com is an free open online agile and Kanban board, that allows you to monitor the progress in your projects – whether they are IT projects or not. Many people have asked us to implement the notion of due dates for work items. And recently we have done so. You can now easily set the due date on the page […]

Burn-down or burn-out

One of the key and often very much underestimated assets of working in agile teams, whether working on products or projects, is the idea of sustainable pace. In my view, sustainable pace targets at making sure that, even under time pressure, which is not rare in software development, the team remains it’s cool. For those of you who have been […]

Agile anti-patterns at CodeMotion Madrid

Many organizations turn towards agile to escape failing traditional software development. Due to this increase in popularity, many newcomers enter the field. Without the necessary real-life experience but proudly waving certificates from two days of training. During a challenging talk I did at the CodeMotion conference in Madrid, in October 2013, I tried to show what happens to projects that […]

Agile doesn’t deal with x

While writing this post, I am on an airplane to Helsinki. Nice sunny city. And lucky for me it is about 50 degrees Celsius warmer than the last time I visited it. In Helsinki I will have look at a couple of projects that use a distributed agile approach, but fail to deliver on-time and on-budget. When I get back […]

Offshore Agile Software Development: Does It Work?

Due to the ever-rising demand for seasoned software developers in the nineties, offshore software development became a compelling alternative to in-house development for many organizations. Despite the cultural, language and time differences and the geographical distance involved, more and more projects were executed with offshore development and testing, benefiting from lower rates of cost and…

The changing interpretation of agile

For as long as I can remember I have been evangelizing, promoting, practicing, coaching, and training agile. For me as a developer the goals for applying agile approaches and techniques are pretty clear. I want to make better software. Higher quality, better suited for use, and possibly also faster. And from my own empirical evidence I can certainly state agile […]

Validating sending mail messages in smart use case unit tests

When building applications with the Adf framework, smart use cases are implemented in task classes. Quite regularly mail messages are sent from tasks. To do so we use the MailManager class. Using this class mail messages are usually build up as in the following code example. To send mail messages, the MailManager plugs in an implementation of the IMailProvider interface. […]

Adding specific validation messages to value objects

One of the requests we often get in projects that use the Adf.Net framework is to be able to get specific validation messages, especially when during persisting panels to domain objects, properties that have value objects as their type fail to persist, usually during call such as below. protected void lbOpslaan_Click(object sender, EventArgs e) { BindManager.Persist(Persoonsgegevens,…

Reaching post-conditions in tasks

Implementing use cases in Adf.Net is covered by the task pattern. Each smart use case in the model is implemented as a descendant of the Task class in Adf.Net. The task pattern consists of three major parts: Starting the task, either using a parameterized Init() method, or the default Start() method. After a task calls another task, and this second […]

Agile business intelligence

Het besparen van kosten is een veelgenoemde aanleiding voor Business Intelligence (BI) projecten. Zo wilde een bekende overheidsinstantie weten hoe effectief de bestrijding van uitkeringsfraude was. Het onderzoeken van mogelijke fraude kost de instantie geld, maar het vinden van fraudeurs levert echter direct geld op. En dus ging zoekt de instantie naar de optimale verhouding tussen het aantallen…

The Waterfall Dentist Anti-Pattern

Believe it or not, but I have a confession to make. I’m currently in a pure waterfall project. It’s my first in many, many years and despite the fact that I love the technology, I don’t like our way or working it a bit. During the first phase of this project we are trying to deliver twenty functional work items. […]

Illustrating the Dit Is Agile book

This month I hope to round off the work on my new book Dit Is Agile (in Dutch). Last reviews are coming in, and I’m very happy with the results of my hand-drawn illustration for this new book. The idea of drawing the illustrations by hand instead of using PowerPoint or Visio is working out fine, and also allows me […]

What could the Dutch football learn from agile?

After a series of very disappointing games the Dutch national football team was eliminated during the preliminary rounds of the European Championships. Comments weren’t mild. The most heard comments largely focused on the lack of team spirit and mental fitness. Not uncommon to Dutch national football teams. Earlier this week an interesting broadcast of the Dutch sports program Studio Sport […]

Agile anti-patterns. Yes you agile projects can and will fail too

Over the years I have noticed a lot of agile anti-patterns during projects. Wrongly used agile approaches, dogmatic use of agile approaches, agile-in-name-only. Recently I have presented a talk at a number of agile and software development conferences that demonstrates patterns of agile misuse. These conferences include Agile Open Holland (Dieren), Camp Digital (Manchester), GIDS (Bangalore), ACCU…

How to kill your estimates

It must have been about twenty five years ago. I was working for a large international consultancy firm. One of the reliable ones. The ones that you would think that had everything worked out. But I guess this was merely the product of my imagination. At one time two colleagues and I were working on an estimate for a bid […]

Evolving agile

Without any doubt agile is the biggest evolution in software development approaches since the introduction of waterfall back in the early seventies. And yes. Agile is an evolution rather than a revolution. The best practices and techniques in agile didn’t just pop-up. Rather they emerged from years of hard-working, real-life experience in succeeding and failing in projects. So working in […]

A short notice about object relational mapping framework generated queries…

I guess object relational mapping is an accepted paradigm for exchanging data between an object oriented domain layer and underlying databases. For most applications object relational mapping is more than sufficient. And if not, perhaps command query responsibility segregation might contribute well to your solution. Being a more than frequent user, this very short blog post is not meant to […]

Het institutionaliseren van agile

Er is een anti-patroon op het gebied van agile dat me nauw aan het hart gaat. En dat is de institutionalisering van agile. In de afgelopen vijftien jaar heb ik met veel plezier en inzet organisaties en projecten gecoacht op weg om agile worden. In die vijftien jaar heb ik ongelooflijk veel geleerd, over software ontwikkeling, over programmeren, over processen, […]

Added GetOrDefault() extension methods for state providers

In the framework ADF.NET state can be temporarily stored by calling the StateManager. The StateManager is an static façade that holds three different instances of the IStateProvider interface. These instances are: Personal. State that is stored somewhere for personal use of the current user of the application. Usually in web applications an implementation is plugged in to use the Session […]