Public toilet model of maintaining a codebase

I find that it's useful to think about software projects as restrooms. Surprisingly a lot of aspects of software development fit well in this analogy.

We have toilets (codebases) to serve our needs. We don't particularly value them for what they are, other than as much as they are useful to us. We have rules and rituals around sharing them, and so on.

But let me just tell you something important about restroom maintenance.

Everyone used a toilet before. You have a need, you go to the toilet and you do what you need to do. Most of the time it's rather uneventful, but some other times you are not very careful, or just in a rush, or a bit sick, and... you know... some mess is generated. Not a big mess, at least usually, but still a mess. Especially if you have rather inexperienced or careless toilet users like kids. And mess adds up.

There's a big difference between private and public restrooms. When a restroom is private (like a personal open-source project), the owner of it is attentive to its state, feels responsible for it, and even if it's a bit of a mess, at least they don't feel completely disgusted by it. That's not the case with public restrooms. Public restrooms state is affected greatly by social dynamics.

If you are in a fancy restaurant, and you go to the restroom and you find it is spotlessly clean, all shiny, and smelling nice... you don't want to be the person that left it messy. Since it's nice and smells good, you find using it is quite pleasant: you don't rush, you take your time, go slow, and in case of any minor accidents you're just going to clean after yourself. And most people will do the same. A restroom like that tends to stay reasonably clean. Once in a while, someone will do a lightweight routine cleanup and that's about it.

In contrast, if you ever enter a toilet that is already not clean, you don't feel compelled to take care of it all that much. I mean – it is already kind of a mess, so someone will have to clean it anyway, right? If it's in a bad state, it might even be hard not to make a bigger mess. You might need to avoid touching some stuff, or be in an inconvenient position, which might make things... difficult. Cleaning up after yourself is a drag. Is it your mess, or are you cleaning someone else's mess already? Bleh. Better wash your hands and leave as soon as you can. You're just glad you're not the one that will have to eventually clean it, haha.

And if the restroom you visit is in a really bad state already... the mess tends to escalate to epic proportions quite fast. And then there's no way going back to spotless clean, ever. It will probably require a complete remodel, to get some of that... whatever it is... off the wall.

The thing with public restrooms and software project codebases is – the cheapest, easiest and fastest way to take care of them is to keep them clean at all times. And no matter what you need to have someone designated and responsible for making sure that's the case.