Does this sound familiar? The deadline is approaching and in order to avoid unpleasant explanations, code review is abandoned. An urgent bug is solved with a one-liner instead of refactoring the class in order to get back to an exciting new project as soon as possible. A small new feature is implemented without unit testing in order to bring it into the next release for the colleague who so kindly asked for it, despite the full pipeline. Naming conventions can sometimes fall by the wayside because the rest of the team doesn’t always take it so seriously. These are typical examples from everyday life that you have probably encountered yourself and in your team’s environment. In these situations, a short-term advantage is gained by foregoing a necessary measure. But is this free of repercussions? Certainly not. If you forego code review and unit testing, you run the risk of producing the next bug for the backlog, which, due to its priority, could trigger the next foregoing of this kind and set a spiral in motion. Those who forego conventions drive the growth of complexity, which fosters new errors and ensures longer development cycles in the future. In the vast majority of cases, this is a pretty bad trade-off. The costs we pay downstream for a short-term benefit outweigh its positives. Anyone who develops software in this way, without discipline and without rules such as conventions and the clean code principle, will get into big trouble in the long-term when it comes to maintaining and further developing their software product.
When it comes down to business competition, you will run great risks. So why do we do this? Well, the short answer is: because we are human. Especially in situations where we experience stress, we tend not to even question the cost of short-term solutions in order to escape the actual situation. This is a primal human reaction; our brain wants to protect us from even more danger, i.e. even more stress. Sometimes it is simply the need to have fun at work because development on a greenfield project is more fun than the refactoring of a complex, outdated class. In other cases, we simply don’t see the point in doing something better because it is not appreciated or even trampled on in our environment.
Implementing rules consistently with discipline
The answer to this dilemma is discipline. This is the ability to consistently implement rules that you have imposed on yourself or your team and to withstand the adversity and temptations that come your way. Discipline is not a talent that you either have or don’t have, but more of a character trait that you can work on to improve your long-term professional success. So let’s take a look at what you can do about it.
Strengthen your awareness of discipline
Many violations of our own rules happen unconsciously during periods of stress or other emotionally charged situations in everyday life. To improve your discipline, it is important to recognize such moments in the first place. It happens unconsciously; it will not be possible to decide to change by saying to yourself “From today I will be more disciplined”. Instead, you should raise your general awareness of discipline. You can do this by regularly reminding yourself of the importance of discipline. You can do this, for example, by using small disruptors, such as a sticky note that says “No Compromise” on the side of your screen, to keep reminding yourself of this concern. You can also regularly reflect on your discipline by reviewing your work at the end of the day and assessing whether you were sufficiently disciplined in your approach. Yes, admittedly, this sounds a bit exhausting, but the good news is that the longer you practice discipline, the easier it will become.
Mercenary or creator? Do it for yourself first and foremost
If you recognize this kind of situation and make a conscious decision about whether to run the extra mile, it isn’t a given that you will do so. After all, why would you do it at all? It’s more strenuous, takes longer, and is less fun. What do you get out of it now? Admittedly, not everyone sees any sense in it, because for some developers work is an exchange of time for money and it is naturally in their interest to keep effort at the lowest possible level. If you count yourself in this group and don’t want to change anything, you can stop reading now. On the other hand, if you pursue goals in your professional life and cultivate certain expectations of your performance, that’s exactly what will give you the boost you need to go the extra mile in strenuous situations. Make the effort to meet your own standards first and foremost and consequently, you will be satisfied with yourself at the end of the day. This has the great advantage that it makes you independent of external factors such as money and feedback, and makes you more resistant to unjustified criticism. In practice, this means that you always stick to unit testing, insist on a code review, and regularly reject short-term requests because you know that you will not be able to meet the demands that are so important for long-term success. If you have a concrete goal, it will be much easier for you to endure stressful situations and the emotions that go along with them, because you know that these challenges will bring you closer to your goal in the long run. Pain is much easier to endure when you remember the goal you are working towards. Such goals could include becoming the market leader of your product, achieving a leadership position, or achieving maximum customer satisfaction in your product’s ratings.
Avoid communication misunderstandings
Of course, such demands are not pure idealism, which only serves your personal satisfaction. In the long run, they will always benefit your employer in the form of high software quality, extensibility, and maintainability of your products. But do they appreciate it at all? This is precisely what is lacking in many cases because by their very nature, people who don’t develop software aren’t aware of these relationships. If you reject a short-term feature request, the assumption will often be that this is done out of convenience, but few will keep in mind that you are rejecting this because you see it as jeopardizing the company’s long-term goals with regard to your products. For this reason, we have a duty to compensate for information gaps through continuous communication. Your clients must be aware of the goals and principles behind your decisions and what the consequences would be if you were to decide differently. This applies to cases when such a decision is made, but it should also be discussed regularly beyond that because communication is so important for mutual understanding and must be maintained continuously. The more transparently decisions are made, the lower the risk of negative criticism or anger in interpersonal relationships. Communication becomes especially tangible when you back it up with negative case studies from the past. Often enough, negative consequences such as a new bug, a major refactoring, or worse, occurred due to rule waivers. This is also reflected in customer satisfaction. It is precisely from these situations that everyone can learn for the future.
Discipline works best in a team
Maybe it’s already dawning on you: If you want to implement rules and principles in a disciplined manner and don’t want to work completely on your own, you will always be dependent on the cooperation of your colleagues, at least in the long term. It will make you very unhappy if you are not appreciated for your commitment and have to justify your disciplined approach over and over again. If you find yourself in such a situation, you can try to create common values by talking and discussing with your team, which will give you the necessary environment for a disciplined approach. Admittedly, this is not an easy task, but it is always worth a try. It’s possible that you’re not alone in your opinion and that someone else sees it the same way, but hasn’t addressed it yet. However, if this doesn’t lead to success, your only option is to think about changing your employer in order to be able to act sustainably according to your own values and principles. After all, the following always applies: working time is also living time. If you make this choice, take enough time to check that your potential new employer can also meet this requirement.
Rules are as important in software development as they are in soccer. To violate them at times is human, but to violate them regularly will end in failure. If you know what the pain that often comes with following the rules is for, then you have found the best antidote. On top of that, they can be alleviated by being transparent with your team, superiors, and customers about your intentions behind the rules. It works best when everyone is committed to following the same rules with the same discipline.
More discipline in software development
- Regularly raise awareness of compliance and violations of rules
- Create overarching visions and set goals that give meaning to discipline
- Openly communicate the meaning behind the rules to avoid misunderstandings
- Learn discipline together as a team