If you want to sound really cool in a technology meeting just use the phrase, “anti-pattern” in a sentence. Any modern agile wielding developer will instantly give you attention. There I am revealing a secret to you, like a hypnotic device you can use when working with really smart people. Just say something like, you thing there are any identifiable anti-patterns in our customers process that we can identify? Yup, instant credibility. They will be putty in your hands. So what is an anti-pattern anyway, and why do I bring it up? An anti-pattern is a common thing that people will do to fix an issue, but then actually make everything worse. It is intended to resolve a current problem, but instead, introduces a larger scale issue which slows down your project as a whole. This phrase is commonly used in the software industry, as taking short cuts is a vice that propeller heads seem to be born with, myself included.
A technical wiz would rather spend 8 hours working on how to automate a 5 minute work effort. What they could just get up and do, they will think of how they can automate the process, make it simpler and create intelligence behind it so that they never have to do the 5 minute work effort again. That is what make it fun, and in theory this is a good idea. However, and this is a big issue, when the technical wiz takes 8 hours and builds a process to solve that 5 minute task that actually complicates matters and create more work in the long term than the 5 minute time savings. Gravitation toward complexity is the nature of things it seems, especially when smart people are involved.
However, if you really dive in and start to learn about the type of anti-patterns that exist in the software development life cycle you will discover that many of the big ones apply to our own chaotic and hectic lives! Here are some samples to consider:
Miscommunication – Lack of clear communication between two parties is the chief reason that software projects fail. The anti-pattern is verbal or implied communication that does not make it into the requirements. The solution? Document your communication with others clearly.
Missing Requirements – Another problem that creeps up is that people tend to bypass or be very vague about their requirements, because they do not take the time to identify them clearly. This is a step to conveniently bypass, but always causes problems. The solution? Spend time on clearly identifying requirements, and do not skip that part of your process.
Focusing on the Wrong Thing – When people start working on a lot of things, the get busy and as a consequence start prioritizing the less important tasks. This happens when people get stressed. Happens to programmer’s and any one else. The solution is to establish and set priorities, so that when things inevitably get stressful you can remove the guess work and just focus on the highest priority first. In software circles, classifying backlog is critical, in regular life targeting what is really important to you is just as important.
Premature Optimization – When a programmer first engages in a project there is a tendancy to get real excited about optimizing things. However if done prematurely you can waste a lot of time optimizing things that will produce little efficiency and just waste time. This occurs in everyday life as well. We get excited, spend a ton of time planning the perfect system and then do nothing. The solution is to recognize when you are doing this and stop yourself from investing too much time until after you have engaged with something for more than 100 days. Go buy the new tennis racket after you actually have played tennis for awhile!
Bikeshredding – Getting into fights or making a fuss about inconsequential or trivial things is something every nerd is prone to. However, they do not have a monopoly on this practice, we all do it. So next time you pick a fight, ask yourself if is it worth it.
I could probably think many more, perhaps you can as well. What are the anti patterns that we allow ourselves to fall into?
Guy Reams