Software dev 20+ years: management is right to ask for estimates. It's ok for engineers to write a throwaway design paper to "get into" the problem before turning to jira epics and stories. It's also right for engineers to reject arbitrary dates, pressure to cut corners and so on. But this or the ops story absolutely don't get anybody anywhere.
You wanna move beyond anecdotes and nice sounding business arguments? Read FIRO by Dr. Schutz prob out of print or "Human element" by same. His son Ethan has updated these books.
Look, in normal high functioning groups conflict is normal. What confers distinction there is two things:
- no individual on team is ridgid and unchanging
- conflict is resolved with 100pct buy-in ie not cause the boss yelled, or you were out gamed, politics, favourites. IOW there is trust in the team (together with self awareness, competence etc which the book hits on)
When human factors burn down projects down the issues are quite a bit more about trust, individual self awareness, defensive behaviors, and not resolving the problem in a group way. Trying to eliminate conflict with rules of thumbs is a fool's errand. Conflict itself is not a sign of badness.
References to organizational modalities (the strong boss, the clear vision, and similar sounding approaches) help at the margins only and then only randomly.
As someone going through this right now, here's some things I do to make the process easier.
1. Put together a ~medium detailed listing of what work needs to be done, broken down into sub-tasks.
2. Include estimates for how long each sub-task will take.
3. Roll that up into a gantt chart with dependencies reflected.
4. Identify opportunities for parallelization so you can answer the question of "will adding more folks make things go faster?"
5. Identify and be prepared to speak to which portions of the schedule represent padding, and explain why it was padded in that way. Share your thinking in the trade-off you made and be open to adjusting -- and de-risking the schedule in other ways.
6. Realize this is a bit of a negotiation, not necessarily you vs. them but more you and them vs. what you can deliver. In a negotiation it's important to not appear intractable. Have things you can give away.
7. At the end of the day the engineers are writing the software. If you're not actively dragging your feet, what you say does go, so it's a question of where you're spending your time, and on what. With that in mind, your boss has a job to do too, so help give them the tools they need to do so.
8. Don't burn bridges, y'all have to work together.
I think another rule of thumb I would add, which other commenters have mentioned in passing, is to negotiate scope, quality, and likelihood of success, not estimates. Negotiating estimates is where people start questioning each others’ expert judgment, which leads to a breakdown in trust.
How does a "bad estimate" cause a project to be delayed?
I think this type of wording is part of what causes animosity in the industry about this topic. Estimates are not called "promises" for a reason, and any attempt at treating them that way will result in failure.
Software estimates are notoriously hard to get right and it's not uncommon for them to be wrong by several orders of magnitude, and this effect is magnified for bigger estimates/work. Any decent project plan needs to assume this is the case, and it needs to be continually refined as work progresses and the accuracy of "estimated remaining work" gets higher as the problem is better understood.
The worst project plans are the ones that take the initial estimates and use those as delivery dates, but I'd classify that as a "bad plan", not "bad estimate".
A bad estimate causes a delay to the project schedule (in the sense the schedule is delayed, not in the sense the software takes longer to write) . It's not the same kind of delay, but to many stakeholders it's perceived as the same kind of delay.
> Estimates are not called "promises" for a reason, and any attempt at treating them that way will result in failure.
So management 95% of the time treats estimates as commitments. What they are going to do with the numbers you give them is promise upper management or clients "feature x will be done by y". As engineers we have two options, scream until we're blue in the face "that was an estimate not a commitment" or just give them a commitment and call it an estimate.
You're right software estimation is hard, but the really bad estimates I've seen (> 100% over) were due to a combination of dysfunctional organizations, lack of estimating skill, and an organization that didn't put effort into making sure it's estimates were right.
> Software estimates are notoriously hard to get right and it's not uncommon for them to be wrong by several orders of magnitude
OK now hold on there just a sec... I've seen estimates off by 20%, 50%, even 100%. I'm sure there are estimates that have been off by 500% (I'd hate to dig into why). But "several orders of magnitude" is something like 10,000x -100,000x.
Hopefully that is just extreme hyperbole, but honestly in the context of discussing estimates, it seems particularly out of place.
Bad estimates can cause shipping delays when cross-functional or inter-dependent work ends up in day-for-day slip because not all work is parallizable. The only time a bad estimate doesn't cause a delay is when it's "single-threaded" and the long pole.
I've had a lot of success with Asana's timeline and also with TeamGantt. It's my go-to for project management, and for what it's worth, I and by extension my teams are known for nailing our deadlines come hell or high water (without burning out my team). It's a tool in the chest, it's not for everyone, but it's by no means incompatible. Depends how you slice your work to be done :)
Why? They are always wrong. Asking for a plan? Sure, because planning makes you think through things. Planning good, plans bad, to paraphrase. But estimates are always wrong and always useless, dev with 30+ years experience and I've never met anyone that can actually estimate software except in the trivial sense.
The error bar on software estimates, like solving a math problem (because they are the same thing! If you don't think so, you don't understand software), is infinite.
Although I like your quote that "conflict itself is not a sign of badness".
Why? Because there are often other dependencies going on. Most software in this paradigm is at a company. When companies roll out new things, change management has to happen. Marketing needs to make a splash (they want at least 6-12 weeks lead time). Sales starts making promises. Account managers and support need to be trained. Change management has to to happen. So then missing a date by weeks/months screws up the business. Most companies aren't writing software for fun.
Sorry, buy have to disagree. Management broadly (program or business managers and related workers) are not always wrong or wrong to ask. Nor is it waste to try. It's exactly this kind of fixed belief which drives behavior that ultimately runs the big risks. Not sure deeper meaning buy seeing this kind of interaction is a game, stupid game, or good idea by innocent if stupid people is exactly the kinds of things that work against team cohesiveness. Software isn't 6-sigma manufacturing so the best kind of predictive work that applies there doesn't work for us, but even they know good cross functional coordination is about a whole lot more than error bars. The book will give clarity and depth this forum won't permit. The inability to perfectly plan does not advocate for the "trust me model" from programmers.
While the worst case might be infinite, the average case is a lot less bad than that, and knowing whether something will take 2 hours, 2 days, or 2 weeks is important for prioritizing work. Maybe that one new column in the query isn't so important if it'll take 2 weeks, but if it's only 2 hours then let's get it now.
The error bars on solving a math problem (or writing a program, or anything else) are not infinite unless you make the mistake of stretching them to the point of encompassing absolute certainty that a solution is found.
Almost no software development task is like proving or disproving P=NP: often, they are like homework problems. And, like uninspired homework problems, it is often a matter of grinding through a process with all due attention to the details.
True, but there needs to be common understanding that they are estimates, and if the projects take consistently longer, it means the dev is bad at estimating, not bad at writing software[0]. Also, if you get a median time, you'll have, by definition, half the projects taking longer than that; a mean, mode, or 90th estimate will still have plenty of high points; and if you want 100th percentile, you don't even need to ask the developer: "sometime in the next century, probably".
0: They can be that, too, but that's a independent flaw from being bad at estimating.
Being good at estimating is an important skill for a developer. You are the one with the knowledge of what needs to be done to deliver a project and to be a good engineer you should be able to deliver a reasonable estimate so a decision can be made on what to invest in. If your guidance leads is wrong and leads to a bad investment, then it is not a misplaced judgement for you to bear some of the blame.
"You are the one with the knowledge of what needs to be done to deliver a project"
I think you're missing the point. Nobody has that knowledge prior to the project being complete.
The only exceptions are very small projects or projects that are just rolling out pre-established boiler-plate solutions. Any reasonably complex and reasonably sized software system contains far more uncertainty than humans are capable of thinking through.
The issue often is that management will not crush programmers if wrong. Managers aren't stupid. This isn't a competence issue primarily. This is a trust and openness issue mainly. So the estimates were wrong? What do people believe about why they were wrong and how will people react? If that decends into defensive behavior ... Read the book.
I would just say that most conflict that people will deal with is unfortunately going to be the bad type. Its not very frequent outside of a few highly productive environments that there is enough active trust communication and self awareness to avoid "territorial" conflicts.
I think this highly depends on the developers and the team. I myself care about my work and this sometimes lead to tensions with management, but because they trusted me, those tensions were productive. When the trust is lacking, those tensions become sour.
One of the big points in the book: at many human organizations trust/openness is the last thing resolved. And most people think openness is scary because it means being yelled at or leaving oneself open to be screwed somehow. There can't be openness unless there is safety ... Hence the ray dalio quote (and this comes many many variations by many people): working is doing dumb ass things you wouldn't be caught dead doing at one's own company. There's tons of ineffective labor -- people know better -- but won't say it because they are afraid about being screwed.
I don't know about 100% buy-in. Maybe it is just lacking nuance but being ok with going forward in a direction you don't agree with is important in a team. Disagreement is good, it gets you better results in a healthy environment, and it doesn't have to end to make a decision.
The signs of a good compromise is everybody leaves unhappy about something. Not that products should be built entirely on compromise... that also leads to garbage.
It is difficult to pick the pieces apart, but frequent strong-armed conflict resolution is definitely a sign of a bad environment.
"Disagree and Commit" in a vacuum is just an authoritarian kludge.
The Amazon principle is "Have Backbone; Disagree and Commit". Most leadership principles in Amazon are in conflict with each other, creating a sort of checks-and-balances situation. But "Disagree and Commit" is so powerful that it needs a check in itself. It doesn't work without "Have Backbone" - but most senior leaders I see who love it never mention that part. They always spell it out as a "follow the orders once they're made" sort of thing.
Disagree and Commit is not about 100% buy-in. It is about having the fortitude to disagree, but once a decision is made, 100% committing to and supporting that decision, despite disagreeing.
There's a lot to like in what you write. Back to the book I referenced above ... disagreeing here has several facets. First you have to be aware you can disagree. You have to be aware you have choice and use it. Disagreement is not a firing offense. Bosses are not entitled. Second, how it's done is important: if I disagree through a defensive behavior (again see book) that will go bad ... If at the end a decision is made and feel like I had no choice or my ego won't allow it ... well that's another potential concern. Again disagreement isn't often itself the real problem. The real problems are: what if I know I can disagree but I don't? Lack of courage my side or unsafe environment made by management? If management tells me they've made their decision contradicting my input which applies: I feel listened to and feel like my input was taken seriously? That's good. Or perhaps I'm insecure and can't deal with loosing control. If I don't have self awareness here I might blame, critisize management or play victim. That can be bad. Maybe I just can't admit my assessment was incomplete or wrong. Also likely to hit into problems. And in any of this I refuse to change, I can sink the team in the limit.
I agree commiting to something silly whilst your mind constantly sees a better answer can lead to eventual breakup. Companies dont succeed by getting 100% buy in to bad decisions. People who see the writing on the wall frequently leave, leaving committed people to their Titanic or hindenburg.
Buy in resolves people with wrong ideas trying to steer into the iceberg, and loses the benefit of disagreement overcoming resistance and inertia towards bad goals.
My opinion is that committing is buy-in. You don't have to agree with something to buy into it. You buy into something when you agree to do it, whether or not you are convinced it's the right thing.
so "committing to and supporting that decision" isn't buy-in? Come on. That's spending your capital as an employee on the decision, buying into it and working on it. You're not harboring resentments
I can definitely commit to something that I disagree with.
Ask any military person that is responsible for both making and accepting decisions.
This may be a nuanced language here, but buy-in for me is the Cambridge definition "the fact of agreeing with and accepting something that someone suggests".
For commit and support, I do not have to agree.
Only in an environment where failure is an option and inaccurate or wrong action is preferable to inaction. Disagree and Commit doesn't prevent the Challenger from blowing up.
As a person who runs a small software business, coding most of the functionality myself, I actually disagree with the article. There is a huge value in setting deadlines because they force you to prioritize things. Once you realize that you don't have the time to ship features X, Y and Z, you start comparing their impact/complexity/risks, pick the most beneficial one, and ship it before it's too late.
Without prioritization it's very easy to get stuck in a loop of endlessly adding small improvements/testing new ideas, but never releasing the final sellable product. There are a few notorious examples from the game industry where no time pressure lead to either no product, or a hopelessly late-to-market product (e.g. Half-Life 3, Duke Nukem Forever). There are more smaller examples where entire teams endlessly juggle the code between web frameworks, as they come in and out of fashion, and neglect more user-impacting features.
That said, most of time pressure should only be applied at the decision-making level. Once you have decided to ship feature X with framework Y, it's useless to nag on your devs to do it in half the time by dropping unit tests, or doing 60-hour work weeks. Instead, you should have picked feature Z with 50% the complexity and 80% user impact.
There are multiple ways to make a project fit into a deadline:
- change/reduce the scope => lowers the value of the product
- cut corners: for ex. skip testing, ignore bugs, work faster, skip code reviews, etc. => lower quality
- work longer hours (lower quality + human cost)
- throw more resources at the problem: may scale poorly if at all, as well as usually results in lower quality and more friction, aka human cost
It's all about weighing everything and making the right trade-offs. Sometimes short term solutions are the right approach, maybe you need a POC more than a polished product to get that next round of funding or something.
I've struggled with that in the past, and next time I'm presented with this kind of project, I'll clearly explain the trade-offs, for example translating lower quality to: this may increase the number of bug reports significantly, increase the maintenance cost, prevent the addition of other features with significant overhauls, this and this engineer may start looking for another job, etc.
It's incredibly common and a sign of poor management and structures I have no desire of working with.
It's also what most "agile" environments end up turning into: a bunch of inflexible arbitrary deadlines designed to make developers work more, amongst many other problems.
One other important thing to realise: prioritisation is the art of deciding what you are not going to do. When you prioritise, you place the highest value/risk things at the beginning. That way, when you run out of time, those things have been done. You put the lowest value things at the bottom. That way when you run out of time, those things have not been done.
I forget who I saw do this (it may have been Nat Pryce at a talk somewhere). He took a list of the items that needed to get done. He rendered the first item with full opacity. With each subsequent item, he reduced the opacity. At the end of the list, the items were invisible. Then he said, "This is roughly the likelihood of me getting these things done."
It's a mistake to draw a line on your list where you think the deadline will fall, because then you are fixing your scope as well as your time. But if each day you adjust the opacity of your list, hopefully people will get the point.
Agreed. Maybe at a large organization where you are working on system that have more concern about stability and maintenance. At a startup setting deadlines and cutting corners is key for me to be a good engineer. My goal is get to "something" in the hands of a user or customer as fast as possible to determine what I actually need to build vs what I think I need to build. Cutting corners and getting out features faster allows me to validate what I'm building is useful and better direction for what I'm building next.
Before my current project is designing an API for logging and viewing image segmentation masks, A mask that segments an image into n classes. We started with a large design that allowed users to configure to masks in different layers. Toggle them on and off and do composting. Instead of building this exactly I shipped a small fast very that renders images with masks and adds some toggles for each class.
Turns out one of our main assumptions was wrong we thought the number of classes(n) would be small. It's 1-2 order of magnitude larger on average for all of our users. And sorting through large amounts of classes is the biggest issue our users are clamoring for. Now instead of spending a bunch of time building a UI for editing the masks. We first focused on handing large counts of classes usefully.
As well, all of the different settings for mask composition and layout we dreamed up really don't matter. While there is 100's of different ways you can layout and compost the masks. Turns out there is 3 default layouts that everyone wants, we don't need a UI for tweaking layouts we just need a toggle between the three common states.
Instead of spending extra time to get it right. We aggressively cut scope and shipped a not particularly useful feature. We got two big benefits out of this. We ended up building something much smaller in scope than our initial design and we ended up building something better and more useful.
Agree wholeheartedly. If you don't trust your people to come up with reasonable time estimates, you should fire them and find people you do trust. If you do trust them, then you shouldn't play stupid games to get them to shrink their estimates. If you want 20 features, but the estimates don't give you the delivery date you want, your only reasonable option is to cut features until the team believes that the remaining features can be done by the deadline, based on their original estimates.
I think it's also potentially reasonable to say "I really need these 20 features, and I'm ok if you cut corners on quality to get me those 20 features by this date". But in my experience, I've never heard anyone say that and mean it; they still get pissed off when the end result is buggy as hell. And I just don't think it's a good business decision anyway; burning customer goodwill is only a winning strategy when you're a monopolist, and even then only until you get unseated, as everyone eventually does, given time.
> As a person who runs a small software business, coding most of the functionality myself
I'm not even sure you disagree with the article, given you are in a radically different position; how often do you think, as an implementer, that your business ideas are complete bullshit, sometimes even just because you don't know all the details you are thinking about on the business side?
Project management is about communication. Having that problem reduced to communicating mainly with yourself changes a little what is effective and what is not.
> That said, most of time pressure should only be applied at the decision-making level. Once you have decided to ship feature X with framework Y, it's useless to nag on your devs to do it in half the time by dropping unit tests, or doing 60-hour work weeks. Instead, you should have picked feature Z with 50% the complexity and 80% user impact.
So yeah, we could continue to interpret that as you mainly agreeing. Implicit cultural incentives are a thing and it is illusory to think that "devs" won't be aware of schedules and won't drop half of unit tests if there is a risk of looking "bad" at short term if they stuck with state-of-the-art practices.
Note that the solution is not in the extreme opposite, of course. It never is. There is a system of values to be tuned, and I'm not sure a lot of projects exist where the date of completion does not matter at all. Your example of Duke Nukem Forever was on point :) But being date driven would mean the date is the most important thing: this also is rarely the case.
> There is a huge value in setting deadlines because they force you to prioritize things.
This can be true, but only if the team is not otherwise good at prioritizing things. And although deadlines do create pressure once they get near, they often create a feeling of slack when they're still far out. They also create a feeling of slack after they pass.
Estimation is only valuable in narrow circumstances. One has to know the expected return with a fair bit of precision to do ROI calculations; generally business revenues projections are highly imprecise, so estimation is often a waste.
Reliable estimation requires a fair bit of information. The technologies have to be well understood. The team has to have worked together sufficiently. The business needs user impact has to be well researched. Estimates can't be more precise than any of those things.
Further, estimation requires stability in team, technology, user needs, business environment, and competitor behavior. To the extent that any of those things are expected to change, estimates become less and less worthwhile.
Lastly, estimation assumes that nobody will learn anything significant over the course of the project. That's surely true for some domains. But in quite a lot of areas, especially the startups we focus on here, the whole point is to learn new things. We see how technologies perform, and then make new choices. We test user reaction, and then change product plans. When that happens, estimates quickly become stale.
So when we're in situations where estimates aren't particularly useful, we have to use different methods. Personally my favorite is using the Lean Startup framework and updated versions the Extreme Programming practices, especially Continuous Deployment.
Confession time: In 40+ years of doing software, I've met my schedule once. Actually, that's a lie. I missed by a week on a 150-day long project, my very first project at my very first real company, and that's the closest I ever got with my own estimates. And on that project, marketing wanted it pulled into 30 days (and to hit that 150 days I was doing all-nighters and basically killing myself, so it wasn't a very good schedule to begin with). [For the curious, it was a game cartridge].
The real losers of "schedule chicken" are the customers, who receive buggy and bad products. The company will suffer long product update cycles because of the effort needed to stay ahead of the quality debt. Explaining this to a manager who's never even read even one of his copies of The Mythical Man-Month can be tough.
Things aren't necessarily better when you let a project freewheel. "You'll ship someday, just do a good job and get it right" doesn't necessarily translate into the urgency to ship a product, and I've seen efforts on the scale of tens of millions of dollars fail.
Other arbitrary dates include things like shows (well, what is the real cost of missing that show versus shipping something buggy to bad reviews?) or holidays (hitting Christmas used to be a good excuse for schedule pressure in the game industry, much less of an excuse now).
[Anecdata: Years ago there was a manager at Microsoft who told his team to ship by some arbitrary date, which turned out to be when he was planning to go on a long vacation. I'm happy to say that Microsoft fired him.]
I don't see the point in working all-nighters for a company unless you have a stake in the company (shares or owner). For my own company, sure I'll pull an all-nighter before an important meeting, for a company where I am one of hundreds? No thanks.
Labour laws tend to be more protective here in the EU though so no fear of being fired by refusing rediculous requests.
If you don't do it, there's always a willing colleague who will. At least, that's been my experience in FAANG and related companies. Since I became...complacent, I guess... and started only working 9-5 for the most part, I can't keep up with my colleagues who are working seemingly every waking minute. It's a great way to get passed up on promotions, not get handed the "good" projects, and just generally be sidelined from decision making. Ymmv of course.
> If you don't do it, there's always a willing colleague who will. At least, that's been my experience in FAANG and related companies.
I really wish they wouldn't, because I have to come along and clean up the messes they make in their fatigue induced haze. Meanwhile I just finished a project that we originally plotted as taking 18 months. It took about two once we sat down and thought about what really needed to be done, and those two were mostly slowly rolling out configuration changes.
Most of the problems I deal with are young engineers coding like the wind, adding new services, and locking the system more and more into its current state until all wiggle room is gone and it becomes a multiyear, multiteam project to modify the system semantics in the slightest way.
> If you don't do it, there's always a willing colleague who will
Haha, isn't this the truth. I work at one of FAANG as well and was curious how one of my colleagues was accomplishing so much. His output is astonishing. I checked his work profile and noticed he had commits, notes, and research actions starting at 7:00 AM and going until 1:00 AM the next day, every day, including weekends. I don't think the founder of this company ever even worked that much. I guess there's just some people who never burn out. Meanwhile, my wife gets annoyed about dinner when I work past 6 PM...
One place I was consulting to had a dev who only ever committed code in the wee hours of the night. By day he'd fiddle around with all kinds of unproductive crap, but by night he appeared to be a productivity daemon.
Turned out he was outsourcing his work to a job-shop in India... Couldn't actually programme worth a damn.
I guess the key here is that you can totally immerse yourself in something that doesn't feel like work; a project that fullfills you from the deepest of your heart.
That tends to happen once every 10 years.
It doesn't tend to happen in day-to-day grunt work at an AdTech shop, pushing JIRA tickets.
I think this might be the number one thing that bugs me about this field.
For instance, when I was in college, I had a job that paid by the hour. I didn't need a lot of money, so I worked one day a week.
In our field, there's no option where you can opt to work four days a week, or work part time.
You would think that at some point, and employer would come up with the idea of opening up some part time positions. There's got to be thousands of talented techies who've reached a point in their life where they don't want to work 50 hours a week. But such a role simply does not exist.
It's particularly odd since a lot of us make good money. IE, my Dentist probably works 20 hours a week, and I imagine the reason he works so little is because he isn't living paycheck to paycheck.
I work three days a week (UK). It's totally possible but you're right that it does constrain where you work. Smaller companies where you can talk directly to the boss is the thing. I have a family caring role so for me it's pretty non-negotiable. I just can't take most offers (which you're right, usually start full time even if in reality there's flexible working available to permanent employees).
It would hugely open up the field to women with caring duties if more companies would do this. Perhaps this is why they do not - I don't know.
Sorry HN! Of course I meant that it's actually just a complete coincidence that so many women leave tech after having children. We all just choose this completely on our own and childcare is not a factor in the least. There's literally nothing we could do about this completely natural and voluntary situation. It's not even worth asking the question.
Unsure why you are being downvoted. I know quite a few people (man and woman alike) who chose to do a 4-day workweek because of young kids. Seems like something sensible to do when both parents are working. More companies should support it.
In Europe, it's becoming easier to work four days a week as a developer, mostly due to shortage of qualified candidates. I wouldn't say it's common but it's definitely possible.
I lead a team four days a week and it's working quite well. The other team members work five days a week. They didn't request shorter time.
One of most clever things as a software developer that you can do, is to take a pay cut to go from "Full Time" employment to 32 hours a week employment, i.e., you say you will work 4 days a week, every Friday you're off.
The difference between "full time" commitment, where the business might say "we don't care how much or how little you work, just give us results" vs where you are saying "I work for you 32 hours per week - no more no less, that's it, thank you very much" is huge. Mindblowing.
Suddenly you are not under pressure to deliver deadlines, you are only giving them 4 days a week of your time, doing your best, and that's it. You are off the hook.
That role does exist. In lower-wage countries with outsourcing.
In the US and other high wage countries, most developers are hired because of the need for maximum velocity at all costs or having them available to discuss things directly with non-technical stakeholders. Neither of these roles fit well into spending 20 hours a week knocking out bugs and well specced features.
All nighters are extreme and an unsustainable idea, I learned as much in college. But I do sometimes put in long hours (maybe for a week or two at most) to push through a project I really enjoy, solving a problem for the company that is technically fulfilling. I don't mind much as an employee that I don't own the upside, because I also don't own the downside. I get a lot of satisfaction having built a quality piece of software that the customers got real value out of. I've found the key is to not do this regularly. I view it like running. Normally, you gotta jog, that way you have the reserve strength to sprint when you really need it.
Anecdotally, the place I work for in the US doesn't expect or even want people to work all-nighters, if a project is that under-resourced, it needs to be halted or more resources need to be allocated. Under-resourced projects always fail and waste a lot of time and money. This is only the culture I've observed at my engineering dept though, FWIW.
Its easier to look like a rockstar by getting a 30 day estimate done in 10 days than a 10 day estimate in 10 days when it took 30 days of work. You'll rarely get extra credit for meeting expectations.
The bit that stuck in my head (from Code Complete or something like it) was the phrase, "Watch out for people who look more productive than they actually are." As in, not writing tests, or making bad decisions that take 10X the original effort to fix, or that write systems that fall apart in corner conditions, or . . . (the list of problems is large).
I like to think that most big-ish products can be divided into three equal parts, each consisting of 90% of the work. It's that third 90% that separates the decent products from the great ones.
[Yes, I can do math. I mean that you get to your original 90% goal and realize you've still got a LONG way to go.
"Problems worthy of attack / Prove their worth by hitting back" -- Piet Hein]
I honestly don't think so. Companies have finite resources and need to allocate their use efficiently. That's hard to do when you don't know how long it will take / how much it will cost.
If you don't think you have the money to meet the estimated project time you need to find ways to reduce the time. Sadly that leads to problems as described in the article.
The is an impedance miss match between software development and real world business reality.
If your product development process constantly places you into dilemmas where a development effort requires a commitment to cost and timeline that could damage the company if either is overshot, they either:
A. aren't testing enough / at all or haven't given any consideration to what is the smallest change needed to deliver value
B. have serious organizational problems around coordination
I bet you worked in a small consultancy right? Smaller firms are eat-what-you-kill hard nosed business and if you can't make good estimates and deliver on your promises then the lights go out. I led delivery in a small firm for the past 2 years before leaving for one of the big players, we were very good at estimating and delivering on those estimates because that's how we made bank account deposits.
I think a lot of developers deep in the bowels of large companies are completely disconnected from their work and their paycheck. Granted, a lot of management deep in the bowels of large companies are equally disconnected.
It would be good for a developer out of college to spend a couple years in a small consulting shop. You get to see the whole business of software development end-to-end. It gives you perspective you wouldn't get in a large company or in like a highly specialized technical team.
I was better than most devs when I was in a big organization (due to reading Steve McConnell's the black art of software estimation), but starting my own consultancy has made a huge difference. Nothing like eating a part of an invoice to keep a client happy because you mis-estimated to take your estimation skills to the next level.
This post highlights the importance of competent technical management. The problem is not arbitrary dates, it's unreasonable dates with inappropriate feedback loops and lack of trust throughout the management chain. The example given is a strawman of a classic cigar-chomping executive whose philosophy comes largely from unskilled, fungible-labor economies.
Taking away the date is definitely not the right move. Now you've given every PM and sales guy carte blanche to throw whatever flavor-of-the-moment idea comes in their head. The team will be churning constantly to keep up with the requirements and then someone will suggest, "I know, let's do scrum!" so now we can all enjoy the stress of unreasonable deadlines on a continuous rather than waterfall basis.
To the contrary: a properly-managed date is an incredibly valuable constraint which the entire team can use to make tradeoffs against. To make it work management needs to trust the team, and engineers need to understand the larger business picture because they are the ones with the knowledge to find creative solutions that actually work and decrease time to value without compromising technical quality or long-term maintainability.
Strongly agree with this. Dates serve a critical goalpost in technical planning, yet they should be viewed as flexible (having a reasonable margin of error) and informed by tight & trust-driven feedback loops. I subscribe to Gantt charts as a planning tool, not a bible. Use it to empower development teams to plan and track execution, but don't use it for 0-margin accounting.
One anti-pattern in engineering management is shielding engineers entirely from timeline estimates. A CEO with limited runway, reporting to the Board, doesn't have such a luxury of infinitely elastic time.
Edit:
Note: dates should never be prioritized over value. If you're hitting dates and not delivering value then it won't do good for anyone. Product value should always be the function to optimize for, but rarely is it entirely independent of time.
How funny, I took notes for a class to A/B test this and note taking ruined my ability to internalize data. When I wasn't taking notes, concepts would fly into my head as I'm writing an exam along with the associated memory (where I was sitting that day, whether it was bright out, where the lecturer was standing wrt board). When I took notes, I had all these notes and none of this would happen.
I used pen/paper. I also tried, separately, computer-based stuff and that ruined my ability to concentrate.
For me the note taking helped with the internalization process of linking the information with the memories of the professor talking about the lesson.
I think the key is to still allow your mind to wander and build the connections. I found I always had the best luck if I was a little distracted, but mostly paying attention.
Perhaps because the variations in attention helped to differentiate which information felt important vs what was just background noise.
That's also one of my favorite quotes on the topic and have heard it phrased a few ways and variously ascribed [1] but definitely military where it's also said Generally that "all combat takes place at night in the rain and at the junction of four map sectors"
agreed. i wanted to build something, and set myself a 90 (end of quarter) target. it really focused me on just doing what needed doing. my plan did not survive long, but i kept updating it to focus on what mattered. in the end i hit my abitary date, but i carried on tweaking for another 30 days before i was really happy. so reall a 33% overrun.
I'd probably generally disagree. Lose the date but sell the mission. Engineers that get lost in a world perfect is the enemy of good need to be reminded of the mission not stressed into cutting even more corners for the date.
Exactly. People are terrible at estimating things on long time scales. If an engineer isn't overly optimistic with estimates, management will force them to revise until they are. Unrealistic optimism despite heaps of evidence is a major human flaw. Adding pretend timelines is a stressful exercise in futility. But planning itself is not.
> Now you've given every PM and sales guy carte blanche to throw whatever flavor-of-the-moment idea comes in their head.
YES! My current project has this issue. There is no deadline for my project beyond "urgent" (but so is everything else) and as a result, any request from a client gets approved. Client wants a button shifted slightly to the right? Approved. Comms wants the semi-colons gone? Approved.
For a supposedly urgent project, we are making no real progress week after week on functionality simply because urgent has no tangible meaning.
That's not solved by adding a date. That's solved by blocking feature requests. I'm in a project with the same problem, BTW. It's incredibly demoralizing.
Change Request == MONEY, and all prior deadlines extended. How much depends on the complexity required to perform the change... and figuring that out is a billable item too (please submit change requests in bulk to save).
I recently found myself in the position you described, to a T. And we did end up switching to scrum...
I've left that company after having been unable to fix the situation, which was ultimately a political problem; as you said, we had an "executive whose philosophy comes largely from unskilled, fungible-labor economies". Is this fixable, or is "leave" the only right answer?
The date is not important, the pressure it might create more so. But there are other things that create the pressure to get things done.
Natural pressure is the best: someone you care about suffers if you don't solve the problem, heating is broken and winter is coming, that family needs a place to stay etc.
The worst kind of deadline is completely arbitrarily set by someone who has no idea, because they thought promising early deadlines would make them look good and get them the contract.
This is a structural problem IMO, because freelancers usually don't make that mistake very often. If you manage someone elses time you can afford to become unrealistic.
I dislike articles like this. They take a situation that isn't representative of the workplace everywhere, generalize it, and come up with a universal "never do X!" headline that grabs attention.
There's nothing wrong with deadlines, even arbitrary deadlines. Without them it's easy to get lost down a side path of "oh, it would be nice if we could do X". They serve to focus attention. The thing is not deadlines, but how you work within them. If it's arbitrary, Work backwards from the deadline to what can reasonably done, and present a detailed account of those estimates. If you have a hard-charging "just get it done" boss, part of your responsibilities is to manage upwards, educating your leadership on what your job entails so they can have reasonable expectations. Most managers are not actually pointy-haired bosses, but you have to work towards that relationship: if you treat them like a PHB, you'll give them no way to evaluate your work except their own faulty metrics.
Will this work in every situation? No. But that isn't representative of some universal problem with deadlines, it's representative of poor management.
here's nothing wrong with setting dates. There's nothing wrong with setting arbitrary dates
Even impossible deadlines aren't the end of the world. "We need X Y and Z done in N weeks!" "...I'm not sure if we can get even one of those completed in N weeks - and that's even before accounting for the fact that I'm an optimist among optimists. Since it's so obviously impossible, I'm not going to kill myself trying - instead, let's talk prioritization, so we can deliver as much value as reasonably possible within the deadline, if it's really an important one."
What you want to avoid:
1) Pressuring devs into crunch/burnout/quitting/morale loss/checking out. Turnover will eventually cause brain drain when your best talent leaves for greener pastures, and makes hiring more expensive when your reputation sours.
2) Pressuring devs into sacrificing long term productivity for meaningless short term milestones. It's one thing to prioritize a feature or two for an important presentation to investors who will be making decisions about your financial future at the temporary expense of, say, test coverage. It's another to do so routinely that codebase stability suffers, developer velocity gets wasted on disturbingly routine debugging sessions, and build engineers disable code coverage metrics for being "just too gosh darn depressing to even look at."
I think the article lacks nuance. Of course, asking devs to guess at how long something will take at the very beginning of a project is not going to be very accurate. That doesn't mean that sticking to a schedule has no value.
Basically, the project plan has to allow for some scope cutting along the way. There will always be a few false assumptions that are discovered only after the project is well underway, and the only way to manage that is minimize the surface area of any given dependency.
The responsibility of delivering a project on time belongs to the manager (which for the purposes of this comment can belong to an IC if she or he decides to think like a manager). For every milestone on the schedule, the manager should know all the risks for reaching the milestone and should have a plan for handling each eventuality.
This type of planning goes hand in hand with protecting the team from distractions, preventing scope creep at all costs, and setting the goals of the project before it has even started.
Software created with time constraints is higher quality and is more fun to make.
Bob Martin's new book "Clean Agile" covers this topic well. The problem isn't dates or deadlines, it's arbitrary dates or deadlines that are not backed up by data that indicates whether or not they are achievable. Often we create estimates with no prior knowledge of the team composition and particularly their ability to apply their skills to the problem at hand. The only way to make good estimates is to give them work, let them start doing it, and observe their progress. You then can manipulate the scope of your project to determine what you want done (the highest value things) and estimate when you can get those things. The alternative levers (add a bunch of people, sacrifice quality) end up not working in software projects and become the "value destroying mistakes."
After about 20 years working in tech, at multiple companies of all sizes, and in dozens of teams, working through all levels of engineering, management, and other jobs, I can say without any hesitation that without due dates (reasonably negotiated of course), engineers will spin indefinitely and nothing will ever ship.
Depends. I am a MA who fittingly studied art. The university I studied on is one of the few without nearly any time pressure. You can take as long as you like.
A receipe for disaster? Only produces bullshit results? Far from it. Ofc there is a percentage of people who just cannot deal with the freedom, but in terms of results (I studied in the Film department) this school creates the best films with the lowest budgets in the country. Most people that work from you get nothing for the job.
Again fittingly I now work in the IT department of said university, where I often create software that we need. There is never a deadline, only a "Somebody needs this and wants to use it and is doing a horrible manual workaround in the meantime" that is usually a far better motivator than an arbitray deadline.
Rhink about it this way: Imagine you are a carpenter and you have to build a cabin in the woods. What motivates you more:
a) An abstract deadline set up by your manager (you know the cabin will be sold to some rich guy who doesn't need it anyways)
b) Someone you know will live there. They are couch-surfing with their family in the meantime. There is no deadline.
Both create pressure, but one is by far a more effective motivator to do things fast yet good than the other.
Of course that would mean your company has to solve meaningful problems with a natural deadline.
Natural deadlines by their nature are usually fuzzy. The trick is: make your engineers care. If you can't, you either hired the wrong person with the right skillset or what your company does is not important enough to most people.
Many programmers and engineers instinctively know that their work acts as a multiplier for good or for evil. However if you multiply anything times zero it remains zero..
Someone pointed me to Reinertsen's Principles of Product Development Flow book, which put into numbers and models everything I'd been trying to say (and then some).
It worked great with my team, but I was failing hard at communicating and involving everyone on the business side so I started researching for something that provided the business side, wrapped around his methods. Which drew me to Scaled Agile Framework.
There's a lot in it, but the core of it is simply on a pace of 8-12 week increments, you spend 2 days letting your developers provide you with a plan, estimated based on 2/3 of their actual available time. They make the plan...not management.
The plan is presented to management, management discusses tradeoffs and options, then ultimately management will accept a final plan and the developers provide a confidence level in their ability to deliver the plan that they have set out.
When new requests come in, they are discussed for the next 8-12 week increment so the developers can focus on executing the plan that everyone agreed on.
There's still room left for small things that come up, there are progress check-ins and communications that happen along the way. Risks to the plan are identified and discussed so everyone is aware of them up front. Variability is assumed (up and down) throughout the plan. The only assumed commitment is to the 8-12 week deliverable. Nothing in between is expected to have a guaranteed delivery date.
It leaves little room for surprises and plenty of room for people to work in a reasonable manner. I can't speak highly enough of how effective it is to addressing this problem.
You should multiply the plan of the developers by 3-4 before presenting to management. So management can cut to factor of 2-3 and you will barely reach it. I never met a developer who doesnt underestimate the effort needed by a vast amount. (including myself)
Management doesn’t get to cut the plan. They get to ask “what if we don’t do this, would it be possible to get this instead?”
There’s no “we said it will take X” and management saying “do it in X/3”. That’s no longer a plan made by developers that developers are comfortable standing behind.
Over 10 weeks, you would plan based on 2/3 of time for 8 weeks, with nothing planned in the final 2. If things are running behind, this becomes buffer to finish it out. If things are finished on schedule by the 8 week mark then the final 2 weeks becomes time for developers to pursue other things. Training, prototyping things they’ve wanted to build, whatever.
It’s the old Google 20% time concept built into each increment.
The problem with safe is the problem with every other "agile" methodology wrt the article - too many people expect a commitment to all items in the 8-12 week plan, so quality starts to get sacrificed somewhere around the 7-8 or earlier of the 12 week plan.
You need some estimates if you need to sync the efforts of two or more teams. For single teams with single deliverable there might be a necessity to set a date, or might not.
But if there is no external reason to push for a date then setting an arbitrary internal date when it provides no additional value is just silly.
been thinking about this because my current project has suffered from management repeatedly setting unreasonable dates. which causes flailing to get stuff put in, and then we the date finally gets moved out, more stuff to paper over that crappy stuff.
but you have to admit that without a date developers will just noodle around forever.
I think the only recourse is to constantly be evaluating the current slate and the date and keep sliding it out as necessary or throw stuff off the train.
really, you should never miss a date. you should have realized some time ago that it wasn't going to happen and slid it out already.
> you have to admit that without a date developers will just noodle around forever.
This seems more a statement about extrinsic motivation than dates in particular. Dates are the most obvious blunt instrument for applying extrinsic motivation, but there are others.
Intrinsic motivation is in some ways even better. You can't force someone to be intrinsically motivated to achieve something... but pushy dates and expectations can decimate any motivation that was already there.
"but you have to admit that without a date developers will just noodle around forever."
Speaking for myself as a software engineer I have only seldom fixed dates and deliver constantly. My main goal is to deliver value to the party I work for and my end users.
True artists ship.
On the other hand, I do stall occasionally. It's because I don't understand something, and rather than just ship some random junk I try to make my junk do the right thing.
To an outside observer this carefull design - engineering if you will - is quite indistinguishable from noodling.
If you put an arbitrary date for me then you will just get bad code and that is a bad deal for everyone.
There are times when the date is fixed. Then you haul ass and raze mountains to ship, no matter how ugly the result.
If the date is constantly set to some random date I have no idea should I dial quality down and increase velocity or vice versa. Therefore a constant fixed date will just get worse quality, even if there was no good reason to hurry.
I think you meant to say how to have enough transparency so that everyone is honest and accountable.
You don't need imaginary dates for that. Just have people report at fixed cadence what they've done. Good people remember they need to explain what they've done and dont wander off into the wilderness for no good reason. This is sufficient to keep everyone on the right track in almost any environment.
Now you say - "Aha! But what about the occasional person who is incapable of doing their job! How do we point him out!" - to which I answer: If you need to design your development process to safeguard against botched hiring since they seem to do it constantly you really need to fix your hiring. Good people will detect a rotten egg eventually and there should be ways to deal with this outside of regular project cadence. If you try to micromanage great engineers and programmers you are just wasting talent and eventually everyone will just move on and all you have left are the rotten eggs.
disclaimer: I am not in STEM, im an automotive tech who is learning python.
Why do software developers have arbitrary dates at all? We certainly dont. If a customer says they want their work done by the end of the day, we'll take that into account, but the best we can do is estimate how many hours it will take to work on, update you on our progress and inform you of obstacles we encounter. Work proceeds at a safe and productive rate.
For instance, if my wife asked me to make a pizza, I know very specifically what steps are necessary.
When a client asks my employer to create a piece of software, it's a lot like being told to write a book. Sometimes you don't know where to begin and a lot of the time you get the thing 40% finished and you feel like throwing it in the trash and starting over from step one.
> "We believe that communicating dates produces the wrong incentives. What really matters on a long timescale is 1) priorities and 2) velocity." [1]
I saw this written during the 2017 cryptocurrency craze. Has stuck with me as one of the most insightful things I've ever read. Also a fan of 37 Signals' budgets. [2]
One persistent problem I've encountered, is that this kind of nonsense very often translates into the bidding process of large projects.
If you come up with a realistic offer, which should be pretty close to reality in both time and budget, you're out of the race. Other contractors have put in offers with totally unrealistic numbers, making you look both slow AND expensive.
And like clockwork, the undercutting (bid) winners will deliver a 60% finished product come project due date, and then spend years on fixing bugs and "upgrades".
Their in-house devs, and outside consultants for that mater, are worked to the bone. Bugs happen, and the tickets pile up.
And worst of all, these companies get awarded new projects, again and again.
Lazy thinkers like to measure dates because they're easy to measure. I don't think I've ever, in my professional career, seen a date get "hit" - by me or by anybody else - and I've also never seen it matter.
It matters plenty of times. If Turbo Tax doesn't ship their 20xx edition by Jan 1 20xx, they're losing sales. I also work on (non-tax-related) software that is tied to specific dates by regulations coming into effect on certain dates. I don't think this is rare.
I think there is a bigger picture takeaway to be made here, but I'm not sure if I can phrase it too well. The Douglas Adams "I love the whooshing noise [deadlines] make as they go by" quote is perhaps a good introduction. I think the general concept starts out in education, deliver this by date that or there's consequences. And in that moment, the consequences tend to be very real, and if you prefer a smoother ride, not something you want to deal with. What starts out as a way to teach both discipline and whatever it is you're currently learning will then go on to accompany you in your professional life.
In reality, in software development all deadlines are pretty much arbitrary. Sure, there is profit to be made if you move quicker, but there's considerably more profit to be made if you move in the right direction instead of just moving quickly. The latter tends to often be overlooked in the management style outlined in the article.
I think the healthy choice is to estimate, but not stress over the situation. Your estimate is not a promise, and make that very clear when you do give one. If your estimates are taken to be promises, it isn't probably an environment you want to work in for long.
I used to work for a company where important deadlines and release dates were often cast in concrete. At the birth date of the former CEO (husband of the current CEO) who had tragically died many years before.
So if your "natural" release date was a few weeks after that birthday, it was definitely on that birthday. You only had a chance to escape that if your "natural" release date was months apart from the birthday.
But then again, this company never ever hired anyone without a positive graphological expert's report.
In games, at least in the past and I'm pretty positive still, you have to make commitments months in advance. Want the cover of some magazine? It's decided 6 months in advance. Want TV commercials to run? Book them 6 months in advance. Want your ads on billboards or large displays? Again, several months in advance. Want shelf space at Walmart, more of the same.
So, your company, generally, has to book all of that stuff long before the game is complete. So they go to the team and ask. When will this be done? The team says (in 24 months) and so marketing and sales get to work making all the deals for the things above and now the team has to met their deadline or all that stuff above is not only wasted, those people will never work with you again because you messed up their scheduling. This is especially true for retail space because it's not like they can fill the shelves with random stuff on a moments notice. THey've basically got a hole in their inventory and shelf space they would have filled with another product so you've made them lose money.
Much of this is also true for consumer electronics. Deals are made to feature the next smartphone at all outlets, and run commercials etc, months before the phone is ready to ship. All the teams making software for that device have to be ready to ship by that promised date.
How do you do that if they are all booked? Do you just price to the highest bidder so if I wanted my new Star Wars movie on the billboard on May 4th and you want your new Star Trek movie on the same day who ever pays more gets it even if one booked it months in advance?
Right -- there isn't any booking its just about who brings the money for that sign on that day. You can pre-declare how much money you want to assign to an hour and sign but can't know that you'll win for that sign and hour. If you don't win there, you keep your money to use elsewhere.
But we have ~1500 signs and each of them is playing a new ad every ~8 seconds. In other words, there's plenty of space. Those 8 seconds can range from a penny to a buck depending on the time and place and on the current competition. If you want to show up, you can.
Estimates are never good enough, when asked you're supposed to tell them two weeks before their guess. I recollect one project with a hard deadline. This landed in my lap during a worthless business trip while I had a fairly serious cold. I had about five weeks, all on my lonesome. It was critical. I had no time and no energy but tackle it I did.
I had precisely one meeting with the person who issued the project, during which he made various Agile noises. This taught me something I would later come to expect about those sounds: I met with the stakeholders precisely zero times before delivery, despite my repeated asks. I worked evenings and I worked weekends to deliver something on time that was perhaps a little better than expected.
And crickets. For five long months, nothing. I asked tentatively and was told I got paid whether or not it was in use.
So this strangled two values for me: Deadlines, certainly. If I hear a deadline, I evaluate from where it came. If it is a nonsense deadline, I lose respect. False urgency is just a way of life with some people. Additionally, the "getting paid whether or not something was used" is an excellent way to develop apathy in an employee, it destroys the value of engagement.
Sometimes real dates exist, and I'm all for that. Floods can be expected. But too often dates are picked out of a hat.
This is not an essay, this is a bunch of anecdotes.
So projects that worked reasonably well and developed very fast, or even just somehow fast, are presented. Everybody agrees that's good and a success and better than if they were done slower; but so what?
Some are great major engineering projects, but in the context of extreme speed there is a world between a few weeks or even months, and more than 5 years, even if you compare the 5 years in question to project that are a parody in the other direction (yeah, a train project that is planned for 37 years looks ridiculous, but again so what? is it really because diva engineers want to spend all their careers doing "perfect" stuff and reject any deadline they are presented? doubtful)
Also, some are successful, but controversial (JS...); some I don't even know what to think about (is growing the population of a city by 22% in a year good?); some are just the work of geniuses.
And this is a mix of major physical infrastructure/engineering projects, projects for mass produced physical goods, and random software projects. Then suddenly the discussion focuses on physical infrastructure, ignoring all the other kind without even stating why.
This is also hard to contrast with the original article, because we don't know how many of them were mainly date driven. Probably not so much, in the sense that it would be retarded to insist on delivering something that cost a shitload of money to build at a completely arbitrary date without enough concern about the quality.
Too finish: some insane major infrastructure projects have been successful in the modern age: what comes to mind is for example the LHC, yes it took quite some time but it is probably somewhat more difficult to design than a random consumer electronic gadget? (is the story of the iPod that much spectacular? I found it quite common...)
It's a developer's job to meet their deadlines. If they can't make them then they should be negotiating with management. It's all about risk management. Every developer needs to own their deliverables. No dates means no deadlines, lack of focus, lack of closure, lack of product, lack of revenue, lack of money, lack of job.
High functioning teams with sustained value creation don't need deadlines. They're not working on one thing; they're working on many things. There's nothing to "adjust" by imposing a deadline. You can reprioritize, but the date is just noise.
This. I couldn't agree more. My current team is high functioning and regularly delivering value to the business. Delivering value is our measure of progress and success.
Sure, we set goals which have dates attached. We usually plan out a whole quarter of what we want to accomplish. Our timeline is based on best guess estimates. We aim to deliver 80% of what we committed to. Sometimes we do it, sometimes we don't. The business rarely complains because they see regular value being delivered. When things aren't going well we communicate openly and regularly so that no one is caught by surprise.
I don't believe that not setting a deadline is the solution. There are definitely software engineers who will happily change their designs an infinite amount of times if you let them.
> The testers keep running into situations where things don't seem to be right, luckily your product manager is happy to defer most issues raised unless it is a real "show stopper," as Jeff loves to exclaim.
That might have been the critical mistake. Jeff should not have done that. He should have insisted on lots of feedback loops during the project. He should have put more effort into convincing himself that the product is of sufficient quality.
As for the developers, they should have made it clear to Jeff: if he's not allocating resources to convince himself that the product is of sufficient quality, he shouldn't be mad at them when in the end the product doesn't work.
> While it is true that a narrow set of low value software projects are tamable with a Gantt chart, high value software projects that fill previously unmet needs do not lend themselves to being tamable by predictive scheduling techniques.
I think the author vastly overestimates the value and importance of project that most developers work on. I don’t think I’ve ever worked on anything that I could consider “high value”. I’ve worked in big (and small) companies, working on Big Important Projects, but if I’m being realistic I think the overall value and actual importance is actually quite low.
Other than that, I think the essay has a fatal misunderstanding - it’s not about setting deadlines, but it’s about estimating what it costs to do build software. This is useful because it helps us guess when it would be done, how much can be delivered, etc.
I am old enough to have been writing software since 1976, and still do, although I am mostly a manager of managers now. My view is that dates are unfortunate (but sometimes unavoidable in the real world). But estimates are useful. They help flesh out risk, uncertainty, and ambiguity. They provide a set of approximations against which you can plot a glide path. And of course they must be frequently updated in the face of a changing reality. But that constantly evolving glide path is the “current best known” ship date, and that is very useful information (actually you can go deeper and look at its rate of change to give a better approximation).
It’s the job of engineering management to convey to upper management that these dates are projections only with certain levels of confidence.
This is the case when "Jeff" and the "Big Boss" can do the job they are managing. Examples include Zuckerberg at Facebook, Collison at Stripe, Musk at SpaceX.
Every new hire at Toyota has to work on the assembly line for 2 weeks before they can begin their role. This applies from secretaries to vice presidents. How many software companies can say the same thing?
No one who manages my job is capable of basic web development tasks, e.g. centering a paragraph. The result is they are continuously confused and frustrated and our group is unproductive.
I know it is not the point, but I find it funny that the "Code done with care" is worse than the "Code done under high pressure". Logging and wrapping is not "handling" an error, that is just making the exception go away.
I had this happen. First time I'd used a framework for more than a few screens. Totally new way of doing things. Learning RXJS, made a mistake in understanding one of the more strange requirements. Time blew out. But the delivery date was 3 months. Worked crazy hours, product didn't ship the entire thing was seen as a failure.
I was burnt out for a good 6 months after that. Even simple tasks took all of my will power to do. It was horrible. 3 months of the hardest work I've done and considered a failure for it.
Like, sure, if you want me to write Hello World, then I can give you a snappy timeline for that. If you want a POC of something very few people have ever implemented before, then that's going to take about a week. If you want that POC to be ready for production, then that's going to take a lot longer than you're comfortable with to test and develop.
It's also about 98% of "agile" - I don't mean the big deadlines, but the endless meaningless little ones. Why are N days okay to finish a thing, N+1 days not okay, and you have to endlessly salami slice it contrary to common sense until you fit in N?
The solution in this hypothetical is that the technical manager should have pushed back on efforts to squash estimates, and instead gotten the feature set reduced down to what would fit inside the desired launch window.
I've seen that tried, I've never seen it actually work. What I've always seen happen is, they'll ask if X can be worked into the schedule, the devs will say no, it can't. Then the next day, they'll ask if X can be worked into the schedule (usually phrased just a little bit differently than before), and the devs will say no, it can't. Then a week later, they'll ask if X can be worked into the schedule. Then, when the devs say no, it can't, they accuse the devs of pushing back on everything, so the devs finally roll their eyes and agree to X (knowing that it's impossible to deliver because it's not even defined, but who cares because nothing ever happens when you inevitably miss the dates anyway). Then the next day, they ask if Y can be worked into the schedule...
"We can do X... I suspect we'll need at least N weeks after we have a proper scope/spec/X/Y/Z from you, though, so if you want it done by $(MILESTONE) we need it by $(MILESTONE-N) at the absolute latest, or more preferrably by $(PREVIOUS_PLANNING_MEETING) so we have some wiggle room. No, that's not a spec. Yes, you need to participate in defining the scope of this thing - otherwise it'll take even longer when we're forced to rework completed things to work how you actually wanted them, and longer still when we work on things we thought you'd find important but don't care about. When can you meet so we can get this properly defined and fleshed out? We need a meeting anyways to discuss what other things you want that we're going to have to cut or defer to fit this into the schedule as well."
If they work with you to cut/defer other things they've asked for and actually get you a scope/spec/X/Y/Z on-time, then good! You've successfully responded to a change in their priorities.
If they suddenly lose interest when they might have to do some work... you've probably deflected some high work low value ask. Also good!
If they put in the work but can't get you scope/spec/X/Y/Z in time... well, hey, that's not on you. You need enough time to get these things done.
They might still want 3 women to make a baby in 1 month... but they might believe you when you say that's not possible if you at least look like you're trying to work with them on fitting X into the schedule.
Well, I've successfully used that strategy to deal with hard external deadlines.
You can't just say "no, can't do it", because in all honesty, you don't know. What you can say is "based on our current estimates and priorities, it will not be possible." If they insist it is needed then they need to increase it's priority until it fits within the amount of estated work that can be done before X dates.
I think the underlying problem you are facing is viewing a set of tasks as a schedule to be set rather than a prioritized list of tasks with estimated completion dates.
It can work. There does need to be mutual trust between product leadership and engineering.
e.g. in the case you described, the engineers need to be able to communicate without fear that X1 and X2 are basically the same engineering work as X, and still can't be accommodated, and the other side needs to trust that they are not just being lazy.
Total aesthetic digression: Having the topbar offset inversely based off ~1.5x the scroll position is one of the coolest effects I've seen for hiding top bars.
I like this a lot more than the sticky style that most things use.
My current thinking is that sometimes deadlines are needed and Scrum can make that happen. However, the deadline you get from the engineers is going to be vastly slower than if you'd let them just do the work and tell you when it was finished.
I know marketing lines to pretend that they can't do their jobs without hard engineering deadlines but marketing is overrated anyway. Ask yourself if you really need a deadline or if you're just slowing down engineering with your incompetent management.
If you are paying people on a schedule you need to have at least a rough understanding of what they can produce on a schedule. The best illustration of this is client work that is paid "by the job" -- you need to understand what you can produce to have any idea how to bid.
It annoys me so much that many people think software development is misunderstood. You think people in other types of business don't have to give estimates based on almost nothing? This happens everywhere, anywhere. But somehow software engineers think they are special and are being treated super unfairly. Giving estimates for software dev is 10x easier than giving estimates on the usual vague business problems management is facing (the same management that's always responsible for everything that is wrong, according to most software developers). Yet I don't hear "management" complaining about that. Software devs are not royalty.
1) > Giving estimates for software dev is 10x easier
No, it's not. If I'm writing software similar to another project, then I can estimate based on the previous project. But that's rare.
Instead it's something entirely different, otherwise I'd be able to juse reuse the previous project. In addition, estimating eng. projects like bridges is easy, because bridges obey physical laws, like gravity. That doesn't apply to software.
2) > the same management that's always responsible for everything that is wrong
Ultimately, mgmt. is responsible. However, mgmt. being at the apex can and do bury their mistakes, no matter how large. As we found out in 2008, there is no criminal penalty for mgmt. stupidity, regardless of how extreme.
A case in point is Boeing. They kill 350 passengers and damage America's trade balance, yet their new CEO is from the same board that was responsible. Mgmt. has no accountability, in the US anyway.
You wanna move beyond anecdotes and nice sounding business arguments? Read FIRO by Dr. Schutz prob out of print or "Human element" by same. His son Ethan has updated these books.
Look, in normal high functioning groups conflict is normal. What confers distinction there is two things:
- no individual on team is ridgid and unchanging
- conflict is resolved with 100pct buy-in ie not cause the boss yelled, or you were out gamed, politics, favourites. IOW there is trust in the team (together with self awareness, competence etc which the book hits on)
When human factors burn down projects down the issues are quite a bit more about trust, individual self awareness, defensive behaviors, and not resolving the problem in a group way. Trying to eliminate conflict with rules of thumbs is a fool's errand. Conflict itself is not a sign of badness.
References to organizational modalities (the strong boss, the clear vision, and similar sounding approaches) help at the margins only and then only randomly.