Casper’s (yes, that's me) first law of enterprise states that:
No one has time to tell you how to do your job. Everyone will make time to tell you how you’ve done your job wrong.
We’re born into this world with a very innate sense of when things are wrong. “What do you mean I have to breathe my own air?!” is quickly followed by much screaming in protest at this sense of wrongness. It’s the first in a line of protests that will extend long into your working career.
If you ask people to tell you how something should be done, you’ll often get vague and half baked answers. The only way to be able to provide a complete answer is to have already solved the problem, and how many times do you have the luxury of asking the advice of someone who has had first hand experience of exactly the problem you are trying to solve? In my experience, such mentors are few and far between.
Yet if you ask someone to tell you if something was done wrong, they will have no trouble pointing to the many and various flaws in your implementation. I don’t like the border applied to this button. Where is the unit test for this function? Why does the application force me to click through this dialog when all I want to do is [x]? This documentation makes no sense.
People have a very immediate and visceral reaction to wrongness. Next time you have the opportunity to critique someone else's work, take a moment to observe just how natural and subconscious your perception of wrongness is.
The disparity between the significant amount of effort it takes to create something, and the effortlessness of the criticisms that are then leveled at that creation, is a point of contention for developers. To have spent weeks developing a beautiful API, designing a redundant and scalable infrastructure and validating the whole system with comprehensive unit, integration and security tests only to have that guy from marketing criticise the choice of fonts displayed in the UI after using the application for 30 seconds is incredibly irritating.
Unfortunately one of the reasons why it is so irritating is because it is probably true. In fact, a lack of appreciation for just how much work it took to get to the point of even displaying a UI is what makes the wrongness of the font selection so apparent.
One of the hardest aspects of my career as a software developer has been to accept Casper’s first law of the enterprise, and find ways to embrace it.
Minimum viable products (MVPs) provide an excellent way to capitalize on people’s effortless ability to identify wrongness. I don’t feel so bad about people ripping my project to shreds if my only goal was to create a MVP that I could put up for review.
As a side note, I’m sure this mental trick is actually a recognised physiological phenomenon, but I have never found it described anywhere. If you know what this phenomenon is called, please leave a comment.
Finally, I’m slowing coming to realise that the only person invested in the notion of my being an infallible, god like developer is me, and that investment is only bringing me misery. As I work on increasingly complex projects, I am inevitably exposed to more people who will always be able to effortlessly call out something that I did wrong. Accepting this truth means that I can spend less time worrying about how those criticisms undermine my perception myself as a developer, and get on with the more enjoyable task of conquering the world one line of code at a time.
Accepting and embracing criticism is not easy, but ultimately any environment that does will produce better results faster. But it is as much a personal transformation as it is a corporate culture shift.
So the next time someone rips into your creation, visualise them as a mindless robot flailing their arms about saying “danger, danger”, don’t let it undermine the good work you know you did, and accept that you’ll never be free of criticism, so you might as well take it on board and use it to ensure that your next creation is just that little bit better.