Lessons from Mythical man-month aside, what mistakes does management keep making and what do they never seem to learn? And of course the effects on those on you and your peers?
Promoting technical people with no management experience into management jobs, without providing them with any training or guidance. (Happened to me.) Writing code and managing people require very different sets of skills, and just because you're good at the former doesn't necessarily mean you'll be any good at the latter (or that you'll enjoy doing it).
(Similar problems can happen when a bunch of people with no management skills decide to found a company and start hiring people.)
I read lots of books about management, I tried to emulate what managers who I thought were competent were doing, and I made lots of mistakes and tried to learn from them.
There were some mistakes that I was never able to recover from, like being too friendly with the people who reported to me - that makes you really dread the prospect of having to lay someone off, makes it hard to give difficult feedback, etc.
Eventually, after being a manager for several years, I decided to go back to being a developer, and now I'm much happier.
Yes, this. I'd add that you end up losing a probably (as he/she's been promoted) skilled engineer as well. Promotion via management is what forces people who might not have the "people-skills" to accept management jobs because they want to be valued.
This reminds me of an article from Rands in Repose:
As I wrote about in Being Geek, the Curse of the Silicon Valley is that great engineers are often promoted to leadership for their hard work. While many succeed in this role, an equal part fails because the skills required to lead are vastly different than the ones required to be an engineer. The Curse is that we’re often placing our most valuable engineers in a role where they’re predisposed to fail.
Think of it like this: there’s a large population of immensely talented engineers that should not be leaders. There is no amount of training that would make up for the talent we’d extinguish by teaching them how to write annual reviews.
But everyone wants to grow.
Unfortunately, in many companies the only perceived growth path is via management.
1. Arrogance (only do what I say, don't think for yourself)
2. Fear (you're getting a lot of attention and praise, this somehow makes me look bad)
3. Short sightedness (that's a good idea, we can't use it here, now go do something productive)
A good manager loves his team and opens doors, prevents road blocks, and facilitates approvals for them. He is a steward of their success. He removes fear of failure. He is not self absorbed but finds joy in the team. So, without these attributes, the negative effects are too sad to write about.
Overly optimistic schedules. Even with a known gelled team, being constantly overscheduled is a nightmare. You cut corners, and are always stressed and tired. Other teams that believe the optimistic schedules may become angry or blocked on you. Over time this just leads to burnout, but since nobody seems to stay anywhere for very long, nobody seems to care.
This! In the same vein, believing that "this time" the team will work faster because of lessons learned. Refusing to accept that historical performance really is the true performance of the team. Failing to account for the previous project completing almost on schedule only because of major overtime. Etc etc.
On my first project I learned that every time a PM said the word "hope" (as in "I hope we can meet this deadline") that we were screwed. It was said a lot.
- Trying to "create a buzz" around the office, asking for a "sense of urgency," and other things that result in an illusion of productivity.
- Focusing on fixing problems, rather than preventing problems
- Acting as yes-men to bad upper-management strategy, thereby creating a layer of indirection between the people who think it's a good plan vs the engineers who can explain why it's not quite that easy
- Trying to use software tools (e.g. Jira's burndown charts) to quantitatively/"objectively" measure engineers
Jira has a lot of bad use cases around it, but I don't think it's a bad tool. I rather be looking at the board to get status updates than interrupting someone to see where things are at, and basically resorting to micromanagement. It should however not be used as a replacement to talking to the team or reading the code - but it should be one of the tools in the shed.
I've never met a manager that wouldn't rather pay four average people $100/hr to solve a problem that one smart person could solve in half the time for $400/hr.
There seems to be some sort of quasi-religious belief in the fundamental averageness of humans; consequently the difference between developer salaries at any company varies by maybe 50%, whereas the productivity varies by at least a full order of magnitude.
Until "management" realizes this, the only way that a developer on the upper end of the productivity scale can capture their value is to found their own company. I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
We already do that all over. It's called consulting.
The outcome isn't higher quality or better work, just capture of perceived value. The super productive developer has a risk/reward ratio. When you get a little older, stability has a value of its own.
> I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
I've always heard this is the Netflix model.
> difference between developer salaries at any company varies by maybe 50%, whereas the productivity varies by at least a full order of magnitude.
I like your thought process but do you really believe this is possible? There are few fields where you can observe order of magnitude differences in salary. As you said, human nature seems to reject this, likely because it does not really occur in the wild. Even in sports it is rare for a particular position to have pay disparity to that degree.
What do you mean even in sports? What metric are you using to compare on athlete to another? Obviously one golfer won't be able to hit the ball 10x as far or sink the ball in 10x fewer strokes than another. Obviously a gold medal sprinter won't run 10x as fast as the an amateur. But they very well may be better than 10x as many others and that small difference in speed is what makes the difference between winning and losing. The claim the parent poster is making is different, because programming is much different than sports in that he really is claiming that one programmer can create 10x as much valuable work than another. Very different from saying that one programming contest competitor is 10x better than the average programming contest contestant.
> Obviously one golfer won't be able to hit the ball 10x as far or sink the ball in 10x fewer strokes than another. Obviously a gold medal sprinter won't run 10x as fast as the an amateur.
What's obvious about that? I can pretty well guarantee the existence of golfers who need 10x the strokes of professional golfers. I can definitely guarantee the existence of people who can't manage 10% of the running speed of a gold medal sprinter.
Usain Bolt's average speed was about 23 miles per hour[0] when he set the world record (9.58 sec/100m). Nearly everyone can "run" 2.3 mph for a quarter-lap; that's not even a brisk walking pace.
The 10x programmer idea also applies to adults working as programmers. If you were to limit the runners to an analogous population (runners, I guess, or even healthy adults), I'd definitely take that bet.
[0] His peak speed was a bit faster (~27 mph), but the point stands...
>> I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
> I've always heard this is the Netflix model.
Also, Valve. By some accounts, this creates terrible working environment, where people are competing instead of cooperating. Not to mention it distorts the incentives, as devs are heavily incentivised to project an image of being impactful high-achiever (as oposed to actually just being one, and not having to manage one's image). Of course, it also happens in regular companies, but here higher stakes make the game more vicious.
This is a fair objection, and probably a rational basis for at least some pay overegalitarianism. If management can't figure out who the star performers are, there's not much point in differentiating the reward.
On the other hand, this seems like a fundamental management failure. The identity of the star performers has not been a mystery to the actual engineers working on every team I've ever been a part of. The information is not unknowable. Also, we already have a pay grade of "10 bucks": Some people get fired.
Seems like management is damned if they do and damned if they don't. If they reward high performers in proportion to the value they generate, they kill the culture of the company. If they reward everyone fairly & equally, then all the high performers quit.
Full employment theorem for entrepreneurs, I guess. If management is rational, they'll never put the whims of one high-performing employee over the culture of the company as a whole. If that employee is rational, he'll quit and take his work directly to the market. This creates a fresh stream of new startups, each of which either has to be bought back for their true market value, or else becomes the new hot company that hires the masses and hemorrhages its high performers.
I don't see how that 4th and 5th bulletpoint in any way contradicts OP. Popular != productive, although it can be hard to tell this apart in real life situations.
Will management be able to explain to the rest of the employees why this person gets 10x their compensation?
If not, it doesn't matter what the facts are from management's POV, it will lead to the same effect on trust & morale. Most people believe they are high performers and the work that they do for the company is valuable; if they didn't, they probably wouldn't do that work. If you have a workforce who believes they are all solid performers and then they have to confront the fact that management believes one of them is 10x better, you've got a recipe for a toxic culture.
One thing that I've learned over the years is that evaluating your own performance and the performance of others is in itself a skill that needs to be developed. Being able to reward high performers requires them to first be identified! In absence of the specific knowledge needed to assess perf, people fall back to likeability and other biases.
> Will management be able to explain to the rest of the employees why this person gets 10x their compensation?
That's a major part of why I consider open salaries to be a terrible idea for top performers. Performance and popularity are frequently uncorrelated, and I'm not talking about the asshole genius trope. You don't want to force your best performers into allocating lots of time schmoozing to ensure everyone loves them and isn't offended by their higher pay.
Almost nobody thinks they're below average in performance, but mathematically some people have to make less than average.
Maybe but that makes sense when this "smart person" leaves then no-one knows how to keep their stuff going and the system is likely to crash and burn taking the manager with it. If you have a 4 person team you can handle people coming in and out over time, using best ideas from the team.
>> I've never met a manager that wouldn't rather pay four average people $100/hr to solve a problem that one smart person could solve in half the time for $400/hr.
In many organizations, quadrupling the number of people that report to you is worth doubling the delivery time, hands down. Number of reports is an easy measure of influence.
That's harder to prove, what I definitely see is roles staying unfilled open because the extra $10k a year to snag somebody faster is an obvious cost but six months of lost productivity isn't.
How do you propose filtering the candidates? The only way to know for sure how they perform is to actually hire them and see how they perform after some amount of time. Since you will be firing a majority of people this causes a culture of fear. Interviews are far too unreliable for filtering candidates like you are proposing.
Exactly. If you hire 4 it is likely that 1 will be very good and 2 average and 1 bad. If you hire 1 you probably hired the one who knows how sell himself/herself.
There is an inherent safety in having four average employee write something rather than using your unicorn. It's safe because three of them will still be around to manage it when one of them gets a new job, cancer or retires.
On top of that, your unicorns are only really worth their wages if they are solving problems no one else can or if they are mentoring others.
Or, the group of four writes something an order of magnitude more complex. It becomes difficult to make changes, estimates grow, and execution is consistently buggy.
With the right unicorn, one can act swiftly, groom a lean architecture, and make instinctive calls that move the needle of the entire roadmap. Real unicorns present sound technical strategies and inspire new opportunities that help push the company to the next level.
whereas the productivity varies by at least a full order of magnitude
I think we need to put the myth of the 10x developer to bed. 99% of the time, the 10x guy is just someone who solved the same or similar problem at his or her last job and are simply exercising their experience. Sure there are outliers, but that's the same in every field - whereas in programming 50% of people believe that they're the 10x guy and that all their cow-orkers are slothful idiots.
I have met and worked with a few people that fall under the 10x banner. Incredibly clever people who kept their intelligence in check with pragmatic solutions.
Some tough problems that took other skilled developers months they could solve in a couple of days and they could consistently do it across the tech and domain sphere.
I think the issue is people claim to be 10x, if you're claiming to be 10x then most likely you are not, the 10xers I've met have all been very humble.
I'd suggest virtually the opposite: a good way to be an outlier is to have reasonably broad knowledge plus being good at learning new stuff, such that when faced with a new problem you can quickly bring the right set of skills/technologies/whatever at it.
If you want to talk about it from a financial perspective, talk about the rate of return.
Can one developer do ten times the work any other developer does during a week? Probably not.
Can one developer have a rate of return such that they get ten times more valuable work done? Almost certainly.
So developer A delivers 3% improvement per year and developer B delivers 6% improvement per year. Across a career, if you start with 100 units, developer A delivers 245 units at the end, and developer B delivers 2008 units.
In my experience, the 10x programmer is a bit of a myth. Where I have seen people do some incredible feats of productivity, it usually came with a clutch of bad stuff, too. Like:
- they didn't work well with others and soaked up a lot of management time dealing with their shit.
- they had really limited areas of expertise where they were amazing, but couldn't fill in for a sick colleague.
- they worked in 2-3 day sprints for ridiculous hours, and then stayed home or might as well have.
I'm sure there are incredible people out there who can 10x and also be great team members, and I'm sure management are idiots if they don't pay them 10x.
But in my experience, the people who claim to be 10x are usually just insufferable egotists who have no idea of the pain they cause for everyone else.
My experience is that the long term effects are more than 10x.
I heard a joke once : Complicated problems requires complicated solutions. Unfortunately, all problems are a bit complicated if you are a bit thick.
The gist is that complexity grows faster than it needs.
Ignoring people that can't make things over a certain threshold, there is a large group of programmers that can make things work, but are not able to build things clean enough or put in the effort required to build testable and maintainable code, simplify support and reduce runtime costs.
Knowing when to stop and what to spend some extra time on is also important.
I'll hesitate to add reducing future development costs, because I've seen too much overly complex code written in a misguided attempt to handle unknown future requirements.
All these costs can easily build up to 10x over time.
A factor is that a team probably smoothes over the effects of one or two bad coders in a way that it's not noticeable at short term - the code is delivered and the worst bits are plastered over, but the long term performance is reduced.
Another thing often happening, is features coming down to developers, who by slight alteration can be trivial to implement. This usually happens due to missing domain knowledge of the management and sales (and a lack of insight regarding this lack).
There are plenty of 10x or more effects. Anything with a binary outcome can be considered as such. If you measure a person's productivity along those lines, you will get 10x or more output. Also, this characteristic isn't restricted to programming. Furthermore, it is probable that someone can be -10X.
Probable examples of 10x, Steve Wozniak for Apple, John Carmack back in the day, Dennis Ritchie, Tim Berners-Lee, Jeff Dean.
If you aren't getting 10X output, it's possible that the problem or situation you have placed the person limits them to less than 10X.
I do agree that there are far more people who claim to be 10X than that there actually are and that many come with costs.
Also it is simplistic to claim a person is 10x. A more accurate measure is seeing a 10x effect. Writing key software that saves a company or gets a company bought is a 10x effect. I've seen that happen several times.
I rely on your experience for the non-existence of the 10x dev, but I've seen a x2 dev first hand, at young age. One of my interns did the same work in 3 months as the other in 6 months, plus various bonuses: Refactoring of old code into readable one, introduction of Kotlin, more unit tests, interesting discussions at lunch with other startups... Some people are amazingly smart.
yeah, I completely agree. There are people who are amazing at this out there. But they tend to be pretty humble about it, too, in my experience. And the best of them are really, really, good at bringing the rest of the team up with them.
they worked in 2-3 day sprints for ridiculous hours, and then stayed home or might as well have.
The other points you make might be big problems depending on the situation, but this? What's wrong with someone taking a day off after a burst of productivity? This seems like classic valuing of face-time over results.
it's not team-oriented behaviour. I'm not talking about face-time, but about having the attitude that you're part of a team.
The "10x" works 16 hours a day for 3 days and produces a chunk of code that works, does what it's supposed to, ahead of schedule. So far, so awesome.
But the rest of the team is working away on the rest of the project. Suddenly they're lumped with a huge chunk of code that they don't understand. They weren't involved in the design decisions, they didn't pair-program or brainstorm any of the code. It's pretty impenetrable. And the "10x" who wrote it is now unavailable after that "heroic" sprint so they can't even ask questions.
Teams work together. Heroic sprints of productivity followed by absence is not working together. It's leaving other people to clean up your mess while you claim the credit.
You know that famous inverse square root code? Apple basic?
Some things just cannot be pair programmed. They are simply impenetrable to average minds at the time.
Your argument sounds like one for a Handicapper General, to be honest. (If missing the reference Google it). You want to handicap everyone actually competent with a slower partner. And before you claim the usual: it is ok to write suboptimal but simple to understand code, consider that in some cases we actually DO care for performance and size of code..
99.9% of modern software does not require that level of cleverness. Also, the fast inverse square root code is a poor example as it's:
1) A very small amount of code
2) Isolated from everything else
3) Conceptually easy to understand what it's accomplishing (even if the implementation itself is interesting and non-obvious)
Most people would kill for a colleague who wrote code like that.
No, instead what you most often get out of people like the OP is mentioning (because I too have worked with and been burned by them) is some weird pseudo-ORM they wrote from scratch because they don't like how Hibernate handles joins.
Naturally, there's no documentation or even comments because it should be obvious why paxos was poorly implemented in this weird pseudo-ORM framework. And of course, the entire codebase was rewritten overnight to use this new framework as well.
Metaphorically speaking, some mountain routes require a very, very good climber to scale. If it is a team that you are trying to get to the top, that amazing lead climber still needs to throw a rope down to the rest of the team.
I do agree that sometimes managers want to fit "chefs" into a McDonald's like cooking process.
"team-oriented behavior"? So the talented individual gets to write all the code and explain it to other people at the same time?
This is a well known major impediment for creative persons in any field. You can explain things after they are done, not while you are doing them.
This is why average developers create such a drag on productivity. They always want meetings, explanations -- in short, anything that slows down the work horse and make them look productive in the process.
The parent post seems to assume that a "heroic sprint of productivity" would not include communication and documentation, i.e. that productivity only means coding. I don't see that assumption reflected in the grandparent post, and moreover if you don't consider communication productive in its own right, you're going to have much bigger problems than people taking a day off.
> In my experience, the 10x programmer is a bit of a myth
It's at least a unicorn, so companies shouldn't worry about hiring any 10x developers because they are THAT rare.
What they should do is avoid the developers that actually cost productivity. I'm a 10x developer compared to someone else not because I'm 10x average but because there is a 1/10th average dev there.
I'd say try to find the people who are just way over average (2x devs) and pay them twice the money if necessary. The problem is finding these people and making sure you aren't paying someone average twice the pay.
"In my experience, the 10x programmer is a bit of a myth. "
I think it depends on Industry / Role. A creative person in Advertisment or a good chip design engineer or someone great with Algorithm are often worthy of 10 or 20X compensation. Whats wrong is that many people think 10X guys can exist on Application layer / Front end. I think its very hard to do that
Let me guess - you don't work on app layer or front end? :)
Of course it's hard to be 10x there. The same way it's hard to be 10x on the algorithm side. It's also a matter of scope - if you have a giant backend, and your frontend is a single text box, it's hard to tell if somebody is 10x. As the FE scope grows, you start seeing the differences.
I think it depends on perspective. I don't think there's a 10x programmer, but I've worked with plenty of 0.1x programmers. If your organisation is not doing a good job of managing your developer team you may have a very skewed view of what 1x really looks like.
I've been 100x or 1000x in certain situations. Two examples: a solution required a recursive descent parser which no one recognized or knew how to implement, and another time a team fought a bug in some Java code for weeks, but none of them understood thread safety. So in these two instances, I've done things other simply couldn't. Not because I'm special in anyway, just because I had some experience these others lacked.
Otherwise, I am a thoroughly mediocre performer. I'm a minimum effort Loser[1] all the way.
That's my impression too. It's not that good programmers are immensely more productive than decent programmers, it's that bad programmers are very bad. Not only can they just not do certain things, but they leave messes that others have to spend time fixing.
I've had days where I've ended up doing literally nothing, but still objectively outperform some colleagues because they rammed some shitty unstable undocumented race-condition hack into the codebase.
I think the -1x programmer is even more common, the ones that have negative productivity and actually create more work for other programmers. I've encountered many of these types over the years.
They are usually the very hard working type too. The kind who when encountering a problem always solves it by piling on more code, never refactoring, never taking a step back and thinking about the problem. You don't want to be seen idling at your desk, better keep typing.
The 10x thing. Here's what I usually say about that:
A 2nd edition of Peopleware summarises it; the 10x programmer is not a myth, but it's comparing the best to the worst; NOT best to median. It's also not about programming specifically; it's simply a common distribution in many metrics of performance.
The rule of thumb Peopleware states is that you can rely on the best outperforming the worst by a factor of 10, and you can rely on the best outperforming the median by a factor of 2.5. This of course indicates that a median developer, middle of the pack, is a 4x developer. Obviously, this is a statistical rule, and if you've got a tiny sample size or some kind of singular outlier or other such; well, we're all adults and we understand how statistics and distributions work.
Peopleware uses Boehn (1981), Sackman (1968), Augustine (1979) and Lawrence (1981) as its sources. [ "Peopleware", DeMarco and Lister, 1987, p45 ]
> In my experience, the 10x programmer is a bit of a myth. Where I have seen people do some incredible feats of productivity, it usually came with a clutch of bad stuff, too
In my experience, the '10x' programmer is not necessarily more productive (as in amount of work done in a certain timeframe), it's that the 10x programmer does better work, resulting in time savings down the line. Fewer bugs, a more flexible architecture, etc. It can be the difference between being able to easily add a new feature in version 2 and having to rewrite half the application.
Maybe I haven't met a true 10x programmer but met plenty who pretend that they are 10x. I would say those 10X programmers that I had "pleasure" of working with, are net negative to overall productivity.
In my experience, 10x programmers are hard to manage, they complain all the time, no one wants to work with them, their ego gets bruised easily.
But you keep them around because they seem really smart until you look at overall work produced. They might produce 10x work over a weekend but over longterm, they hardly produce any more work than average programmer.
In my interview process, if anyone even slightly hints that they are smarter than average, I end interview immediately. My team is composed of average programmers who get along and have fun working together.
The 10x effect is not on the immediate output of a particular development task. It's the lifetime value/cost of the choices made. In this respect there are many 10x developers, the ones who can factor complexity into a composition of conceptually and realized simple components. This works if they're presence is early in development, otherwise you may need a 20x to turn a 1x codebase into a 5x one.
These 4x (or 10x or whatever outlandish multiple) developers are rare, if they even exist, unless one constrains the scope of their work to a tiny sliver of their particular expertise.
Hiring for such micro optimization is inefficient at best, ineffective usually, and counterproductive at worst.
I think the folks discussing whether or not 10x developers exist are missing the more basic point here. In most companies, a manager's status is determined almost entirely by how many people he or she manages. It's absolutely in their best interest to hire more mediocre people than fewer exceptional people because the correct incentives haven't been put in place for managers in the company.
At many places, the best thing that can happen to a manager is for their team to become "too big". Oops, now they have to split it into two teams, and suddenly they're a Director instead of a Team Lead (or whatever titles are used).
"Management" will never realize this because to some extent the reasoning is driven by ego. It feels better to be in charge of 20 mediocre producers than 5 amazing ones. Of course there will be exceptions but the general rule follows.
It consistently astounds me how many companies would rather hire 2-3 average developers (for average or below-average salaries) rather than one great developer for 1.5x the price.
Here in New York, this is especially acute. Many finance companies have thousands and thousands of developers. They'll have a team of developers (costing maybe $500k/yr total) working on a problem which a single excellent developer could easily accomplish (and be happy with $250k/yr).
Tons of companies are penny-wise and pound-foolish, mostly because programming is still considered a low-status profession.
> Until "management" realizes this, the only way that a developer on the upper end of the productivity scale can capture their value is to found their own company. I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
There are companies which do this, but they're almost exclusively pure tech companies (ex. Netflix).
In many companies you get paid for status, not for productivity or value.
Management doesn't want super-performers, because they can upset the power dynamic.
Developers must have lower status than management, and super-performers can challenge that.
Companies are actually social networks. Instead of gaining status by posting selfies of yourself in exotic locations with cool people, you gain status by making high status noises in emails, talking in a high status way, having many people reporting to you, and having equity.
Sometimes getting things done is relevant too, but not as often as it should be.
Exactly, that's why I think this is one of the biggest examples of mismanagement out there.
For me, it's actually not about the compensation for its own sake. It's that compensation is a strong signal of how the company thinks about the status of developers.
This is also part of redundancy. If you hire 1 10x programmer and they get sick, no work gets done. If they leave, you will have hard time finding their replacement.
3 average programmers who understand your code adds a lot of redundancy.
And as an interviewer, it is really hard to identify who is 10x and who is not. But very easy to tell who has enough knowledge and pleasant personality. Programming in most companies is team sports, not a marathon.
Sure, you don't want to rely on a lone genius. But I'd argue it's much better to have a team of 10 excellent engineers than 30 mediocre ones.
There are tons of companies with thousands and thousands of engineers who could easily make do with 100-1000 engineers if they were willing to attract and retain top talent.
> And as an interviewer, it is really hard to identify who is 10x and who is not.
That's definitely true, but top companies manage to do it. And when they make a mistake, they rectify it.
Team sports still pay to attract top performers. The best players can be a force multiplier for everyone.
> That's definitely true, but top companies manage to do it. And when they make a mistake, they rectify it.
I know many programmers from FB, Google, Amazon, Apple. There is no way they are 10 or even 2x. Some of them I worked with too, so I know their work. Others are just friends, we discuss technology all the time.
> Team sports still pay to attract top performers. The best players can be a force multiplier for everyone.
You are right team sports do pay a lot of money for top talent. Unfortunately, my experience with 10x programmers, as a teammate and as a manager, has always been negative.
Most of them barely produce more than average programmer on long run but demotivate entire team or department by their arrogance, talking down, complaining, rudeness.
You're still not guaranteed that by spending $400 per hour on one person with excellent credentials you will have a better outcome than with 4 x $100. There is also a balance of risk especially on longer term projects, with the 1 x $400 person there will probably be less technical oversight and also if they get ill or leave then the project is is serious trouble.
I'm not advocating employing talentless monkeys, they still need to be good at what they do but from a business perspective it's a more complex and wider ranging decision.
If you spend a lot of money you're not guaranteed to get the best. But if you go cheap you are nearly guaranteed to get a bad developer/product/whatever.
the reason they'll rather hide 4x people that are half as slow, is that they have bums in seats that are available for whatever hairbrained idea they come up with. the x10 (sic) coder will get bored of the mundane stuff surrounding the complex stuff s/he loves
Btw. your example is missing the bus factor. But I understand your point and actually I do not think that salaries are meant to depend 100% on performance.
I think it is more like 90% of time the person invests and 10% performance bonus. That way the one with to 50% higher salary would probably be 5 times as performant as the average dev. If that is fair, is a different (and very difficult) question.
Personally, as a product design manager, I like to find the middle ground. Having a set of "4x" employees is useful when you also have a number of "1x"and "2x" employees that can learn and grow from the influence of the highest skill and/or productive employees.
Attempting to build a "quantity over quality" organization is bad for the reasons you list, but "all quality, no quantity" is a close second in being detrimental.
Each critical "4x" employee that you have is only beneficial if they stay at your company. Burning them out because a company is ruthlessly focused on keeping their staffing lean by only hiring "4x unicorn-ninja-guru-rockstar" developers is a quick way to trigger management to swing the pendulum too far in the opposite direction.
This is often an information problem. To find an expert or specialist takes a lot of time. While it would be nice to always have an expert solution, sometimes we don't have the luxury of time.
I ran into this problem.. I felt like I was worth more than the best offers I was getting. I continued to get job offers, but I couldn't get one for more than 100k remotely or in my area(Burlington, VT).
I've got many many years experience, can solve any challenge, and work at twice the rate of most of the developers I have worked w/ in the tech stacks I focus on(ruby, elixir, reactjs/javascript/ember/angular etc)..
So I decided to go at it on my own and charge a rate I felt I was worth. Best career decision I've made so far. I think every developer reaches a point where the only way they can make more is to move into management and stop being a developer, or branch out on their own. I myself hate being a manager and love being a developer.
Managers generally seem to think that a developer is a developer is a developer. When there is a clear difference between a $50/hr developer and someone who can charge $250/hr in the time it takes to solve the same problem. What takes a $250/hr dev 1hr to solve correctly, might take a jr dev 5hrs to just "get it working."
I started w/ word of mouth and networking through people I already knew. I also started with a lower rate. I raised my rates anytime I had to much work to do. I discovered this technique from another friend.
I was complaining one day about having WAY to many clients. He said and I'll never forget it, "if you have to much work to do, you're not charging enough."
I started 2.5 years ago at $70/hr and am now at $135/hr after several rounds of raising rates. Sometimes I would lose a client when raising my rates, but that was ok and really was the goal. They were usually the most painful to deal w/ anyway. My best clients usually never even balked at it. Just said ok and kept on paying.
I then got to the point where I needed to give myself a brand and bring on another developer because I started taking on very large green field projects(this was something my lawyer and accountants suggested for insurance/legal/protection reasons).
At that point I got more advanced and started doing some content marketing, facebook ads, and google ads to keep the pipeline running. The hardest part was keeping clients lined up in the beginning. Because I would get a client, work the client and during that time stop looking for new clients. Which lead to a lot of down cycles with no work to be done while I looked for the next client. This is still an ongoing thing we're working on at this time to improve our client acquisition techniques.
My partner and I now do about 20-30hrs a week for clients pretty steady and spend the rest of the time working on projects we own fully that we hope can generate recurring revenue. It has been a really fantastic journey that I hope never ends.
Every day get really inspired by the stories on indiehackers.com and just find this way of work extremely fascinating. Very rewarding both personally and financially so far and I don't think I'll ever stop doing what I'm doing if I have anything to say about it.
>So I decided to go at it on my own and charge a rate I felt I was worth. Best career decision I've made so far.
I think this, above all else, is the key to the frustration and ever decreasing salaries we're seeing. The market has spoken: employees just aren't worth that much. If you want to capture more of the value you create you'll need to go into business for yourself. It's risky, but sitting a desk in a huge office watching rates go down and down will probably turn out to be more risky in the end if you can't retire before it gets too bad.
Having said all that, would you mind expanding on exactly what you did?
I started by talking to my friends and networking with people who needed developers, using online sites to find people hiring or seeking developers I could pitch on my services(this works amazingly well), and doing content marketing to get some SEO and exposure for myself and services. I started with a rate that was a little more than my salary when I left to cover things like savings, retirements, insurance, taxes etc that my job paid and raised my rates any time I had to much work to do. See my other response in the thread for more details.
I agree with hiring the four people over the one star. If that one person leaves or is on vacation you have a hole in your team.
There is a chance of the four who are not as capable today, 1-2 might become a stars in the future. He/she will be more loyal because of the opportunity the manager gave them.
> I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
As a developer, what I want is kind of the opposite. I don't want to be paid more than others if I'm more productive, I want to work fewer hours. Pay me for the value of my work, not how long it took to do it.
Netflix is known for a policy of paying well for talent and being generous when dropping people who don't work out, for whatever reason. Their culture document is a great read.
This is simple risk management. The risks are too big that you're paying someone $400/hr without the expected benefits. There's just a too wide margin of error. Pay four people, things even out if and the whole thing just becomes more predictable (and thus easier to manage). Managers are often eager to pay the cost of predictability.
I believe that nearly all mistakes that management make are largely due to empathy. I think this is effectively why we've seen so many large, uber successful, companies being started by people with comp sci/software backgrounds. Worth noting - conversely, it doesn't mean that all comp sci/software people have the ability/capability to lead technology teams.
* Building a one more generation of product than the market supports (so you build a new version when the market has moved on to something new).
* Rewarding productivity over quality.
* Managing to a second order effect. For example when Nestle' bought Dryers they managed to 'most profit per gallon' which rewarded people who substituted inferior (and cheaper) components, that lead to lower overall sales and that leads to lower overall revenue. Had they managed to overall revenue they might have caught the decline sooner.
* Creating environments where nobody trusts anyone else and so no one is honest. Leads to people not understanding the reality of a situation until the situation forces the disconnect into the mainstream.
* Rewarding popular popular employees differently than rank and file. Or generally unevenly enforcing or applying standards.
* Tolerating misbehavior out of fear of losing an employee. If I could fire anyone in management who said, "Yeah but if we call them on it they will quit! See what a bind that puts us in?" I believe the world would be a better place.
There are lots of things, that is why there are so many management books :-)
If you're selling non-commodity goods your brand is an important reason why consumers purchase from you. If they realize product quality is going down they'll churn. You might have a short run of good profits, but eventually consumers will start purchasing something better, thus hurting your your total numbers.
In this example, it states that because of this enployees were rewarded for reducing the unit cost of the product, which meant cutting in to quality. This led to sales declining because custoners were less interested in ab inferior product.
If management had looked less at the "how much profit can we squeeze out of 1 gallon" angle, and more "how much profit can we make overall", they might have made different decisions, such as preserving the quality of the product, they may have done better overall.
Unit profit is one factor in overall profit / revenue, but # of units solds is equally as important...it's a balancing act.
Yes, as you can tell by the fact that your overall profit in the first scenario is $10M while in the second it is $2M. How is that an argument against overall profit?
One of the biggest constraints in a business is employee focus. Theoretically, you want to maximize future free cash flow. Unfortunately, there are many inputs: rev growth, solid roi on capex, lowering non-essential costs, employee retention, unit costs, brand etc.
Management teams have to distill the message about what they want in a way that many employees can get behind. Nestle was too focused on unit costs, and should have likely added one more constraint like rev growth, but if they added too many, employees as a group would lose focus.
Most businesses have 2-3 essential business drivers. 1 is never enough, 4+ is likely too many to focus on.
That looks on the face of it nice and worthy but it's rather be meaningless because those are not actual goals. Those words are way too loose for that. The other thing about it is it smells like a marketing phrase rather than anything truthful
You can use this list in any way. For example when you want to increase your product price. This is fine when it is good for the customer (because they will get a better product). But it is not fine when you do it for the shareholders alone.
They are also goals because the ultimate goal is to please the customer, then the employee and than the shareholder.
Does that also mean it is always a great idea to decrease your product price?
In the consulting company where I work at employees come before customers. Employees are the single most important asset and much harder to replace than customers.
Google uses a hierarchical system for quarterly and annual goals called OKRs (Objectives and Key Results) that tries to align goals for the company, orgs, teams, and individuals.
Interesting. How did you like it? Does every person at Intel have their own quarterly OKR list, or do they stop propagating down at some level? Were they always on time? How did lower levels give input with regard to what they thought were important goals? Or did really everything come top-down?
> Tolerating misbehavior out of fear of losing an employee.
What if said employee pulls in 10x, 100x more revenue/value than average worker for the company? Would you fire him because the rule book say so? That said I trust in effective communication as soon as possible to manage difficult situations or misbehaviour. Often the reasons can be deeply personal or family related and people are preoccupied with stuff outside work. We are human and human relations are variable, not absolute.
In my experience only (all disclaimers apply) I have never seen an employee whose productivity outweighed the damage they did to the rest of the team if their misbehavior was tolerated by management. I understand how scary it can be to have to let someone like that go, but the dozen or so cases that I had good visibility into over my career the ones where the employee was accommodated all had worse outcomes than those where the employee was let go.
Before leaping to firing that person, you'd want to talk to them and explain that the misbehaviour has to stop. There may be personal reasons, and the person may need support to change. But if the behaviour doesn't shift then yes, dismissal is absolutely appropriate. The demoralisation stemming from a misbehaver who is protected from on high can be huge.
Great performance does not require being an asshat. It's (nearly?) always possible to find an equivalent performer who's pleasant to be around and a constructive team member.
> What if said employee pulls in 10x, 100x more revenue/value than average worker for the company?
Unless you're pulling in that revenue directly, because you're in sales or negotiating deals with other companies, it's impossible to make the claim that someone is 10x more valuable to the company.
Of the most highly productive devs I've ever known, most of them are not 10x more valuable, they are just more productive. The very few real super-programmers I've ever seen (maybe 3 of them in 20 years) have skyrocketed into the stratosphere, make lots of money and lead large teams. So, I don't think anyone super valuable would get fired, but my experience is that they get moved (up).
Most highly productive devs I've known are productive people that are prolific and also do a proportional amount of damage. I've known several people in different companies that were smart, prolific and very opinionated, and they would inflict their ideas on everyone and get support from management and not enough pushback from other devs. They implemented processes that were needlessly complex and caused measurable drain on the productivity of everyone else. You can lose your 10x productivity benefit really fast if you suck 10% from everyone else.
One guy I knew was a 10x performer and lead a team, but had a nasty attitude and took down the morale of everyone he talked to regularly. Even though he performed, he was causing everyone around him to go slower and work less. To the parent comment's point, this guy's productivity kept him from getting fired despite his misbehavior.
Unless you're giving everyone that benefit of the doubt, then you're just reinforcing the idea that the rules don't apply to everyone. But even then, there's only so much that a personal/family problem can excuse.
Way late on this, but this thread has been referenced in things like Oren Ellenbogen's Software Lead Weekly, so maybe the reference will help someone...
Bob Sutton's "The No Asshole Rule" calls this TCA - total cost of assholes. TCA incorporates the cost to replace people who leave because of the asshole, time spent by manager calming people down and cleanup, customer relastionship issues, etc.
Everywhere I've worked, the folks running the show have too much ego and political capital invested in products or projects that are turds. The result is massive financial losses for the business.
My experience has been similar in the past. In more recent times I've seen numerous products rewritten from scratch by completely new teams on different continents - the mindset being that they would do things "properly" - only to encounter all the problems that the original teams had to deal with, and re-implement the same mistakes, but in a different language. In one case, the new team quit to a man ( and obviously, the old team were nolonger around either ), resulting in the loss of two complete product implementations, and all the domain and implementation knowledge.
There is no such thing as "done" software. Everything program that is written must be maintained but PHB's never even consider maintenance costs.
Consequently, there is no such thing as a "build" and "maintain" phase of software. Something that takes 10 developers to build will take 10 developers to maintain.
When I had a corporate job, they were overly controlling about schedules and how much you could earn in a way that was completely unnecessary and that I felt came back to bite them. People who wanted more money would take on part time jobs for evenings and weekends. Then, when management tried to put a gun to our head and insist we work overtime, these people had prior commitments and couldn't be there. Bonus points for the whole atmosphere of fear with the entire approach of trying to pressure people to work overtime on demand, at the convenience of the company.
None of this was really necessary. Every single year, they watched the backlog of work gradually climb over the course of the summer. Then, around September, they began insisting on overtime at psychological gun point to try to clear the backlog. It would have been entirely possible to allow people who met certain quality standards to work some overtime during the summer and cap how much could be worked. People could have competed for overtime slots instead of feeling forced into it. It would have worked vastly better for everyone.
Of course, an elegant solution like that takes a bit more planning on the end of management. Simply demanding extra hours at a certain point is a simpler, brute force method. But, I felt it had a lot of downside to it and was mostly avoidable for the company in question.
It makes me wonder how many companies basically create drama of this sort. Because this crisis was entirely created by management, IMO. There was zero reason they had to wait until it hit a certain volume and then force overtime on us.
Task mastering. Ie a Focus on pumping through the JIRA tickets or equivalent as fast as possible. Meaning no time for respite or learning. Meaning lots of shitty metrics and pressure / humiliation if you don't meet them. I get a weekly report of tasks that took more than 25% over estimate within the team and names, for example. It doesn't help that anyone else can log time against my JIRA either. A three person meeting could burn up all the time.
At my company we had a good manager. Whenever we saw a problem in the systems, even a minor, low priority one, we opened a JIRA ticket for it. After all, JIRA was there for the convenience of the workers in the IT department.
Then a new manager came in. When he discovered we had JIRA, he told us he was going to use JIRA to evaluate us on how fast we fixed tickets and how many tickets we fixed.
We in the IT department maintained JIRA. That night I completely purged virtually all tickets of tasks that could not be done quickly. I put those tasks in a directory on my laptop only visible to me. From that time on, we only opened tickets for simple tasks we could do quickly. As volume counted as well, we would open multiple tickets for a multi-step task, whereas before we would have opened only one.
Eventually there were some office politics between divisions at the company and I and others were laid off (which I knew was coming, but decided to stay for the severance). When I left, the files containing all the the system flaws I had noted were erased.
Honestly, poor management aside....I cannot believe you are bragging about this. Rather than confront and address the problem, your solution was to actually delete shared knowledge?
Confront and address? You ain't gonna get your boss fired without a scratch. He's just bragging that he achieved a local maxima, and I think he's correct.
Maybe during the exit interview he could have said, "oh by the way, there's a file on my computer..."
But then he might suddenly find the severance offer is retracted.
> Someone who finds the forks, crashes, etc. a personal offense, and will repeatedly risk annoying management by fighting to stop these things. Especially someone who spends their own political capital, hard earned doing things management truly values, on doing work they don't truly value – such a person can keep fighting for a long time. Some people manage to make a career out of it by persisting until management truly changes their mind and rewards them. Whatever the odds of that, the average person cannot comprehend the motivation of someone attempting such a feat.
In answer to your question: yes, I do. Just like the rest of your link states, it pays off.
I got burned on this once. I was the most senior engineer on a team and spent a lot of time coaching and reviewing the work of college hires, which meant I didn't output as many raw task points as everyone else. I was called out on it so I stopped helping as much. My task completion shot up, but team productivity and quality went down. Overall a negative.
This was back when I was a junior dev, but I had to demo how an unprivileged user could delete every user in our system before I could work fix that section of code without getting fussed at for trying to discuss something unimportant. Even then the immediate response was, well we have a nightly backup so we're fine.
Not wanting to take the time to evaluate if the decisions made at the start of the project are still the right ones. It somehow feels safer to say "we aren't going to change anything" and keep accelerating toward the cliff.
Something I see a ton is management by crisis - 20 people from an organization could tell certain managers that there will be performance issues in 3 months if we don't pay down tech debt, but nothing actually sinks in until there is a performance crisis in 3 months.
Makes you think. Maybe you need a "villain" in your team that brings the crisis NOW, when only seeing it approaching on the horizon. Making future problems real
The corollary to that is that many technical types will make things work despite management ignoring the fundamentals. Sometimes its better to let something fail sooner than to make it work, when it's clear the fundamentals will eventually overtake the effort.
Ya, great point, though at big companies it can be very hard to just let things fail. Though that reminds me of another answer to the parent question which is managers who reward people who fix broken stuff, but don't reward people who didn't build fragile things to begin with.
Want to jump ahead a few years from Mythical Man-Month? Let me recommend Peopleware by Tom DeMarco and Tim Lister.[2] It's painful that we haven't crawled far out of the 80s practices.
The first chapter says: "The major problems of our work are not so much technological as sociological in nature." Sorry Google Memo Dude. DeMarco and Lister called it in the 80s.
Speaking of DeMarco, he also wrote a book about controlling software projects before Peopleware. Then in 2009 he denounced it. [1]
To understand control’s real role, you need to
distinguish between two drastically different kinds
of projects:
* Project A will eventually cost about a million
dollars and produce value of around $1.1 million.
* Project B will eventually cost about a million
dollars and produce value of more than $50 million.
What’s immediately apparent is that control is really
important for Project A but almost not at all important
for Project B. This leads us to the odd conclusion that
strict control is something that matters a lot on
relatively useless projects and much less on useful
projects. It suggests that the more you focus on control,
the more likely you’re working on a project that’s
striving to deliver something of relatively minor value.
I always think about that when I'm doing a Sprint Review.
Is the A/B situation DeMarco describes about knowing ahead of time that A will turn minimal profit while B will turn maximal profit?
If so, the conclusion reached seems right: tighter profit margins require tighter control. And control requires resource, which is a cost that further diminishes returns.
But if the described scenario is about not knowing ahead of time whether A or B will turn a large profit, how should this be handled? Regular review, and a scaling-down of control as confidence in profit increases?
Of course, profit is only one metric. There may be others that are more critical.
My metric for projects is that if I'm not returning near-term value at least double my billing rate, it's probably not worth doing.
If you are, the difference between 2.2x, double, and 1.8x is pretty negligible - non zero, for sure, but not worth the additional 20% effort to minimize variance.
If you aren't, as he says, no amount of diligence will fix it, because it's simply the wrong project.
It's the classic penny-wise pound-foolish.
So by my conclusion, many of the 'project management' activities that people do are at best wasteful or indeed actively harmful.
I agree with your general point. It's difficult/impossible to get accurate numbers. I would contend that we have a general idea. Management nearly always imposes more control when it's nervous the costs are approaching the rewards. The flip side is Silicon Valley VC investing. Tonnes of money is thrown and very little control is exercised by investors, at least at first, because the rewards devour almost all costs. The programming equivalent might be Big-O notation. We don't know _precisely_ the costs of an algorithm, but we can do general comparisons.
DeMarco also seems to agree.
The book’s most quoted line is its first sentence:
"You can’t control what you can’t measure." This line
contains a real truth, but I’ve become increasingly
uncomfortable with my use of it. Implicit in the quote
(and indeed in the book’s title) is that control is an
important aspect, maybe the most important, of any
software project. But it isn’t. Many projects have
proceeded without much control but managed to produce
wonderful products such as GoogleEarth or Wikipedia.
The worst mistake I've seen management make over 20 years of software development is not listening to the technical people.
Estimates get shortened. Technical decisions are overruled for business or political reason. Warnings about undesirable outcomes are ignored. Sheer impossibility deemed surmountable.
I feel this is the worst mistake by management because the technical people are the ones who suffer for it. Overtime, inferior software, frustration, technical debt, lack of quality, are all things management doesn't really care about because they can always just push people harder to get what they want.
Best case, good people leave and the company spends more than it needed to on onboarding new people.
Worst case, good people leave and your team never fully recovers, the product is technical garbage and you end up spending on a rebuild, or the product fails. Considering the product is the foundation of the project, ignoring warnings from the people building it would be like ignoring someone yelling "Fire" inside a wood mill. They know the product, wood, doesn't come out very well given the current circumstance, fire. We should probably listen.
Ultimately, more money and happier people could have been had if things were done pragmatically but correctly. There is of course such a thing as an overengineered product, so there is certainly a balance between pragmatism, speed and quality. But the mindset being brought up here is that you can forsake quality and happiness for more profit without consequence, and I suspect that's not truly the case.
Treating different departments differently in a company. In my experience the sales and marketing teams get the new toys, shiny offices, and budget for fun. Tech teams (this includes eng, ops, it, etc) get whatever's left.
Reinventing the wheel when new management come in, i.e. don't check their ego at the door. The new management think they have to make their mark/impact/whatever in the products/processes by throwing out the old's. I've seen new VP/CTO came in, canceled a release pending product, and promised to rebuild the product quickly with his oversight. As with any rewrite, the project dragged on and on. The product ended up delayed for a year and half. The company bellied up shortly after.
Stressing and emphasizing employees to give trust to a company but not giving any in return.
Loyalty and "Do it for the team" sentiments are commonly paraded, but if you hide company performance and important developments, you not only have employees making decisions without context, but also sow seeds of distrust and signal you don't see your workers as capable minded adults.
I have held management and non-management careers in roughly equal proportion over my career. My list would look like this:
1) believing you can dramatically change the performance of an employee -- it's very rare to save someone and less experienced managers always believe they can.
1.5) corollary to the above: not realizing the team is aware and waiting for you to fix the problem and won't thank you for taking longer to do what's necessary.
2) believing that people don't know what you're thinking -- people see you coming a mile off.
3) thinking you can wait to fix a compensation problem until the next comp review -- everyone waits too long on these.
4) believing HR when they tell you that you can't do something that's right for your team -- what they're really saying is that you have to go up the ladder until you find someone who can force them to make an exception.
5) not properly prioritizing the personal/social stuff -- at least this is my personal failing, and why ultimately management has not stuck for me.
6) believing your technical opinion matters -- I've seen way too many VP's making technical decisions that they are too far from the work to make, trust your team!
It'd be fun to see a list of these from the non-management point of view. I'd start off with the inverse of #6 above:
1) believing your technical opinion matters -- the business is what ultimately matters.
In response to 1 and 1.5 the company should expend reasonable resources to support those who are struggling, and these rules are laid down in Human Resources policies (as I'm sure you know).
Management are just as bound by the rules as non-management, or should be.
Of course, "reasonable" here has a strong subjective component.
I have seen dramatic change in an individual, but it's the exception. More likely is a slow progression to dismissal. This can be handled well by management with appropriate skills, but is hard and is a often suboptimal. However it's possible that this process is a necessity in any organisation that supports its staff. Wishing it to not happen is unrealistic, and indicates naivety. Perhaps these naive, disgruntled employees are part of a larger problem?
6) believing your technical opinion matters -- I've seen way too many VP's making technical decisions that they are too far from the work to make, trust your team!
This! It needs management people who understand their role as being "facilitators", rather than being "decision makers". And they are kind of rare.
You can't change it dramatically overnight, but you can certainly change it enough that it's worth it.
It's a boatload of work. Expect to spend as much time per week as you usually spend on 3-5 people. Then make the call if you can afford to do that. It's buying you a lot in terms of employee goodwill and team morale. (The second one only if you don't neglect the team over it, obviously :)
In our current job-hopping world, where you are lucky to even get 4 years from an employee, you can take someone from good to great, acceptable to good, or bad to acceptable in the time you work with them. Your investment should almost always be on the first two, especially because the last one is a much bigger investment of time and energy. Keep in mind many times what you're fighting is not just lack of experience or some other easily fixable thing, you're fighting personality traits the person has had for years, and will continue to have (to a lesser degree) even if you _do_ "fix" things.
It is one of my signals of inexperienced management that they believe they can/should take on this sort of challenge.
Yeah, ~10 years as a manager (and 30 in the industry) is not a lot of experience. But it's enough to know that "focus on the stars" mostly aims at making the managers life easier - anybody can manage a team of great performers.
Of course it's a judgment call. Some things, you cannot fix. But some things, you can, and the cost of doing so is much less than rehiring. Good management means making those judgment calls, not just saying "meh, I don't care about low performers, too much work".
Maybe, just maybe, that's a tiny part of the reason people on my team seem to stay longer than 4 years. Because we don't just treat them as disposable cogs.
I'd be happy to discuss over a beer. I don't believe there are any hard and fast rules in life, and I've tried to help people more than once in my career (currently I do it in a non-management capacity which is arguably harder). But I think we can agree some situations aren't going to be saved. Good management is knowing how hard to try and when to stop.
Always happy to discuss things over a beer. (Well, I'll have white wine, if you don't mind ;)
And yes, not every situation is salvageable. Alas. Knowing when to stop is why I'm in favor of having a defined process well before you come to the "change, or else" part. That prevents the sad effect that your bar shifts as you collect reports, just because you've got more things to do.
My number one pick is always finding the next new thing in management from a New York Times bestseller. Then sending an email on the greatness of the process to the whole team and lo-behold expecting everyone to embrace it.
2nd for me is getting stuck on project names. It seems finding a cool sounding name is somehow more necessary than how it works.
To quote an example, we were using the waterfall model for our development. Then somewhere management read about "Rapid Application Development or RAD" and we embrace it ASAP. But not before dissing that RAD was not the word they wanted because rad the word had negative connotation to it so we needed a new name.
395 comments
[ 2.0 ms ] story [ 297 ms ] thread(Similar problems can happen when a bunch of people with no management skills decide to found a company and start hiring people.)
There were some mistakes that I was never able to recover from, like being too friendly with the people who reported to me - that makes you really dread the prospect of having to lay someone off, makes it hard to give difficult feedback, etc.
Eventually, after being a manager for several years, I decided to go back to being a developer, and now I'm much happier.
This reminds me of an article from Rands in Repose:
http://randsinrepose.com/archives/dna/I also believe that management should be about facilitating your team's work, rather than endorsing your team's responsibility.
2. Fear (you're getting a lot of attention and praise, this somehow makes me look bad)
3. Short sightedness (that's a good idea, we can't use it here, now go do something productive)
A good manager loves his team and opens doors, prevents road blocks, and facilitates approvals for them. He is a steward of their success. He removes fear of failure. He is not self absorbed but finds joy in the team. So, without these attributes, the negative effects are too sad to write about.
On my first project I learned that every time a PM said the word "hope" (as in "I hope we can meet this deadline") that we were screwed. It was said a lot.
- Focusing on fixing problems, rather than preventing problems
- Acting as yes-men to bad upper-management strategy, thereby creating a layer of indirection between the people who think it's a good plan vs the engineers who can explain why it's not quite that easy
- Trying to use software tools (e.g. Jira's burndown charts) to quantitatively/"objectively" measure engineers
I've seen so many "managers" spend all their time staring at Jira instead of talking to their actual team or reading the code.
I'm convinced Jira is an anti-pattern for management
Makes me think of "There are two types of managers: shit umbrellas and shit funnels".
There seems to be some sort of quasi-religious belief in the fundamental averageness of humans; consequently the difference between developer salaries at any company varies by maybe 50%, whereas the productivity varies by at least a full order of magnitude.
Until "management" realizes this, the only way that a developer on the upper end of the productivity scale can capture their value is to found their own company. I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
The outcome isn't higher quality or better work, just capture of perceived value. The super productive developer has a risk/reward ratio. When you get a little older, stability has a value of its own.
I've always heard this is the Netflix model.
> difference between developer salaries at any company varies by maybe 50%, whereas the productivity varies by at least a full order of magnitude.
I like your thought process but do you really believe this is possible? There are few fields where you can observe order of magnitude differences in salary. As you said, human nature seems to reject this, likely because it does not really occur in the wild. Even in sports it is rare for a particular position to have pay disparity to that degree.
What's obvious about that? I can pretty well guarantee the existence of golfers who need 10x the strokes of professional golfers. I can definitely guarantee the existence of people who can't manage 10% of the running speed of a gold medal sprinter.
The 10x programmer idea also applies to adults working as programmers. If you were to limit the runners to an analogous population (runners, I guess, or even healthy adults), I'd definitely take that bet.
[0] His peak speed was a bit faster (~27 mph), but the point stands...
Most people could beat a par 3 in less than 30 strokes given 1 week of exposure to golf.
> I've always heard this is the Netflix model.
Also, Valve. By some accounts, this creates terrible working environment, where people are competing instead of cooperating. Not to mention it distorts the incentives, as devs are heavily incentivised to project an image of being impactful high-achiever (as oposed to actually just being one, and not having to manage one's image). Of course, it also happens in regular companies, but here higher stakes make the game more vicious.
In a team environment that is not so easy.
Is it the code, the communication, the business sense, building a good team? Who made that million? And who only made 10 bucks?
On the other hand, this seems like a fundamental management failure. The identity of the star performers has not been a mystery to the actual engineers working on every team I've ever been a part of. The information is not unknowable. Also, we already have a pay grade of "10 bucks": Some people get fired.
Your idea works in teams where everyone at all levels is switched on and tuned in.
https://news.ycombinator.com/item?id=15033386
Seems like management is damned if they do and damned if they don't. If they reward high performers in proportion to the value they generate, they kill the culture of the company. If they reward everyone fairly & equally, then all the high performers quit.
Full employment theorem for entrepreneurs, I guess. If management is rational, they'll never put the whims of one high-performing employee over the culture of the company as a whole. If that employee is rational, he'll quit and take his work directly to the market. This creates a fresh stream of new startups, each of which either has to be bought back for their true market value, or else becomes the new hot company that hires the masses and hemorrhages its high performers.
If not, it doesn't matter what the facts are from management's POV, it will lead to the same effect on trust & morale. Most people believe they are high performers and the work that they do for the company is valuable; if they didn't, they probably wouldn't do that work. If you have a workforce who believes they are all solid performers and then they have to confront the fact that management believes one of them is 10x better, you've got a recipe for a toxic culture.
That's a major part of why I consider open salaries to be a terrible idea for top performers. Performance and popularity are frequently uncorrelated, and I'm not talking about the asshole genius trope. You don't want to force your best performers into allocating lots of time schmoozing to ensure everyone loves them and isn't offended by their higher pay.
Almost nobody thinks they're below average in performance, but mathematically some people have to make less than average.
In many organizations, quadrupling the number of people that report to you is worth doubling the delivery time, hands down. Number of reports is an easy measure of influence.
On top of that, your unicorns are only really worth their wages if they are solving problems no one else can or if they are mentoring others.
With the right unicorn, one can act swiftly, groom a lean architecture, and make instinctive calls that move the needle of the entire roadmap. Real unicorns present sound technical strategies and inspire new opportunities that help push the company to the next level.
I think we need to put the myth of the 10x developer to bed. 99% of the time, the 10x guy is just someone who solved the same or similar problem at his or her last job and are simply exercising their experience. Sure there are outliers, but that's the same in every field - whereas in programming 50% of people believe that they're the 10x guy and that all their cow-orkers are slothful idiots.
Some tough problems that took other skilled developers months they could solve in a couple of days and they could consistently do it across the tech and domain sphere.
I think the issue is people claim to be 10x, if you're claiming to be 10x then most likely you are not, the 10xers I've met have all been very humble.
If you want to talk about it from a financial perspective, talk about the rate of return.
Can one developer do ten times the work any other developer does during a week? Probably not.
Can one developer have a rate of return such that they get ten times more valuable work done? Almost certainly.
So developer A delivers 3% improvement per year and developer B delivers 6% improvement per year. Across a career, if you start with 100 units, developer A delivers 245 units at the end, and developer B delivers 2008 units.
- they didn't work well with others and soaked up a lot of management time dealing with their shit.
- they had really limited areas of expertise where they were amazing, but couldn't fill in for a sick colleague.
- they worked in 2-3 day sprints for ridiculous hours, and then stayed home or might as well have.
I'm sure there are incredible people out there who can 10x and also be great team members, and I'm sure management are idiots if they don't pay them 10x.
But in my experience, the people who claim to be 10x are usually just insufferable egotists who have no idea of the pain they cause for everyone else.
I heard a joke once : Complicated problems requires complicated solutions. Unfortunately, all problems are a bit complicated if you are a bit thick.
The gist is that complexity grows faster than it needs.
Ignoring people that can't make things over a certain threshold, there is a large group of programmers that can make things work, but are not able to build things clean enough or put in the effort required to build testable and maintainable code, simplify support and reduce runtime costs.
Knowing when to stop and what to spend some extra time on is also important.
I'll hesitate to add reducing future development costs, because I've seen too much overly complex code written in a misguided attempt to handle unknown future requirements.
All these costs can easily build up to 10x over time.
A factor is that a team probably smoothes over the effects of one or two bad coders in a way that it's not noticeable at short term - the code is delivered and the worst bits are plastered over, but the long term performance is reduced.
Preferably the requirements are explored by the team with the stake holders.
Probable examples of 10x, Steve Wozniak for Apple, John Carmack back in the day, Dennis Ritchie, Tim Berners-Lee, Jeff Dean.
If you aren't getting 10X output, it's possible that the problem or situation you have placed the person limits them to less than 10X.
I do agree that there are far more people who claim to be 10X than that there actually are and that many come with costs.
Also it is simplistic to claim a person is 10x. A more accurate measure is seeing a 10x effect. Writing key software that saves a company or gets a company bought is a 10x effect. I've seen that happen several times.
The other points you make might be big problems depending on the situation, but this? What's wrong with someone taking a day off after a burst of productivity? This seems like classic valuing of face-time over results.
The "10x" works 16 hours a day for 3 days and produces a chunk of code that works, does what it's supposed to, ahead of schedule. So far, so awesome.
But the rest of the team is working away on the rest of the project. Suddenly they're lumped with a huge chunk of code that they don't understand. They weren't involved in the design decisions, they didn't pair-program or brainstorm any of the code. It's pretty impenetrable. And the "10x" who wrote it is now unavailable after that "heroic" sprint so they can't even ask questions.
Teams work together. Heroic sprints of productivity followed by absence is not working together. It's leaving other people to clean up your mess while you claim the credit.
Some things just cannot be pair programmed. They are simply impenetrable to average minds at the time.
Your argument sounds like one for a Handicapper General, to be honest. (If missing the reference Google it). You want to handicap everyone actually competent with a slower partner. And before you claim the usual: it is ok to write suboptimal but simple to understand code, consider that in some cases we actually DO care for performance and size of code..
1) A very small amount of code
2) Isolated from everything else
3) Conceptually easy to understand what it's accomplishing (even if the implementation itself is interesting and non-obvious)
Most people would kill for a colleague who wrote code like that.
No, instead what you most often get out of people like the OP is mentioning (because I too have worked with and been burned by them) is some weird pseudo-ORM they wrote from scratch because they don't like how Hibernate handles joins.
Naturally, there's no documentation or even comments because it should be obvious why paxos was poorly implemented in this weird pseudo-ORM framework. And of course, the entire codebase was rewritten overnight to use this new framework as well.
I do agree that sometimes managers want to fit "chefs" into a McDonald's like cooking process.
This is a well known major impediment for creative persons in any field. You can explain things after they are done, not while you are doing them.
This is why average developers create such a drag on productivity. They always want meetings, explanations -- in short, anything that slows down the work horse and make them look productive in the process.
It's at least a unicorn, so companies shouldn't worry about hiring any 10x developers because they are THAT rare.
What they should do is avoid the developers that actually cost productivity. I'm a 10x developer compared to someone else not because I'm 10x average but because there is a 1/10th average dev there.
I'd say try to find the people who are just way over average (2x devs) and pay them twice the money if necessary. The problem is finding these people and making sure you aren't paying someone average twice the pay.
I think it depends on Industry / Role. A creative person in Advertisment or a good chip design engineer or someone great with Algorithm are often worthy of 10 or 20X compensation. Whats wrong is that many people think 10X guys can exist on Application layer / Front end. I think its very hard to do that
Of course it's hard to be 10x there. The same way it's hard to be 10x on the algorithm side. It's also a matter of scope - if you have a giant backend, and your frontend is a single text box, it's hard to tell if somebody is 10x. As the FE scope grows, you start seeing the differences.
Otherwise, I am a thoroughly mediocre performer. I'm a minimum effort Loser[1] all the way.
[1] https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-...
I've had days where I've ended up doing literally nothing, but still objectively outperform some colleagues because they rammed some shitty unstable undocumented race-condition hack into the codebase.
I think the -1x programmer is even more common, the ones that have negative productivity and actually create more work for other programmers. I've encountered many of these types over the years.
They are usually the very hard working type too. The kind who when encountering a problem always solves it by piling on more code, never refactoring, never taking a step back and thinking about the problem. You don't want to be seen idling at your desk, better keep typing.
A 2nd edition of Peopleware summarises it; the 10x programmer is not a myth, but it's comparing the best to the worst; NOT best to median. It's also not about programming specifically; it's simply a common distribution in many metrics of performance.
The rule of thumb Peopleware states is that you can rely on the best outperforming the worst by a factor of 10, and you can rely on the best outperforming the median by a factor of 2.5. This of course indicates that a median developer, middle of the pack, is a 4x developer. Obviously, this is a statistical rule, and if you've got a tiny sample size or some kind of singular outlier or other such; well, we're all adults and we understand how statistics and distributions work.
Peopleware uses Boehn (1981), Sackman (1968), Augustine (1979) and Lawrence (1981) as its sources. [ "Peopleware", DeMarco and Lister, 1987, p45 ]
I think too much faith is put in the abilities of most management; otherwise this Ask-HN article might not have been asked.
In my experience, the '10x' programmer is not necessarily more productive (as in amount of work done in a certain timeframe), it's that the 10x programmer does better work, resulting in time savings down the line. Fewer bugs, a more flexible architecture, etc. It can be the difference between being able to easily add a new feature in version 2 and having to rewrite half the application.
In my experience, 10x programmers are hard to manage, they complain all the time, no one wants to work with them, their ego gets bruised easily.
But you keep them around because they seem really smart until you look at overall work produced. They might produce 10x work over a weekend but over longterm, they hardly produce any more work than average programmer.
In my interview process, if anyone even slightly hints that they are smarter than average, I end interview immediately. My team is composed of average programmers who get along and have fun working together.
The 10x effect is not on the immediate output of a particular development task. It's the lifetime value/cost of the choices made. In this respect there are many 10x developers, the ones who can factor complexity into a composition of conceptually and realized simple components. This works if they're presence is early in development, otherwise you may need a 20x to turn a 1x codebase into a 5x one.
Hiring for such micro optimization is inefficient at best, ineffective usually, and counterproductive at worst.
The existence of a 10x developer is a question of what you use as a reference point for your scale.
At many places, the best thing that can happen to a manager is for their team to become "too big". Oops, now they have to split it into two teams, and suddenly they're a Director instead of a Team Lead (or whatever titles are used).
That's interesting. Not the total compensation of the people she manages?
And so, off we go to empire-build. It's a pretty hard impulse to resist. Especially since many places consider "growth" the ultimate goal.
Here in New York, this is especially acute. Many finance companies have thousands and thousands of developers. They'll have a team of developers (costing maybe $500k/yr total) working on a problem which a single excellent developer could easily accomplish (and be happy with $250k/yr).
Tons of companies are penny-wise and pound-foolish, mostly because programming is still considered a low-status profession.
> Until "management" realizes this, the only way that a developer on the upper end of the productivity scale can capture their value is to found their own company. I sometimes wonder what would happen if some company simply offered to pay 3X the market rate and mercilessly filter the results.
There are companies which do this, but they're almost exclusively pure tech companies (ex. Netflix).
Management doesn't want super-performers, because they can upset the power dynamic.
Developers must have lower status than management, and super-performers can challenge that.
Companies are actually social networks. Instead of gaining status by posting selfies of yourself in exotic locations with cool people, you gain status by making high status noises in emails, talking in a high status way, having many people reporting to you, and having equity.
Sometimes getting things done is relevant too, but not as often as it should be.
For me, it's actually not about the compensation for its own sake. It's that compensation is a strong signal of how the company thinks about the status of developers.
3 average programmers who understand your code adds a lot of redundancy.
And as an interviewer, it is really hard to identify who is 10x and who is not. But very easy to tell who has enough knowledge and pleasant personality. Programming in most companies is team sports, not a marathon.
There are tons of companies with thousands and thousands of engineers who could easily make do with 100-1000 engineers if they were willing to attract and retain top talent.
> And as an interviewer, it is really hard to identify who is 10x and who is not.
That's definitely true, but top companies manage to do it. And when they make a mistake, they rectify it.
Team sports still pay to attract top performers. The best players can be a force multiplier for everyone.
I know many programmers from FB, Google, Amazon, Apple. There is no way they are 10 or even 2x. Some of them I worked with too, so I know their work. Others are just friends, we discuss technology all the time.
> Team sports still pay to attract top performers. The best players can be a force multiplier for everyone.
You are right team sports do pay a lot of money for top talent. Unfortunately, my experience with 10x programmers, as a teammate and as a manager, has always been negative. Most of them barely produce more than average programmer on long run but demotivate entire team or department by their arrogance, talking down, complaining, rudeness.
I'm not advocating employing talentless monkeys, they still need to be good at what they do but from a business perspective it's a more complex and wider ranging decision.
I think it is more like 90% of time the person invests and 10% performance bonus. That way the one with to 50% higher salary would probably be 5 times as performant as the average dev. If that is fair, is a different (and very difficult) question.
Attempting to build a "quantity over quality" organization is bad for the reasons you list, but "all quality, no quantity" is a close second in being detrimental.
Each critical "4x" employee that you have is only beneficial if they stay at your company. Burning them out because a company is ruthlessly focused on keeping their staffing lean by only hiring "4x unicorn-ninja-guru-rockstar" developers is a quick way to trigger management to swing the pendulum too far in the opposite direction.
Edit: fixed a typo
I've got many many years experience, can solve any challenge, and work at twice the rate of most of the developers I have worked w/ in the tech stacks I focus on(ruby, elixir, reactjs/javascript/ember/angular etc)..
So I decided to go at it on my own and charge a rate I felt I was worth. Best career decision I've made so far. I think every developer reaches a point where the only way they can make more is to move into management and stop being a developer, or branch out on their own. I myself hate being a manager and love being a developer.
Managers generally seem to think that a developer is a developer is a developer. When there is a clear difference between a $50/hr developer and someone who can charge $250/hr in the time it takes to solve the same problem. What takes a $250/hr dev 1hr to solve correctly, might take a jr dev 5hrs to just "get it working."
I was complaining one day about having WAY to many clients. He said and I'll never forget it, "if you have to much work to do, you're not charging enough."
I started 2.5 years ago at $70/hr and am now at $135/hr after several rounds of raising rates. Sometimes I would lose a client when raising my rates, but that was ok and really was the goal. They were usually the most painful to deal w/ anyway. My best clients usually never even balked at it. Just said ok and kept on paying.
I then got to the point where I needed to give myself a brand and bring on another developer because I started taking on very large green field projects(this was something my lawyer and accountants suggested for insurance/legal/protection reasons).
At that point I got more advanced and started doing some content marketing, facebook ads, and google ads to keep the pipeline running. The hardest part was keeping clients lined up in the beginning. Because I would get a client, work the client and during that time stop looking for new clients. Which lead to a lot of down cycles with no work to be done while I looked for the next client. This is still an ongoing thing we're working on at this time to improve our client acquisition techniques.
I also use a pretty unique billing structure that my clients seem to really love. You can read all about how and why we chose to do it this way here https://blog.grillwork.io/why-we-no-longer-use-fixed-price-c...
My partner and I now do about 20-30hrs a week for clients pretty steady and spend the rest of the time working on projects we own fully that we hope can generate recurring revenue. It has been a really fantastic journey that I hope never ends.
Every day get really inspired by the stories on indiehackers.com and just find this way of work extremely fascinating. Very rewarding both personally and financially so far and I don't think I'll ever stop doing what I'm doing if I have anything to say about it.
I think this, above all else, is the key to the frustration and ever decreasing salaries we're seeing. The market has spoken: employees just aren't worth that much. If you want to capture more of the value you create you'll need to go into business for yourself. It's risky, but sitting a desk in a huge office watching rates go down and down will probably turn out to be more risky in the end if you can't retire before it gets too bad.
Having said all that, would you mind expanding on exactly what you did?
There is a chance of the four who are not as capable today, 1-2 might become a stars in the future. He/she will be more loyal because of the opportunity the manager gave them.
As a developer, what I want is kind of the opposite. I don't want to be paid more than others if I'm more productive, I want to work fewer hours. Pay me for the value of my work, not how long it took to do it.
https://jobs.netflix.com/culture/#introduction
* the employee isn’t good and everyone knows it. Manager lacks discipline or has a low talent bar.
* the person is very talented, but a jerk. Manager is worried it will hurt productivity to get rid of them.
* Building a one more generation of product than the market supports (so you build a new version when the market has moved on to something new).
* Rewarding productivity over quality.
* Managing to a second order effect. For example when Nestle' bought Dryers they managed to 'most profit per gallon' which rewarded people who substituted inferior (and cheaper) components, that lead to lower overall sales and that leads to lower overall revenue. Had they managed to overall revenue they might have caught the decline sooner.
* Creating environments where nobody trusts anyone else and so no one is honest. Leads to people not understanding the reality of a situation until the situation forces the disconnect into the mainstream.
* Rewarding popular popular employees differently than rank and file. Or generally unevenly enforcing or applying standards.
* Tolerating misbehavior out of fear of losing an employee. If I could fire anyone in management who said, "Yeah but if we call them on it they will quit! See what a bind that puts us in?" I believe the world would be a better place.
There are lots of things, that is why there are so many management books :-)
If management had looked less at the "how much profit can we squeeze out of 1 gallon" angle, and more "how much profit can we make overall", they might have made different decisions, such as preserving the quality of the product, they may have done better overall.
Unit profit is one factor in overall profit / revenue, but # of units solds is equally as important...it's a balancing act.
> Why is overall revenue a better metric than unit profit? Wouldn't overall profit be the first-order effect?
One of the biggest constraints in a business is employee focus. Theoretically, you want to maximize future free cash flow. Unfortunately, there are many inputs: rev growth, solid roi on capex, lowering non-essential costs, employee retention, unit costs, brand etc.
Management teams have to distill the message about what they want in a way that many employees can get behind. Nestle was too focused on unit costs, and should have likely added one more constraint like rev growth, but if they added too many, employees as a group would lose focus.
Most businesses have 2-3 essential business drivers. 1 is never enough, 4+ is likely too many to focus on.
Customers, employees, shareholders.
You can use this list in any way. For example when you want to increase your product price. This is fine when it is good for the customer (because they will get a better product). But it is not fine when you do it for the shareholders alone.
They are also goals because the ultimate goal is to please the customer, then the employee and than the shareholder.
I think they are great guidelines.
In the consulting company where I work at employees come before customers. Employees are the single most important asset and much harder to replace than customers.
http://www.businessinsider.com/googles-ranking-system-okr-20...
What if said employee pulls in 10x, 100x more revenue/value than average worker for the company? Would you fire him because the rule book say so? That said I trust in effective communication as soon as possible to manage difficult situations or misbehaviour. Often the reasons can be deeply personal or family related and people are preoccupied with stuff outside work. We are human and human relations are variable, not absolute.
Great performance does not require being an asshat. It's (nearly?) always possible to find an equivalent performer who's pleasant to be around and a constructive team member.
Unless you're pulling in that revenue directly, because you're in sales or negotiating deals with other companies, it's impossible to make the claim that someone is 10x more valuable to the company.
Of the most highly productive devs I've ever known, most of them are not 10x more valuable, they are just more productive. The very few real super-programmers I've ever seen (maybe 3 of them in 20 years) have skyrocketed into the stratosphere, make lots of money and lead large teams. So, I don't think anyone super valuable would get fired, but my experience is that they get moved (up).
Most highly productive devs I've known are productive people that are prolific and also do a proportional amount of damage. I've known several people in different companies that were smart, prolific and very opinionated, and they would inflict their ideas on everyone and get support from management and not enough pushback from other devs. They implemented processes that were needlessly complex and caused measurable drain on the productivity of everyone else. You can lose your 10x productivity benefit really fast if you suck 10% from everyone else.
One guy I knew was a 10x performer and lead a team, but had a nasty attitude and took down the morale of everyone he talked to regularly. Even though he performed, he was causing everyone around him to go slower and work less. To the parent comment's point, this guy's productivity kept him from getting fired despite his misbehavior.
Bob Sutton's "The No Asshole Rule" calls this TCA - total cost of assholes. TCA incorporates the cost to replace people who leave because of the asshole, time spent by manager calming people down and cleanup, customer relastionship issues, etc.
10x, 100x revenue is only one piece of the story.
Most succinct expression of the basic problem yet - nice one
Everywhere I've worked, the folks running the show have too much ego and political capital invested in products or projects that are turds. The result is massive financial losses for the business.
Consequently, there is no such thing as a "build" and "maintain" phase of software. Something that takes 10 developers to build will take 10 developers to maintain.
None of this was really necessary. Every single year, they watched the backlog of work gradually climb over the course of the summer. Then, around September, they began insisting on overtime at psychological gun point to try to clear the backlog. It would have been entirely possible to allow people who met certain quality standards to work some overtime during the summer and cap how much could be worked. People could have competed for overtime slots instead of feeling forced into it. It would have worked vastly better for everyone.
Of course, an elegant solution like that takes a bit more planning on the end of management. Simply demanding extra hours at a certain point is a simpler, brute force method. But, I felt it had a lot of downside to it and was mostly avoidable for the company in question.
It makes me wonder how many companies basically create drama of this sort. Because this crisis was entirely created by management, IMO. There was zero reason they had to wait until it hit a certain volume and then force overtime on us.
Then a new manager came in. When he discovered we had JIRA, he told us he was going to use JIRA to evaluate us on how fast we fixed tickets and how many tickets we fixed.
We in the IT department maintained JIRA. That night I completely purged virtually all tickets of tasks that could not be done quickly. I put those tasks in a directory on my laptop only visible to me. From that time on, we only opened tickets for simple tasks we could do quickly. As volume counted as well, we would open multiple tickets for a multi-step task, whereas before we would have opened only one.
Eventually there were some office politics between divisions at the company and I and others were laid off (which I knew was coming, but decided to stay for the severance). When I left, the files containing all the the system flaws I had noted were erased.
The new manager was laid off shortly after I was.
Maybe during the exit interview he could have said, "oh by the way, there's a file on my computer..."
But then he might suddenly find the severance offer is retracted.
> Corollary 1. Who can, and sometimes does, un-rot the fish from the bottom? An insane employee.
http://yosefk.com/blog/people-can-read-their-managers-mind.h...
> Someone who finds the forks, crashes, etc. a personal offense, and will repeatedly risk annoying management by fighting to stop these things. Especially someone who spends their own political capital, hard earned doing things management truly values, on doing work they don't truly value – such a person can keep fighting for a long time. Some people manage to make a career out of it by persisting until management truly changes their mind and rewards them. Whatever the odds of that, the average person cannot comprehend the motivation of someone attempting such a feat.
In answer to your question: yes, I do. Just like the rest of your link states, it pays off.
This was back when I was a junior dev, but I had to demo how an unprivileged user could delete every user in our system before I could work fix that section of code without getting fussed at for trying to discuss something unimportant. Even then the immediate response was, well we have a nightly backup so we're fine.
The first chapter says: "The major problems of our work are not so much technological as sociological in nature." Sorry Google Memo Dude. DeMarco and Lister called it in the 80s.
Speaking of DeMarco, he also wrote a book about controlling software projects before Peopleware. Then in 2009 he denounced it. [1]
I always think about that when I'm doing a Sprint Review.[1]: https://www.computer.org/cms/Computer.org/ComputingNow/homep... [2]: https://en.wikipedia.org/wiki/Peopleware:_Productive_Project...
Is the A/B situation DeMarco describes about knowing ahead of time that A will turn minimal profit while B will turn maximal profit?
If so, the conclusion reached seems right: tighter profit margins require tighter control. And control requires resource, which is a cost that further diminishes returns.
But if the described scenario is about not knowing ahead of time whether A or B will turn a large profit, how should this be handled? Regular review, and a scaling-down of control as confidence in profit increases?
Of course, profit is only one metric. There may be others that are more critical.
If you are, the difference between 2.2x, double, and 1.8x is pretty negligible - non zero, for sure, but not worth the additional 20% effort to minimize variance.
If you aren't, as he says, no amount of diligence will fix it, because it's simply the wrong project.
It's the classic penny-wise pound-foolish.
So by my conclusion, many of the 'project management' activities that people do are at best wasteful or indeed actively harmful.
DeMarco also seems to agree.
Programming Beyond Practices https://amzn.com/dp/B01LYRCGA8 $14.99
detailed examples of the many problems developers encounter, including the thought process it takes to solve them
Estimates get shortened. Technical decisions are overruled for business or political reason. Warnings about undesirable outcomes are ignored. Sheer impossibility deemed surmountable.
I feel this is the worst mistake by management because the technical people are the ones who suffer for it. Overtime, inferior software, frustration, technical debt, lack of quality, are all things management doesn't really care about because they can always just push people harder to get what they want.
How is this a mistake then? It seems As Planned. It'd be a mistake if the management suffered for it.
Worst case, good people leave and your team never fully recovers, the product is technical garbage and you end up spending on a rebuild, or the product fails. Considering the product is the foundation of the project, ignoring warnings from the people building it would be like ignoring someone yelling "Fire" inside a wood mill. They know the product, wood, doesn't come out very well given the current circumstance, fire. We should probably listen.
Ultimately, more money and happier people could have been had if things were done pragmatically but correctly. There is of course such a thing as an overengineered product, so there is certainly a balance between pragmatism, speed and quality. But the mindset being brought up here is that you can forsake quality and happiness for more profit without consequence, and I suspect that's not truly the case.
I'm not particularly fond of the phrase "no one told me it needs to work like that" but I must have said that at least 10 times this year.
Loyalty and "Do it for the team" sentiments are commonly paraded, but if you hide company performance and important developments, you not only have employees making decisions without context, but also sow seeds of distrust and signal you don't see your workers as capable minded adults.
1) believing you can dramatically change the performance of an employee -- it's very rare to save someone and less experienced managers always believe they can.
1.5) corollary to the above: not realizing the team is aware and waiting for you to fix the problem and won't thank you for taking longer to do what's necessary.
2) believing that people don't know what you're thinking -- people see you coming a mile off.
3) thinking you can wait to fix a compensation problem until the next comp review -- everyone waits too long on these.
4) believing HR when they tell you that you can't do something that's right for your team -- what they're really saying is that you have to go up the ladder until you find someone who can force them to make an exception.
5) not properly prioritizing the personal/social stuff -- at least this is my personal failing, and why ultimately management has not stuck for me.
6) believing your technical opinion matters -- I've seen way too many VP's making technical decisions that they are too far from the work to make, trust your team!
It'd be fun to see a list of these from the non-management point of view. I'd start off with the inverse of #6 above:
1) believing your technical opinion matters -- the business is what ultimately matters.
Management are just as bound by the rules as non-management, or should be.
Of course, "reasonable" here has a strong subjective component.
I have seen dramatic change in an individual, but it's the exception. More likely is a slow progression to dismissal. This can be handled well by management with appropriate skills, but is hard and is a often suboptimal. However it's possible that this process is a necessity in any organisation that supports its staff. Wishing it to not happen is unrealistic, and indicates naivety. Perhaps these naive, disgruntled employees are part of a larger problem?
This! It needs management people who understand their role as being "facilitators", rather than being "decision makers". And they are kind of rare.
It's a boatload of work. Expect to spend as much time per week as you usually spend on 3-5 people. Then make the call if you can afford to do that. It's buying you a lot in terms of employee goodwill and team morale. (The second one only if you don't neglect the team over it, obviously :)
It is one of my signals of inexperienced management that they believe they can/should take on this sort of challenge.
Of course it's a judgment call. Some things, you cannot fix. But some things, you can, and the cost of doing so is much less than rehiring. Good management means making those judgment calls, not just saying "meh, I don't care about low performers, too much work".
Maybe, just maybe, that's a tiny part of the reason people on my team seem to stay longer than 4 years. Because we don't just treat them as disposable cogs.
And yes, not every situation is salvageable. Alas. Knowing when to stop is why I'm in favor of having a defined process well before you come to the "change, or else" part. That prevents the sad effect that your bar shifts as you collect reports, just because you've got more things to do.
My number one pick is always finding the next new thing in management from a New York Times bestseller. Then sending an email on the greatness of the process to the whole team and lo-behold expecting everyone to embrace it.
2nd for me is getting stuck on project names. It seems finding a cool sounding name is somehow more necessary than how it works.
To quote an example, we were using the waterfall model for our development. Then somewhere management read about "Rapid Application Development or RAD" and we embrace it ASAP. But not before dissing that RAD was not the word they wanted because rad the word had negative connotation to it so we needed a new name.