If you’ve been in the IT industry for longer than a day and a half, you’ve probably had to compromise on something technical. Usually the story goes like this:
- The customer implementing a web-based remote access solution doesn’t want to put in two-factor authentication, despite the fact it’s been proven to be exponentially more secure than a username and password.
- The CIO decides that all user workstations will stay on Windows XP for at least another year, instead of migrating to Vista.
- The CEO knocks back the idea for a stand-by data centre in favour of a less optimal “back up and pray” routine.
- You work for a multi-billion dollar international company and you’ve had to cut out your number one and two features from your new virtualisation product in order to ship on time (I just had to add that one in. No hard feelings, Microsoft.).
It’s the old story - nobody seems to want to do anything properly. Can’t they just…
Woah. Hang on tiger. What does it mean to do something properly?
In the minds of most technical people, doing something properly means implementing every feature. Automating as much as possible. Installing on the best hardware. Configuring in the most secure way. For a developer, it can mean “release when it’s done”, like in the open source world. For a Systems Engineer, it can mean that a Standard Operating Environment machine builds itself, installs and configures every app, and migrates user settings automagically. Technical utopia. White marshmellow clouds, anyone?
The stunningly stark contrast to the technical mindset is the business side of the fence - dollars, and time. Can we leverage the 80/20 rule and cut some corners for most of the benefit? Will implementing this improve our profitability by reducing costs or increasing revenue? Are there other projects that will have a greater impact on the business?
The best path often lies somewhere in the middle, and this is where compromise comes in. As an advocate for whatever technical solution you’re trying to implement - whether you’re selling it to another company or to your own management - convincing the guy that makes the final decision to implement the “proper” solution won’t always happen. When you do compromise on a solution, the important part to know is not whether to compromise, but what parts you should compromise on.
So how should you go about it?
1. Make sure they know the risks
The first, and most important point to remember is this - make sure that those that make the decisions, know the risks. This goes for whether you’re working for an IT partner, internal IT, or development. Your role is to identify the risks so that the decisionmaker can make an educated decision.
For example, if you’re putting in a remote access solution, and the decisionmaker doesn’t want to spend money on two-factor authentication tokens, make sure that they understand that standard username and password authentication is susceptible to all sorts of security problems, whereas two-factor authentication is many times more secure. If they still don’t want two-factor authentication, that’s okay.
If they’ve accepted the risk of the compromise (bad pun unintentional) - that’s their decision to make. You’ve done your job by making sure that they’re aware of it, so they could make an educated decision.
2. Accept that there’s always a trade off
Many technical people get upset, angry or annoyed when someone doesn’t want to implement their full solution. I know I’ve been guilty of it at times. In our minds, the solution is appropriate, and the best to fix whatever the current problem is. Why don’t they just implement it!
Accept that there is always a trade off. Businesses only have so much money to go around, and the highest priority projects get the most attention. Much of the time the solution you’re trying to implement might be quite important, but so are half a dozen other projects that cost just as much. It’s a world of finite resources.
Something has to give - and it usually results in a compromise on your solution.
3. Holding your ground
There are some things that you should never compromise on. The school of life has shown me that if you don’t stick to your guns on these, all hell can break loose later.
You should never compromise on:
- The project implementation process. Especially, don’t skip the design and testing phases. You’re far better to compromise on the functionality of the solution than on the process by which you implement it - you’ll end up with less functionality, but a better solution.
- The supportability of the solution. Don’t put a rush-job, stop-gap solution in place that is unsupportable because of a lack of time. If you don’t have the time to do it right, where are you going to find the time to do it over again?
- Your ethics. It’s not up to me to tell you what your ethics are, but if you start compromising them to cut corners - take a long, hard look at what you’re doing. “Because my boss told me so” isn’t a valid excuse.
4. And sometimes, things just suck
If you’ve explained the risks, accepted that compromises need to be made and held your ground where it counts, and you still have to compromise further - you could have a problem. Either there’s a problem with your perception of the situation, or the decisionmaker’s. Figure out how you’re going to deal with it.
Just don’t get bitter when you’re asked to compromise - everybody’s doing it.