Killing the Crunch Mode Antipattern
chadfowler.com
chadfowler.com
- procrastination (trying to get in the right mood/alignment of stars before getting work done)
- burnout
- senior architects forecasting the work of junior people
- sales teams selling the world without consulting the execution team that has to build it from scratch
- management that doesn't know what it wants
- management that doesn't know technical constraints
- management that doesn't know how to manage
- tech teams not knowing what they're doing but being confident they'll figure it out
- unrealistic, arbitrarily set timelines
- realistic non-arbitrarily set timelines
- lack of skill awareness
- lack of self awareness
- politics
- lack of care for the outcome
- greed
- misaligned incentives (compensation for time spent working instead of outcomes or speed of work)
- a really good TV show running at the same time
- lack of team morale or discipline
- perfectionism
- and my favorite:
Team staying till 11pm every day for three months because of a boss who stays till 11pm for three months, trying to outstay them so he can have fun with his mistress.
Until you have the luxury of outcome ownership in place of task ownership, crunch mode is hard to love. When you become a product owner, deadlines become your best friend because they force both you and your team to optimize the work, avoid feature bloat, and get creative about your approach to the problem.
I set a crunch time for myself every day I start working on a new feature. No going to bed until I get a functioning solution, even if it's not the best ultimate scenario. While I'm sleeping, beta users are verifying my assumptions (if they like the feature, I polish it. If not, I've only spent a day in the wrong direction.)
This works for pretty much everything.
While I found the rest of the article to be thoughtful and useful, this part sounds like it was written by a pointy-haired boss who doesn't believe his employees can possibly be productive unless their butts are firmly planted in their chairs.
A one hour mid-day brain-break might make many people more productive. In fact, taking an hour for lunch and getting out of the office is a good way to clear you head, and by the time you get back, your brain might have figured out the answers to the problems you had when you left (which might have taken you the rest of the afternoon to figure out otherwise).
If you can't trust your employees to take mental breaks when they need them, then you should be managing assembly line workers, not knowledge workers.
I went to working from 40 a week to 60. The thing is, I already had trouble pacing myself. I tend to work fast and burn out fast, so 40 hours a week was already a little more work than I am capable of, but those extra 20... The only way I could even perform those extra hours was by extending my breaks and doing less work.
Now that I've paid the debt, the way I perceive my workplace has altered. I'm having serious serious serious problems doing any work at all now. I can't get it out of my head, I know I've got an insanely huge block of time ahead of me that I just can't cope with, even if there's some rushed context.
Instead of working 9-5 being productive 90% of the time, they're working 9-11, but during 9-5 they're 30% productive then make up for it by doing a heroic effort in the evening.
If they'd have just focused earlier, they'd be at the cinema with their friends.
I've been in that scenario, getting nothing done during the day then working hard at home at night. It creeps up on you, to begin with you're working all 10 or 12 hours. By the end of it, you're not.
Source: I interned on a military base that had exactly this rule. It really focuses you to know you have x hours, no more, each day.
The underlying problem that leads to crunch periods is not of planning or accurate estimation. The problem is with the psychology. I'll give you a week to implement something that involves a tiny fraction of research or variance, and you can bet that a lot of people will spend 90% of their time allowance investigating this part and then squeezing the actual grunt work into remaining 10%. So of course it will lead to the crunch! All because the grunt work and known solutions are boring and take the fun out of programming, so any decent programmer will tackle any chance for some research and exploration.
That said, relying on overtime as an available resource during the planning phase - yes, this is bad and it leads to unhealthy work environment. Just ask EA.
Doesn't that depend on your definition of "decent"?
I'd question whether putting research and exploration over a known, workable solution with the end result that you miss an otherwise reasonable deadline, isn't necessarily "decent" behavior.
Learning, investigation and curiosity are good and vital but if the job you're paid to do is to deliver software on time the trade off between that and delivery should be consciously weighed and communicated, not just assumed that the fun thing wins.
(Incidentally, I'm not agreeing that this is the only reason that deadlines are missed - it's one reason but the list elsewhere in this thread contains a lot of truth too, particularly the bit about imposed deadlines which is 100% the case on the project I'm on now).
I finally got a small number of teaching hours which paid way better than bar work (non-tipping country), and thought, great, now I can study weekends too.
Instead, I did absolutely nothing on the weekends. Slept. Hung out with friends. Played guitar. And my productivity, quality of work, and concentration span went way up for the five days of the week. Way up. Honestly, I actually feel I ended up spending less hours in the five days to do better work.
When I worked at someone else's company I hated these crunch modes we had. And honestly never took part in it. When the time came for me to leave I just get up and leave. People would stare, but honestly it's was not my job to stay for crunch mode because some idiot made impossible promises to the client. After that experience I promised myself that when I had my own company I would never have crunch mode. So far I've stayed true to it.
I'm pretty much a stickler for trying to get things done without ever going beyond our standard work week hours. It's usually pretty tough the day or so before a big launch for everybody though - not just the programmers. Somewhat human nature I suppose - some unplanned thing always reveals itself at the last minute.
In fact, we have the opposite problem: a commonplace deeply-felt entitlement to a decent salary for max 8 hours a day, by the clock, never more, but also never less. This prevents crunch mode to happen most of the time (fortunately), but there's plenty other problems instead, such as a lack of commitment and team spirit, people who don't care about outcomes but just about clocking their hours. Stuff like that.
Software development is one of the last few cases where you have smart, highly educated people doing the "grunt work". We've automated mostly everything else, or got low-skilled labour doing tasks where more hours map well to more productivity. Developers are the assembly line for software, and it's very, very easy to then take that notion too far. Surely, if you keep the assembly line working longer, you'll get more stuff at the end?
No thank you to all that. I'm here to do good work and get paid, not be a hero. If you think this way, you are letting this happen to yourself. Your glorification of working late hours is nothing more than an open door to management exploiting you. That doesn't make you cool or tough or badass or a genius ninja rockstar, it makes you a mark.
But the management lead by example - we were working long hours - the boss managed to show up earlier and leave later than us.
The other times I have endured crunch mode (other many layered management company) were trainwrecks.
The boss calls me in at 9 PM to work on a crash, and I'm there till 1 AM? It happened - once in four years in this current job. I accept it when it happens at that rate.
In a previous job, there was an annual trade show. The pace picked up a month before it, and picked up again two weeks before it. The rest of the time, we didn't do crunch time. I was OK with that, too.
Extreme programming had a rule: Never do overtime for longer than a week. Why? Because it makes you stupid. This isn't an assembly line. Your brain has to be working well for you to be effective. Otherwise, you're just creating bugs that are going to take you more time to find and fix. Go for a walk. Go get a good night's sleep. Go do something fun for the weekend. Come back ready to crank.
(Genuine question ...)
In my experience, not really, not nearly to the same crazy degree that everyone in technology is familiar with.
I've worked close to some large construction projects (hundreds of millions USD) and smaller build-outs of physical infrastructure (ISP stuff).
Off the top of my head, I imagine some of the reasons these projects aren't subject to "crunch mode".
* There's a huge supply chain of permits, materials, equipment, labor, inspections and more that has to be scheduled well in advance and is difficult if not impossible to rush.
When you have some relatively self-contained pile of code it's easy to think a successful redesign is always within reach.
* There are few if any sudden epiphanies or clever "hacks" to be discovered and even if there were, the consequences for using one with some hidden side effect can be literally deadly.
* In construction, labor is backed by the confidence and support of powerful, effective unions. Good luck telling a bunch of steel workers that they're going to have to put in an extra 30 minutes, much less a 48-hour marathon and not get paid.
* Professional engineer is a licensed profession as opposed to technology where it's often an entry-level title that doesn't necessarily mean anything.
I haven't met a professional engineer who didn't have some respect for and ability around process, planning and documentation. All of which are things which go a long way toward setting expectations and building / maintaining realistic schedules and fixing problems as they arise.
Meanwhile. we've all met software, network or systems "engineers" and had to support the code/infrastructure of people who were happy to just "make it work" and move on.
(Yes, yes, this is certainly arguable - I used to argue it against the professional engineers I supported all the time.)
* Software development tends wander much closer to the bleeding the edge than do other forms of engineering. I expect a construction project is far less likely to try and use some novel load-bearing material than a software project is to make a bet on some new framework.
For example, my wife did both offshore and tunnel engineering and would work very long shifts plus be on call between them. The main difference with the sort of thing I've done in software is pay: she received overtime even as a professional engineer and this was the main draw, particularly offshore.
In aircraft design, there was never any crunch on the actual design because it was pointless; the review and audit processes went on for years. However, we'd work extended hours for trade shows etc but it was much less common than in banking or the startup.
Short term thinking in development probably stems from short term oriented management incentives. Of course, for many companies, the short term is all there is.
It looks like the Obamacare software system.
Well... Yes and No. In an ideal world, the team decides how long it would take to complete a project. More realistically, I guess, the team is often given a work to complete before a predefined deadline.
Just because you don't like working overtime doesn't mean it's the wrong thing to do.
It's just not healthy for any sustained amount of time. I don't know what kind of lifestyle you are living when your only activities are sleep (less than you need), eating (less than you should, and/or unhealthy food) and work.
By the time the article starts talking about remedies, it loses half its punch imo.
I think I know what you mean though - some companies have a very leisurely pace and sometimes even discourage those who try to work too much or too fast.