Sabotage

7-12-2023

Spys from Deceive Inc Game

My palms haltingly slid over each other under the desk. My forehead was clammy against the soft stale office air. I'd been deep in Russia for months, and the day had finally come for me to use my position in the company to tilt the cold war in the favor of the US. I took a quiet breath to focus the shivering of my chest, and spoke.

"Should we consider putting this to a committee? We don't want to make a hasty decision that could come back and bite us later".

Perhaps that contrived example sounds a bit far fetched, but over my career I seem to have spent a lot of time within "innovation wings" that exist in larger companies. When I read the recently declassified 1944 CIA Simple Sabotage Field Manual I was shocked at how often I've been in meetings where people have nearly quoted its suggestions for sabotaging a company.

While most of the manual focuses on factories and assembly line or mechanical work, the section "General Interference with Organizations and Production" reads like a "best practices" manual for many companies today.

Meetings

I totally jump on my soapbox occasionally, and I think soapboxes and learning lunches etc can be very valuable in the correct place. This problem usually arises when the correct time and place isn't chosen. A monologue is great at a lunch and learn, but it's terrible in a standup. We should focus on giving concise answers, not using a lot of words to say very little.

I also find that while people are not often patriotic to the country, these days there can be a lot of "patriotism" to the company itself. Waxing poetic about the company's mission, how smart the people in the room are, or how we're on the cutting edge are usually just flattery. I find effective leaders invite hard questions and instead of dismissing them, they answer the actual question, or acknowledge they don't have a good answer.

When possible, refer all matters to committees, for "further study and consideration." Attempt to make the committees as large as possible—never less than five.

I find that we generally love to create a committee for anything and everything. Or we bring in "a lot of brainpower". But usually these highly paid people are mostly sitting idle or distractedly doing emails, so we're wasting salary money. At the same time we often end up with a polluted vision or a non-outcome for the meeting.

Every dev that's attended more than one "status update" meeting in a day can account to what a waste of time these almost always are. (Beyond a proper standup that focuses on blockers and alignment, not progress updates). Status updates can be sent in a slack message and shouldn't be needed more than once a day, unless there is an active issue being worked through or something.

This can be legit if some new information comes to light, but that's very rare. Even worse is when a person was invited to the previous meeting and skipped, only to cause chaos later. This can also look like you're not being open minded; the subtlety makes this particularly insidious. I like to say that you have an opportunity to participate, but if you don't, you forfeit the ability to circle back later, unless you can concisely produce a clear and present danger that was not previously noted.

I don't think people do this intentionally, but I think this principle extends to things like using monstrous email threads instead of a more 'real time async' platform like slack or rocket chat. This also applies to some level to having meetings that could have been a slack message, instead of being meeting averse until some resolution requires 'talking through it' with a small group. Similarly, we should use quick huddles instead of scheduling a meeting a week out. If the parties are all so important and busy that they can't do impromptu meetings, that indicates to me that there are also other issues that need to be addressed.

Derailing

I often see one dev, because of personality or they just feel a certain way that day, derail meetings. I don't think meeting agendas help much to prevent this. Instead I think having the right people (with the right attitude) is the best defense, as well as having a 'meeting lead' who puts effort into pruning tangents and putting off topic things into parking lots.

Often epitomized in devs arguing over method names, our time is costly and we should be cognizant of the value of what we're spending time on. Is it really worth spending X dollars haggling over this point, or does it even matter?

It's really important for us to be collaborative, but often that means friction. I find that choosing which battles to fight can make a major difference on how effective in those battles I end up being.

I haven't seen this one too often, but I have seen employees who at every meeting haven't gotten assigned work done because of a new and unique personal problem of the week, for months.

They say the perfect is the enemy of the good. I saw a bug report in 2016 that the website that needed to be done in a month had a bug that would manifest in 2040. The website is probably no longer in use today. Good enough and prioritizing working software over unlikely edge cases is important. Like some of these others, the responsible dev can often sound like they want chaos, but the real chaos seeps in through series of 'cautious' decisions, coupled with focusing on the wrong areas.

Caution

