Have you even had a child put on their grumpy face, cross their arms and say something along the lines of “you don’t even love me”? Maybe you said no to them having more candy or insisted they need to do their homework before they can play video games or any of the millions of things that might upset a child.
The reality of course is that you do love them. In fact, it is precisely because you love them that you are try to keep them healthy and make sure they are learning the things they need to know to be successful in life. They want something now, but you are looking at the bigger picture and you know that there is something better to be gained by giving up the immediate want.
Sometimes being customer focused can be like this.
Don’t get me wrong, I think the customer is ultimately the one who dictates the value of your software. If they don’t use it and find it valuable you aren’t really making good quality software, regardless of how well you’ve met the specifications. But sometimes customers ask for things and for you to be really customer focused you have to say no. Much like the parent who sees the bigger picture, you know things that your customers don’t. You know the cyclomatic complexity of your code. You know the state of your build system. You know the risks that are there due to lack of test coverage.
Your customers don’t really care about that. They just want the candy now, but you know what that candy will do to the health of your code. You know that you need to take that code to the gym and get a personal trainer to yell at it for a while first. Or maybe it’s even worse than that. Maybe you need to call an ambulance and perform an emergency procedure.
Ok I’ll stop with the metaphors now, but the reality is that sometimes investing in underlying code quality issues is caring for the customer. Sometimes slowing down a bit to clean up your processes is required to allow you move more quickly in the future.
There is a balance here of course. The point still is to be customer focused and so you need to consider how healthy your code needs to be to meet those needs. The goal isn’t have code with a six pack, rippling abs and a pearly white smile (sorry the metaphor is too fun – I had to come back to it). The goal is to have code that is healthy enough to consistently deliver customer value.
As with your health, it’s a lot easier to do this if you make it a part of your regular routine. It is a lot easier to stay healthy than it is to get healthy. Keep your code fit. Focus on the customer and make sure your code is able to help you do that. And the next time your customer asks ‘do you even love me?’ you can assure them that you do. You are doing everything you can to have your code be around to help them out for as long as they need it. And if they’re patient, they might even get a lollipop.