I'm as salty as the next guy, but in my experience it has been the sub-par employees who are the ones that don't do this. Ticket management is not busy work, it's a necessity for everyone to keep updated. Presentations and diagrams are tools to communicate. I can safely say that by far the most waste I've ever seen has always come down to poor communication rather than anything actually business or technical related.
Off the top of my head these are the most common two "negative engineer" behaviors I have seen
1) Biggest one: an engineer who is not experienced at architecting complex systems, goes and architects one when complexity was not required in the first place. This is the key to never shipping and destroying entire companies.
2) Close runner up: an engineer who writes code that is inscrutable and therefore unmaintainable (always by others, often by themselves as well). This is the key to your product dying a slow death over several years.
There are negative engineers doing this stuff ALL. THE. TIME. EVERYWHERE. Despite unquantifiable volumes of both ink and blood spilled trying to prevent them.
I used to despise the incredible amount of time we could spend on a single powerpoint slide sometimes.
Then one day when going over same slide for the 5th time with my boss and mentor, I realized:
* This slide will be seen by a person in power
* they will make a decision based upon that slide
* I would like to spend 3 hours explaining them the intricacies of my project/architecture/problem/whatever
* But they have 10/100/1000 other projects, and they have 20/10/5/1 minute to devote to me before they make a decision
* A slide or set of slides might therefore have an impact across 1/10/100 people over week/month/years due to a decision based on a slide or set of slides
* therefore, it can at times be rationally logical to spend a lot of time word-smithing a slide in order to help the right decision
As programmers, we understand that we might spend 10min/hour/days/weeks on a small but crucial piece of code, because we need the computer to understand it and do the exactly right thing in a complicated scenario; and we do not consider it a waste of time (though our management might! It's a curiously symmetrical situation :-)
Sometimes, slides are exactly that, but for people - distilled information to enable executive stakeholder to do the correct thing.
Same with other items - diagrams? They can be phenomenally useful! A good diagram can spread understanding of goal and ensure we all build the right thing. Bad diagram can set 100 smart people on divergent paths!
Consider "The Bar team wants to know about our new Foo architecture" vs "The Bar team needs a 30 minute presentation on our new Foo architecture". Does the Bar team actually need a presentation, and could it be a live demo? Do they just need better documentation? Are they building an integration, and would someone from your team working with them for a week unblock them in a way a presentation wouldn't? Could this be a ten minute call between you and the one engineer who needs a hand?
Good and experienced engineers do their best work on open-ended tasks. This is as true of communication as it is solo work. Artificially dictating the solution without understanding the problem limits them.
Ticket management is stuff that needs doing, obviously.
Diagrams are illustrations; if something is so complicated it can only be understood with a picture, it's too complicated. But a quick diagram on a whiteboard (or with a pencil on the back of a fag packet) might be helpful.
Presentations (with slide-decks) are for managers[0], not engineers. They are a huge drain on time. I got severely dinged by my manager for doing a presentation without a slide-deck; I hadn't prepared one, because I had real work to do. But I think I showed my manager up, because all the other engineers had turned up with slide decks.
A crap slide deck is quick to make, and completely useless. A really good slide deck can take days to make; it's a specialist trade, like making good user documentation. Slides must augment the presentation, not distract from it.
[0] I've been forced into formal management once or twice; my experience was that at least half of management is bragging to other managers about how important your team is, and slide decks are great for that.
I would say that rather depends on how much of it you do.
This could just be bad ticket management with where I work. Or we use tickets in a less standard way. I’m not sure, I work in fpga design so it’s not like a user submitted bug, it’s a request from one of the 1000 review meetings.
Sure bad engineers exist, but you know what is even worse than the -10x engineer: the contagious jerk.
https://www.inc.com/jessica-stillman/studies-being-a-jerk-is...
Yep being an asshole spreads like a disease within organizations. Avoid these guys like the plague.
They tick just about every item on that list. Staggering inefficiencies everywhere, duplicated work, duplicated codebases, etc, etc...
The worst thing about these problems is that they compound, often exponentially or at least quadratically. Slow builds mean bug fixes take longer. Longer bug fix times means they can't all be fixed to meet deadlines. That means that they now have to be prioritised, which incurs management overheads and shuffling things around in spreadsheets. This then delays things further, which means even critical requirements (security!) get dropped on the floor.
The inevitable consequence is that things are constantly breaking in production, and everyone spends half their time fighting fires. Fires that were marked as a "low-priority" smell of smoke six months ago.
Productive staff see the writing on the wall, quit, leaving only the unproductive staff that "couldn't get a job elsewhere".
The snowball builds rapidly from here into an avalanche of badness.
People at every level of the organization, from the top-down, have done this since forever. The -10x engineer will choose a language that they're fascinated by, but have no production experience with, and then spend most of the budget building libraries that they assumed already existed in the ecosystem. "Almost complete" becomes "almost ready to start".
1. Unless you are working alone and for yourself good communications are more important than most engineers will admit. The thing is: the quality of communication does not necessarily correlate with the quantity or the duration of it. And depending what role you play, you might not need a lot of communication in order to get a clear picture, while others might need more (for you: unnecessary) communiation to get on the same page. The drummer of my band always used to say there shouldn't be that much discussion about what we are playing, which is super easy to say if you don't need to harmonically integrate with other instrumentalists.
2. Every single one of us is in danger of dialing the degree of complexity too far, or not far enough. Every single one of us is in danger of doing things a certain way because we try to make them nice, while that makes them technically unmaintainable. Code is communication as well. Communication with your collegues or yourself in the future. Good code is efficient, reliable and communicates well. Sometimes we have to sacrifice a little bit of one for the other, but clear code and e.g. efficient code should not be seen as opposites, but as a multidimensional problem to which there are solutions that work better on both fronts and solutions that suck on both fronts.
3. Context. Many engineers I have met have a hard time explaining some concept or problem in a way that it is understandable. Either they dive in way to hard and assume everybody knows what they know or they will start explaining it and get side-tracked and end up talking about something entirely else. Giving someone a clear image of where we are and then zooming in on the detail in well-sized steps is a skill I wish more people had. This skill also helps when debugging, because you will check your zoomed-out-priors first and then bifurcate the problem space as you zoom in.
"Bro, your mobile app redesign to Flutter is not a 'skunkworks' project. Unless you are Lockheed Martin, or Boeing, and the project will approach a trillion dollars of spend, has the capability to eliminate millions of human lives, and requires 1000 security managers and 25,000 Top Secret/SCI employees you ain't doing no 'skunkworks'"
Cracks me up.
A lot of legacy software is like this. I wonder how many billions it costs the economy per year.
Even when you are at the best team, culture-wise and productivity-wise, accept that this will not last. All it takes is for 1 person to arrive/depart to ruin the culture.
Just do your best and bounce when it's time. You cannot move Mount Fuji with a teaspoon.
Part of the issue is that intelligent people can be better at justifying work that wastes everyone's time. So if you're in a leadership position you really need to make sure people have their eyes on the prize and that they aren't padding their resume or needlessly doing tasks that worked at their previous job.
> "Waste 400 hours of engineering on bad architecture: Give zero consideration to how your system design will evolve over time. Alternatively, drive your team obsess over architecture decisions so that they don’t have time to test their hypotheses."
A complex project with many people working on it in different teams calls for modularization and well-defined interfaces, so working out the architecture up-front does matter, and changing it down the line will have huge costs. Staged progession is the answer, probably, which is why you'd want to have a meeting where everyone agrees, "this is the architecture we're going with, now everyone go build the modularized widgets that fit into this architecture, here are the stable interfaces to build to." Screw that up and you end up with tons of wasted effort, but dithering around and never making a decision is no better.
Some of the other stuff relates to the 'build team spirit' corporate mentality which is kind of culturally variable - some people love it and some people hate it. Minimal is better, IMO.
Then there's the 'basic technical proficiency' category of problems, e.g. recompliling the entire collection of source code every time you make a lttle change because the build configuration in the makefiles is incorrect etc. That's probably the easiest category to fix, some people just have holes in their knowledge and those can be filled. Here is where the company jerk is a major liability, though - you want people who can teach others how to improve their workflows without engaging in any condescending / egomaniacal / prima donna behavior.
One time I found myself in this position was overseeing an infrastructure migration for scaling reasons. The goal was to have it done before we hit scaling limits, and we had a team of 2 people and a fairly complex architecture. From the start, I suspected it might be difficult to do with the current staffing, even after extensive planning, but I underestimated what the costs would be to not completing the project on time.
I was told by my manager that completing the project before hitting scaling limits was life or death for the company (it wasn’t, I know this because the sales team didn’t hit their targets and we survived). I now realize this was my manager attempting to motivate me to take on a tough project, rather than real truth. Had I pushed back harder, inquired about company financials, this would have been exposed as not true.
While we eventually ended up completing the project, we completed our largest phase of hiring while in limbo between 2 architectures. The company became disorganized, accepting large amounts of tech debt as it was tough for new hires to understand what the “correct” thing to do was, and many people ended up adding to the legacy architecture in cases where they didn’t need to. It was a mistake that likely cost millions, even tens of millions in my eyes.
The correct thing to do, of course, was just to insist that we couldn’t scale until we trained or hired more people to help. Limiting growth is often seen as unacceptable in startup culture, but IMO should be considered more often.
I'm now wondering what languages and projects the author has worked on if they expect compilation to take less than 20 seconds. Maybe small-ish golang projects? I don't remember the last time I worked on something interesting where recompilation was always under a minute...
- Name all your variables 'data'.
- Copy and paste everywhere. People will think they've fixed a bug, and they have, but you've got seven slightly different copies of the function that needed fixing and now there's six left.
- Take a project that's using one of those 'prettier' 'black' style tools to avoid bike-shedding discussions about linting. Change the options because you prefer different ones. Start a bike-shedding discussion about linting.
- Use multiple divs for a single circle-shaped avatar.
Though that might actually end up costing more that 400 hours of wasted time.
We had two things:
a. Poor systems and poor communication permeated the IT department
b. IT was viewed as a cost center so no amount of heroic intervention was ever rewarded proportionately to business impact. It was Sisyphean.
If you are in a situation like this, please run away. You can't win - either the free market will destroy your employer, or your employer will destroy you.
In short, software development should most of the time be treated as a group activity and you should consider how the output of your own work affects those around you. While you might not feel like documenting your decisions is a wise use of time, it could help others down the line. The same goes for choosing the simplest solution that works well vs going out and writing lots of "clever" code. Things like the ways how we communicate, how much nitpicking vs accepting "good enough" solutions all compount and have a pretty great effect on the output of others.
So true. But only 20 seconds? The project im working on takes 20 MINUTES to compile for any code change. I constantly forget about it while trying to get something else done in the mean time. It frequently takes whole days to track down and verify simple issues.
LOL, I thought I was cynical
Reminds me of the CIA sabotage field manual: https://www.hsdl.org/c/abstract/?docid=750070
On another note, many of the items there are "create pointless X". It's actually a thin line between "important X" and "pointless X" and many people will disagree where it actually lies (as evidenced in the comments here).
I transitioned from startups (for 10 years) to a large company (for 5 years). Part of that move was adjusting from a culture of no lengthy documents to a culture full of lengthy documents, and I would never want to go back. Having explicit documentation in writing, where folks can debate the merit of ideas is so so much better than having it living in a few people's heads, unable to be critiqued.
Edit: add a word.
Mostly spot on but I am not sure of this one - well written notes / emails about technical issues and some of the trade offs or desired outcomes are really useful - they actually help "align" people. Think more "Linus rant" than "CEO powerpoint" but the idea is there
Anyways ive seen so many "programmers" that sit silently in meetings and also just do not produce good code. Usually they produce bad code that I have to revert.
Important to note that there are also 10x environments that make everyone in them 10x as effective.
* Have an agenda and circulate it along with the invite. Let people know what you want to discuss so they can prepare. * Know what outcome you want from a meeting and let people know in the invite. Again, it lets them come prepared and even better, make pre-meeting suggestions. * Think about who needs to be involved. Do you really need everyone, or just one or two people. Again, agenda lets folks know if they can contribute or if someone else needs to be pulled in.
It's not that meetings are bad, but bad meetings waste lots of people's time. Good meetings save time.
Oh, and write down meeting minutes and publish results. The person you're recording this for is usually yourself. :>
Instead of having 10x engineers, make the team 10x. Shape Up (https://basecamp.com/shapeup/0.3-chapter-01#making-teams-res...) by Basecamp is the best resource I've seen on that topic.