This is pure gold, and the bureaucrat's favorite everywhere. This sounds good, and pushing back on it makes you sound like a "cowboy" or "loose cannon". This is why startups succeed and big companies with every reason to continue to make money slowly degrade into obscurity. We should follow mature practices and write tests, but this is often used to excuse harmful process or a desire to not take risk or bear blame.

"Will this affect feature X?" is a question that's often hard to answer with an affirmative no, and easy to spin off into a committee that we now need to hear back from, effectively halting the current effort. This is a great way to stop a project dead in its tracks. Instead, I propose that we should be opt in instead of opt out. This puts a lot more responsibility on people to proactively understand what others are doing. However, it makes shipping features a downhill move instead of an uphill battle.

This reads to me like a comparison between waterfall and agile, or agile philosophy vs big business implementations of agile. It's interesting to me how often people will talk about frequent deploys and then explain an mvp that requires an entire system to be built out. We should be comfortable releasing not just dark launched full features, but also with partial releases, so long as they make sense.

Documentation

I find that Confluence does a great job of digitally multiplying paperwork, with companies often having many similar but slightly different pages, all stale to differing degrees. I think git wikis are often a bit better as developers are generally more likely to edit existing pages, but it's always a challenge. It seems like some of the best defenses are having a single system for documentation (that's git based and near the code) and using systems designed for devs as opposed to other roles. However, the best defense of all is to not focus on documenting things that others won't read. Perhaps we should take a cue from landscapers who wait to lay down path until they see where the grass has worn bare.

I find people often put a real focus on documentation, and usually the more focus on documentation, the worse it is. People like to add new documentation and not upkeep the old documents, and the team quickly moves into a place of documentation overload. Better to improve and simplify the process, hire self starters, and train people to fish. Trading extensive documentation creation for minimal documentation close to or in the code, plus pairing with new devs to give them tools to solve problems can do wonders. I find that often the docs exist and the newer person doesn't know where these exist and can waste time looking in the wrong places.

Having a 'documentation culture' helps make this worse, as people assume the new worker "should just read the docs" when they don't even know where the relevant docs are. It's important to recognize when someone is struggling and jump into a huddle with them to figure out where the core gaps are.

Environment and Tools

It's interesting to me how often companies have or are worried about "Shadow IT Shops". Clearly these shortcut shops wouldn't exist but for the abundance of regulations and process to get anything done through official channels. When we need to sidestep an official process, it's usually because the value of that process is outweighed by the effort to do that process, usually because both the value is overestimated and the tooling / process itself is arduous.

I've read that the greatest indicator of software maturity is essentially the amount of time taken up by your CI/CD process (specifically time elapsed between code getting to master and running on a production server). I think those fast feedback loops are hugely important. I'd also say this applies to having blazing fast tests and having deploys that aren't cluttered with steps and process.

I often see this with tech leads, where they, or their access, are bottlenecks. When the TL is out, PRs can't be approved or new github repos created etc.

I see this with the oft complained about needless meetings. It's interesting how often people complain about useless meetings and yet they persist. As a TL I try to really fight to reduce the number of hours spent in meetings, as well as the frequency of those meetings. This can also apply at the team level with priority shifts meaning focus shifting from one effort to another more than it should.

I watch dev after dev struggle with the same problem and shrug their shoulders instead of writing a tool so that problem goes away. It feels like you're doing something bad at first, but spending time on a reusable tool almost never is a bad investment.

This is super disheartening to see, and seems prevalent across most big software companies. Lawsuits have driven many cautious companies to make the process to fire someone incredibly difficult. At the same time I have often seen more frequent promotions that are at or below a cost of living salary increase, which encourages high performers to go elsewhere.

No constraints

At the end of the day, no one wants to be responsible for when things go bad. That bias means we'll almost always error in the other, safer direction. To be a great craftsman means we must take risks. At one company I worked they used the phrase "no constraints" to mean "what if we had all the power in the world, what would we do then?" as well as "let's think not 'how can this go wrong' but 'how can this go right?'". I think those exercises and that "bias towards action" are really important. We must fight to tackle problems, instead of just recognize their existence, or wait for someone else to take the risk.