Have you ever developed software for a client that constantly seems frustrated with the software you’re developing; someone that is continuously complaining and berating you for every little thing that isn’t perfect or throwing their toys out the cot whenever something doesn’t go according to plan? At first glance you might think that this person is a perfectionist with high standards, which in some cases may even be true. However, in my experience there are two kinds of perfectionists. The first type is the hands-on craftsman who is incredibly hard on himself, constantly finding flaws in his own work and continuously striving to improve the quality of what they’re building. This person may also be hard on their subordinates, criticising their flaws and setting high standards for them to meet. The second type is the one who never gets involved in the details nor does he do any of the work himself, but easily finds flaws in other people’s work and proudly proclaims to be a perfectionist. If you ever do come across a piece of their work you quickly realise that it’s anything but perfect. In other words, this second type is fake perfectionist. A fake perfectionist is someone who has high standards/expectations of other people without having a clue of what it actually takes to achieve those standards or meet those expectations i.e. a spectator who expects to see a lot of goals for the money they’ve paid to watch the game, but never having played the game themselves. In this post I’m going to discuss why these people are the way they are and how to go about mitigating some of the issues encountered when dealing with them.
Designing and developing software products is like any other endeavour; it requires a high level of skills, a lot of planning, hard work and continuous problem solving for an endless list of problems that need to be solved along the way. The end goal cannot be reached overnight and therefore also requires a high level of resilience and patience. The people undertaking these endeavours also need to be paid for their efforts which requires huge amounts of money to sustain the endeavour. There are two kinds of people in every endeavour: the people who get it done and the people who pay to get it done in the hope of getting a return on their investment i.e. the pot of gold at the end of the rainbow. To use an analogy, you can think of these endeavours as climbing mountains. Lots of people want to get to the top of a mountain, but not many people do. The reasons for wanting to get to the top of the mountain is what differentiates the people who do versus the ones who don’t. Some people want to get to the summit for the glory i.e. to be able to say that they’ve done it. Others only want to get to the top to see what the view is like from above. Some might even believe that there’s a pot of gold at the top of the mountain and therefore feel the urge to go after it. Unfortunately most of these people will never reach the top of the mountain without assistance and the reason for is is that they’re focused on the end goal without understanding what it takes to achieve it i.e. they see the summit of the mountain without seeing the actual mountain they would have to climb. On the other hand there are those that do make it to the summit. The difference with those that do make it to the summit is their genuine love for mountain climbing i.e. they’re in love with the process not with the end goal. Being in love with the process is what gives them the motivation and resilience to keep going despite the pain and struggles which they have to endure i.e. they are mentally prepared to endure the pain because they enjoy the process.
Using the mountain climbing analogy, you can think of the software developers as the mountain climbers and the business people as the ones paying them to help them get to the summit. The developers are the ones who are in love with process and all its struggles and obstacles while the business people are the ones who only want to get to the summit for the pot of gold and the glory. I thoroughly believe that this divergence in their way of thinking and feeling is the root of all conflicts and failed products or projects. Imagine a rich businessman that pays a mountain climber to help him get them to the top of a mountain. The mountain climber lays out the plans in terms of the route they will take, the weather that can be expected on each day, as well the equipment and other resources that will be needed. Unfortunately, things don’t always go according to plan in the real world. The one reason being that there are millions of variables to think about and even the best and most experienced mountain climbers will not be able to foresee every single point of failure beforehand i.e. they’re human after all. The other reason being that many of the factors that influence the success of the expedition are often outside the control of the mountain climbers e.g. the weather conditions could change, the equipment could break, a team member could get hurt, or perhaps one or more of the team members are not fit enough thereby slowing down the entire crew. Experienced mountain climbers have learnt over the years that anything that can go wrong will go wrong, and although they may not foresee every single problem that could arise they are prepared to deal with it as it comes i.e. these unforeseen problems will not deter them from the mission because they are mentally prepared for it and more importantly they enjoy the process. The rich business people on the other hand will throw their toys out the cot every time something doesn’t go according to plan. They will think to themselves, “What am I doing here, on this godforsaken mountain with these idiot mountain climbers who don’t seem to know what they are doing. Why was this issue not foreseen and planned for? What am I paying these people for? Why is it so cold on this mountain? Why am I in so much pain and why this so difficult? It should be easy, that’s what I’m paying them for.” The mountain climbers try to explain the challenges that are being presented and how they plan on getting around them. Unfortunately the business people couldn’t care less about the nitty gritty details. The simplest explanation for the business people feeling frustrated and not being interested in the details is because they just don’t enjoy the process. In fact most business people hate the process but they all want to reach the summit where the pot of gold awaits. They are the same people that are the fake perfectionists, that will endlessly bitch and moan about every little issue or discomfort. They are also the same people that will act like petulant children asking you every five minutes, “are we there yet, are we there yet?” They simply see the climbing as a means to an end, until one day someone comes along and offers them the option to take them take up to the summit in a helicopter, without any of the struggles or issues … even if that means splitting the gold with the helicopter pilot. The same thing goes for software development or any engineering endeavour; most business people hate the process and couldn’t care less about the details. They’re only enduring the pain and struggles because they don’t have any other options i.e. they want a custom product developed that doesn’t already exist on the market and they want to own the IP (Intellectual Property). Along the journey they will act like fake perfectionists by constantly bitching and moaning at every step without offering any solutions. Fake perfectionists are people that disguise themselves as perfectionists when in fact they have an intolerance for the process.
- Negative consequences of working with/for fake perfectionists:
- For starters, these sort of people can make your life a living level by creating problems for you instead of making the journey to the top easier.
- Some of them might even look for imperfections in order to use them as excuses to not paying you for your work. For example if you’re billing the client on an hourly basis, these sort of tactics could include asking you to do bug fixing and ongoing support for free.
- The worst case scenario is where they get offered an off-the-shelf product by another company, that promises to do everything your software does and more without of the hassle and inconvenience i.e. where the business people no longer have to worry about any technical details. What the business people don’t realise in these cases is that the off-the-shelf product took years to develop by this other company and in order for that company to make their money back they will have to charge hefty license fees. In the long term those license fees can end up costing a lot more than the development costs of the custom software. Not to mention that your client will not own any of the IP of the off-the-shelf product.
- Ways to mitigate some of the negative consequences of working with fake perfectionists:
- As with everything in life, the best way of avoiding conflicts and misunderstandings is to manage expectations. You need to make it crystal clear to every client right from the start of the project/endeavour what they will be getting themselves into. You can even use this mountain climbing analogy with them right from the start. Explain to them that this will be a long and difficult journey with lots of obstacles and challenges. You should go on to explain that one of your main responsibilities in this journey is to plan it out with the goal of mitigating risk, which is in fact the main responsibility of any software/solutions architect. However, you should mention that there will always be unforeseen circumstances and uncontrollable events that could occur and then follow up with few examples from your previous projects. Your intention should be to set out achievable but realistic goals. After having set the right expectations, you need to lastly ask for 100% commitment from the client i.e. are we going to do this through thick and thin or are you going to bail out at the first obstacle?
- Before and throughout these projects you will find people having endless discussions and arguments about costing, timelines, deadlines and technical issues all in an effort to retain a client. However, you need to keep in mind that although you can have these back and forth discussions until the cows come home, they will have zero impact on whether or not your client enjoys the actual process of software development or not. It’s for this reason that you need to ensure that your process is an enjoyable one for the client. The simple rule of thumb for making a software development process enjoyable is to limit the number of surprises i.e. the less surprises there are the more enjoyable the process will be. This once again goes hand-in-hand with managing expectations.
- As corny as it may sound, the last point I want to mention is that ultimately it comes down to how your client feels about the process of software development. Notice I used the word “feels” instead of “thinks” deliberately and it’s important to make that distinction because you can have all the intellectual discussions you want, but unless your client is in love with the process you are never really going to have their full commitment. That means that you have to change the way they feel about the process on an emotional level. This is obviously an incredibly difficult task because not all people have a technical aptitude. Here are a few tips for getting your client to fall in love with the process:
- The best way do it is through enthusiasm and passion for your craft. If you’re oozing passion and enthusiasm for your work, it will rub off on your client, because enthusiasm is contagious.
- Keep your client in the loop at all times in terms of what you’re currently working on, how it’s going, what you’re struggling with, how long it’s going to take, new ideas and recommendations you have etc. It’s also important for you to be completely transparent about everything. Do not hide information from your client regardless of whether it’s good or bad. Software development is like any other activity; the more involved you are in something the more interested and enthusiastic you will be about it e.g. the more news articles you read about politics, the more interested you’ll be in politics even though you have minimal influence over what happens to your country. The same thing applies to watching a sport on TV; you’ll see people screaming and shouting at the TV because they want their team to score even though they have zero influence over it. You need to try and achieve the same thing with your client in terms of the software development process and you do that with constant feedback even if it means information overload for them. My preferred method of doing that is through email notifications sent out from my software as well as project management tools like Basecamp, Freedcamp and Microsoft Azure DevOps etc. I also make a point of ensuring that my clients have access to all the to-do lists, discussions, releases and the hundreds of email notifications from these tools. Some might say that email notifications and project management tools provide too much information for the client to process, but I beg to differ because you have to realise that ultimately you are competing for the client’s attention and attention to something equals interest which equals enthusiasm and a love for the process.