Instigating Change (Without Being An Asshole)
This is something I’ve been thinking about a lot recently. In the interest of not making this the world’s most cathartic rant (which may or may not help me feel better), I’m going to keep this as general as possible.
This is a lesson I have had to learn many times in many different contexts over the years. And I expect the same is true for many other people. They say that writing stuff down helps you remember it better, so be sure to plagarize this post after reading it.
I use a lot of block-quotes here to quote myself and it makes me feel slightly narcissistic, but I think I’m going to roll with it, because there are a lot of words here.
##Warning: I am not qualified to provide career or personal advice
First, a statement(s) of problem. In this entirely hypothetical situation, I am but a powerless grunt. Only slightly able to control my own professional destiny, but completely impotent to change my team, organization, or company-at-large. However, I have “seen the light” in some capacity. Perhaps I see a challenge or opportunity coming our way that we should position ourselves to get out in front of. Err..the kind of which we should position ourselves in front.
In that entirely hypothetical situation, how do I realize my vision? Well, if I’m honest, my first instinct is to complain about it as loudly and as often as possible until people start to see things my way. However much better I may feel (remember, it may be a myth), it doesn’t really get anyone anywhere. I’m going to be making people unhappy and progressively more unwilling to listen to me the longer I complain, and I’m going to get so burnt out on the whole situation I’ll probably just drop it after a little while lest I go insane.
If I just keep complaining about it, I’m going to be an asshole and nothing is ever going to get better.
Being that guy that keeps going on about problems without offering an concrete solutions is not helpful to anyone. There is no “squeaky wheel” situation when grease is so hard to come by.
In entirely hypothetical situations like this, I try to remember a couple of things.
##Additional Warning: Cliches Inbound
- “Be the change you want to see in the world.”
- “The journey of a thousand miles begins with a single step.”
These are both well-known and particularly-trite cliches. Everyone has heard them over and over again. But, as with many cliches, they can offer some wisdom. And - again, as with many cliches - that wisdom is often overlooked because the phrases have become so meaningless.
Examine them with me, won’t you, and help me extract their wisdom?
###Be the single step you want to see in the world
One of the biggest problems with me spouting an endless stream of complaints is that I am coming up with all of these problems in a most-unhelpful way.
A problem, even when paired with a fitting solution, is useless without a plan.
Let’s take a more concrete example. One that actually is entirely hypothetical. Let’s say I am a developer at a small software company. We get by making niche software for The Enterprise, so we aren’t hot-shot Silicon Valley Ruby Ninja Rockstar 10x’s.
Let’s say I’m that developer and I read Continuous Delivery and have my mind blown. Understandably.
I go into work the next day and I’ll I see is “manual builds,” “works on my machine,” “code coverage 0%,” and so on. I would be distraught. Again, understandably.
Honestly, my first instinct in this situation would be to start preaching CD to anyone I could corner. I would go off on half-hour rants about how the way we are doing things sucks and we should just rip it out and start from scratch and I can’t believe we’ve been doing it wrong for so long and jesus can you believe John hasn’t been able to build trunk on his box for three weeks if we used CD we could always be ready to ship a new version to customers at any time and be so much more productive and….
See how exhausting that is? It’s easy to fall into this trap. Because, whether or not it makes you feel better, complaining makes you feel alive. It really gets the blood flowing. I am not currently faced with this problem and writing the above paragraph got me going anyway.
And now I’m that guy that everyone avoids at all costs. I come to you with problems and I exhaust you. What the hell do I expect you to do about it, anyway?
So now my co-workers are done listening to me. Now I go to management and tell them that they should sink a bunch of time and money to chase some nebulous and unproven goal while things have been working fine just the way they are forever.
How the hell do I get people to listen to me? Unfortuantely, it’s not an easy answer or a quick process. The answer is step-by-step.
What’s the smallest, easiest step you can take to get a little closer to your goal?
Okay, so your goal here is to implement a CD pipeline. How can you make that happen? What’s smaller than CD? CI. What’s smaller than CI? Pre-commit builds and unit tests. What’s smaller than pre-commit builds and unit tests? Automating the build.
That’s probably a good place to start. Write yourself a script that can take the source as it exists in source control and build a piece or all of the project automatically. Maybe it doesn’t even run automatically - maybe you kick it off a couple times a day.
Now you have that script and that process, start using it to add value. The first time you use it to catch a situation where the (heretofore unbuilt) build would have been broken for weeks leading up to a release, you can prove the process works.
Now find an extra box and monitor and set it up in the corner, constantly displaying the status of your automated build. Hopefully, people will get into the habit of checking it. Hopefully, this leads to people catching broken builds faster and fixing them proactively.
Now make it official. Point your boss to the data proving the benefit of your automated build. Get some time and resources to set up a ‘real’ CI server.
If you still can’t get official sign-off for CI, you have a choice. If ‘The Company’ is unwilling to yield…
You can go rogue, or you can re-evaluate how important this is to you.
That is, you can just do it anyway. Hope that the forgiveness/permission adage holds true. Or, decide if it is really worth persuing.
(Again, I am completely unqualified to provide career and personal advice)
Now that your project is building (semi-)officially on a central server, start up a Tests project and run some unit and/or integration tests locally and on the CI. Gather some data about value added by your tests. Hopefully the other developers will notice quality increasing and start writing their own.
Now the team’s velocity has increased significantly and you are delivering more, higher quality features more often. Everyone is happy, especially you because you were instrumental in making that happen.
Use that momentum to see if you can take the company all the way to CD. Get it to a point that someone can come in, and burn the CI-built artifact to a CD and ship it off to a customer with complete confidence that it will work.
###All Optimism Aside
Yes, that was very much a best-case of this tactic, but even in the worst-case it’s a hell of a lot more useful and less stressful for everyone than just standing around complaining all day.
So either way, there is a net happiness gain for the world.
Take that passion that is making you complain and get to work making it happen instead.
It’s even better this way than if you managed to somehow jump right into a CD pipeline.
If people don’t actually see the value and take the journey with you, you will end up with the same broken culture and processes replicated on top of your shiny new tools.