Software retainers
2024-04-06
In the data engineering consultancy I run with Joben, we engage our clients through postpaid retainers. We agree to work flexibly on client requirements in exchange for a monthly fee. I really like this model. I find that it greatly simplifies our engagements.
The alternatives
Joben's previous experience with software engagements was with fixed-price projects, where the shop and the client agree on a set price to pay for delivery of the project. The conventional wisdom around this now is that fixed-price for software is bad, but it's easy to think that it's good when the contracts haven't been inked. From what I hear, clients like fixed-price because they perceive a cap on their money out. That cap, regardless of it being a cap, might look high to the dev shop, so the dev shop bites. We're talking about some millions or maybe tens of millions of pesos. This isn't much to Western tech firms, but it looks like a payday to smaller Filipino shops.
It won't work, though. What effectively happens is that the dev shop assumes the entirety of the risk of software development, which is substantial. If fixed-price is combined with fixed-scope and fixed-time, the other two horsemen of project management, then the project will implode and take the finances of the dev shop with it. You simply cannot sanely fix both time and scope, that's not how software development works.
A somewhat better engagement model is variable price, where the shop charges the client based on "time and material" spent on the project. I say it's better because it at least respects the fundamental truth of software development, but it doesn't seem to work for us. Joben's experience is that the time and material model works well for regular shops with regular developers (relative to the local market), which we aren't. We work quickly, we only have a small team, and we try add a layer of indirection between our time and our income. Variable price would protect us from catastrophe, but we also want to do good work and be rewarded by our system for doing good work.
Retainers
Our professional retainer system is simple. We become available to work on your requirements in exchange for a predictable monthly fee.
I'm not going to claim this will work for all shops or for all clients, but this retainer system has some compelling advantages for our shop and our clients:
- My team is incentivized to do our best work. Since our income isn't directly bound to our time, we have no interest in wasting time. If you bring us a requirement, we find ourselves free to tackle it in the most sensible way possible, which usually involves some sort of automation and documentation.
- The retainer model lets us use the most effective software development methodology: quick iteration of full solutions. There's nothing that people love more than working software. Within the first few weeks of a new retainer, we can usually get a working, if a bit unpolished, system into production. We find that our clients understand what they want a lot more when they see something real in front of them.
- Our clients find that their money out is predictable. I've never had to hire a consultant or a professional myself, but I can empathize with the fear of a surprise bill because we deal with cloud servers. At a certain level of mental load, squeezing every last penny of value out of something is less important than the peace of mind of not being liable for an unplanned million-peso expense.
- Another interesting effect of this retainer system is that I've been exposed to the consequences of my own architectural decisions. Not a lot of consultants stay on a project long enough suffer and grow like this. I've developed a distaste for overly "elegant" architectures and technologies because of the times I've implemented them and had to fix my own mess a year later. My designs are grounded in maintainability and extensibility because I am the one who usually ends up maintaining them and extending them.
I recognize that there is still some level of trust and understanding required to engage with retainers effectively. Of course, both our shop and our clients need to feel that they're getting a great deal. That's why we usually include a clause that lets either party terminate the engagement for any reason with 30 days of advanced notice. It's based on my favorite idea from Covey's famous book on habits: we want every engagement to be a true win-win. If we can't achieve that, we shouldn't deal at all. It's a great way to do business.