As a developer, seeing another developer suggest that they just take a vacation and leave the project leads and stakeholders to talk about what should be done in a month is really weird.
That will not lead to the absence of a death march - it is a recipe for a death march. Not only will you not have an accurate assessment of the tasks but they will not be ordered correctly, and likely way overscoped for the timeframe, and you get no chance to say no. Technical minds / engineers in the room early and often is critical to success - otherwise you’re just told what to do instead of architecting it the “right” way.
Communicate when you need to but try it all for a sprint or two (really, Standup is a hardship? You may not be doing it quite right), then drop after the team finds a rhythm.
Edit; after reading the author’s other works the burnout seems to be centered on a big push from stakeholders to accelerate and keep going so a sprint is seen as a reset - kinda like a new day dawning in a news room. You can plan-in your work to avoid this and still continue to make progress but it does take some discussions with leadership, or at least a clear justification about why this week is exploratory instead of hands-on. Done it many times. I would not suggest changing the whole method just to accomplish this, however - a process fix for a problem like this won’t necessarily help.
I'm not sure the author is advocating for no developer presence during the planning period.
> The first week of each month is spent with project leads and stakeholders defining the upcoming sprint
At the very least, I'd suggest that developer leads or engineering managers are stakeholders and therefore involved. They should be liaising with their development team (also stakeholders) during the planning phase.
Perhaps this sentence is overstated:
> It is an intentionally light week and many people may simply take the time off to paint or surf or whatever.
People should perhaps take SOME time off to relax, but likely not the whole week.
I agree. I didnt read that as an invitation to take 5 days off every month, therefore advocating 60 additional holidays in a year.
I saw it more as an opportunity to catch up on "other stuff". Maybe a tool you wanted to work on to make your work life easier, or leave a little early to wrap up taxes, or do some PoCs etc. to see whether a refactoring idea you have is actually feasible or not.
Yes, this is more along the lines of what I'm talking about. I'm advocating common sense over religious adherence. Do what works for you.
I am saying there's a lot of burnout in the tech industry and it's at least partly a process problem.
Maybe it's just me and I'm "doing it wrong", but I think it speaks to the issue that the suggestion of "taking it easy a week out of every month" is met with cries of "This is madness! It will never work!"
You may want to look at some of the arguments for "slack" in agile. Other agilists have thought about this from various angles, from scheduling it via WIP limits in kanban to dedicated 1-2 days at the end of a sprint. You're not "painting or surfing or whatever." At the same time, you can't capitalize that, and capitalization drives a large portion of IT.
Edit: I misread this to mean “all devs take a week off” instead of “a light week in collaboration on some backlog stuff” - that makes total sense.
I also misread the "first week" stuff to mean that you leave the room and take a week off.
Having a light week while this is happening makes sense. It ends up being light anyway while the transitions happen. Apologies for the misread.
As for madness - I was not at all implying the suggestion was madness, and different things work for different teams / projects. I personally find standups are super helpful so I wouldn't want to get rid of them. That regular cadence it creates is very helpful in making sure we all stick our heads up and incorporate what's going on around us. If your teams are doing this already without the regular touch-points, that's awesome, but I find that with most teams that is a learned thing that takes a lot of time, and regular scheduled places to update are important to success.
I read it as a proposal to declare 36 weeks a year off-limits for days off, because, you know, there are those well-defined special weeks where vacation days are supposed to be spent.
Ah! My initial read on this was “devs take the week off and the project leads and stakeholders do the work.” The “with” did some work that I interpreted differently. That makes sense.
I agree. The team (which includes developers) should be the ones pulling issues into the sprint. Leads and stakeholders can prioritize on their own, but again developers need some say in that process because technical issues my drive some prioritization.
I get the concept, but a week off seems a bit extreme and a hard sell. The team should already be working in some slack time in the sprint. The reason for slack time is that it gives a bit of a cushion if something runs over, and it keeps people from burning out. The other big upside for those on the outside is it helps build confidence that when a ticket is pulled into a sprint it almost always get completed.
Agile has never been about predicting what you will do during a spent and then having slack or crunch time. Agile is about ranking your work by priority and dependency, setting meaningful milestones, and then adjusting your estimates frequently to avoid false promises and react to changes in the environment. If you don't finish planned work in a sprint, that is a planning success because after only a brief 2-4 week delay you actually know your performance against estimate and got clear information about how much you can do in a month, and a better chance at estimating what you can deliver next month.
> If you don't finish planned work in a sprint, that is a planning success...
In practice, most companies don't do this. They mark it as a failure and put it in red on the the big screen for all to see. Too many reds and there's disciplinary action.
It says that the sprint planning takes about 45 minutes.
What I take that this means, is that there is a backlog with stories and tasks which was created and refined by the dev team. These stories include specifications, estimates and more.
So what the project leads actually do, is to decide which of these backlog items will get into the sprint. That's all.
Yep. If everyone’s updating issues in the ITS, it’s easy to plan a sprint. Priorities are mostly already assigned and the sprint planning meeting should be more of a sanity check.
Engineers are only out of the loop insofar as they have fewer meetings where they’re sitting around waiting for their turn to speak. If they want to weigh in, they should, and nobody is stopping them.
So is the burnout because you’re just grinding all the time on tightly defined stories and you feel like there is no room to slow down? Legitimately curious and I appreciate you writing this up and putting it out there.
It's not even tightly defined stories, it's just teams working too much with no downtime, no time to slow down and catch your breath. There are always more things to do than time to do them, so unless lines are drawn the default is perpetual overwork.
Many seem to freak out at the concept of working less. Yet the 40 hour work week was considered radical at one point. Googles 80% time is by most accounts not a real thing, but it's a start. I'm at 75% time here. Then there's 996 if you want to go the opposite direction.
Sure, if this dialog is happening the whole time that makes sense, but burnout also seems like something that would be dealt with using the backlog - make time for exploration, test spikes, learning, etc. If all this work is well defined already and the backlog is owned by the devs, that seems like a solved problem. If, however the devs are actually spending a boatload of time refining stories before planning then sure, take a week off while others talk about it, but that has a bit of a smell to it also in terms of a happy medium.
If the overall message is “slow down sometimes” then I agree 100%.
If you're getting burnout doing agile, you're doing agile wrong.
Don't do sprints. Have a continuous backlog. Don't do overtime. Don't make estimates. Always do the simplest thing. Only ever do the most important thing, as defined by the stakeholder.
I've written and talked about this at great length. The fact people suggest agile gives you burnout reinforces my experience that Scrum is largely misinterpreted and people incorrectly focus on sprint commitments. If Scrum is so commonly misinterpreted, it is flawed.
The business wants to know how much feature X is going to cost and when they can expect it.
They need to know that, because they need to decide if it's worth it in the first place, or because they need to plan follow-up actions for when the feature will be done.
If the developer doesn't make estimates, you're just forcing other people to make their own estimates, that they'll hold you to.
> The business wants to know how much feature X is going to cost and when they can expect it.
Of course they do. We all want things that are impossible to have. I want to know the AAPL stock price in 6 months.
The traditional way to manage this impossibility is that engineering lies about it (they have to lie, because they can't know either), and once people are lying to each other, trust is unlikely to arise.
The agile concept of "velocity" is the best way I know of managing this. It's not very good, and it's often a victim of Goodhart's law.
It's not impossible to estimate roughly how long something will take.
If you consistently get it wrong, either:
1. You're not breaking down the work into small enough chunks to properly think about how long it will take
2. You are probably consistently under (or rarely over) estimating and should be able to fix that. For me, I have to triple my estimates, it always takes 3 times longer than I think it would
To claim estimating is "impossible", when many of us do it absolutely fine, is ludicrous.
Separately, there's scope creep, but that's another matter and again can be managed (e.g. "if you want X extra functionality for the same cost, you're going to have to drop feature Y, which will take roughly the same time").
I've seen Agile™ estimation break down when the task is either
1. something nobody has done before (or has no close analog), or
2. is so interconnected that it can't be broken down.
The former is just a matter of hiring more experienced engineers _or_ allocating exploratory/prototyping time. Still high uncertainty but these kinds of tasks become rarer over a time.
For the latter, the common refrain is "break it down" but there certainly exists a relatively common type of work that must be completed all at once. And I find it increases as the complexity or popularity of the product increases, so with time. Therefore perhaps the metaphor of building becomes less appropriate, and surgery paints a more accurate picture.
Builders can construct a house, then add a garage, go work on another house, then return and add a guest bedroom, then remodel the kitchen, all with relatively minimal pausing or switching cost. But once a patient is put under and opened up, the surgeon really should work on finishing up that one patient before moving on to the next one. And for some weird reason we tend to prefer one big surgery to multiple small "atomic" ones.
> Builders can construct a house, then add a garage, go work on another house, then return and add a guest bedroom, then remodel the kitchen, all with relatively minimal pausing or switching cost.
Have you worked with contractors? This is so so so so not true.
> 1. You're not breaking down the work into small enough chunks to properly think about how long it will take
This usually means prototyping, which means actual coding, which means you couldn't do it as you already had to give your estimation. To put it another way, places who require estimates for planning want them during planning and don't allow time for doing this. On the up side, when they do let you take the time to prototype they take your prototype and put it right into production because then the estimate is 0.
> 2. You are probably consistently under (or rarely over) estimating and should be able to fix that. For me, I have to triple my estimates, it always takes 3 times longer than I think it would
This is a common trick but it really just means you are not really estimating, but guessing that it will take less than this amount of time. This would be more apparent if you gave an estimation range, what you actually estimated to your estimate times the 3X padding.
> 1. You're not breaking down the work into small enough chunks to properly think about how long it will take
This is exactly what waterfall was. It pre-planned all the small tasks beforehand and required stopping the world and replanning everything when something changed.
Agile was an attempt to move away from that and create a feedback loop where you do some limited work, learn something from it, and then do another thing after you've internalized what you learned. (Original "sprints" were a coordination mechanism between departments that was applied in the automotive industry: there was lots of dead space in-between them). The whole point was the iteration was small enough that it didn't actually matter if your estimate was correct or not.
This bastardization where Agile has become synonymous with estimation accuracy is completely against its original spirit. People have started to care about estimates because Software Project Managers wouldn't have a job if there wasn't a need for heavy-handed planning sessions.
I think the estimation accuracy is not the main point nowadays, but instead the simple fact that the viability/rentability of every project matters, and even if there's an up front pile of money to spend (quarterly/yearly budget), there are probably multiple competing ideas on what to spend these - and of course these usually consist of and involve software and its development.
Of course this is why having a low-fluctuating empowered team (project ownership, refactors, etc) can usually deliver changes faster and with lower cost and with greater consistency, than every time doing a new project (which might involve new people who never saw the stack, nor the business domain) to modify something on a system.
> And if you do, that time is essentially wasted - something that shouldn't be billable.
If I develop a feature for company A, then reuse it for company B, isn't A footing the bill for B? I mean, we all do that, but I think it's worth thinking about.
It might be billable to comp B (they got the value add), but internally that should not have high cost (in hours, resources) attached.
Ed: that is to say the time
is wasted - but might very well be able to charge a premium on the experience. In my original comment I was mostly talking about making feature x for customer a, then making feature y for customer a. Where x and y are pretty much the same.
That's the problem. In theory every bridge is the same. Yet you need to plan each one of them.
Similarly every run of the mill business-as-usual boring-as-fuck CRUD corporate internal "app" is the same, yet they still need a lot of work, and they are still hard to "estimate".
Initial estimation (over many sprints, with either a greenfield project or with a new dev team) is always very hard, almost a completely foolish attempt.
After the first few sprints the uncertainty reduces.
And after the team gains experience with the system (business domain + codebase + infrastructure - if applicable), they are much better at scoring tickets (SCRUM poker), which then can be converted back to time from points.
Directly estimating time (asking for time estimate from programmers) is just something that never works (or if it does, then it means the programmers does the following adjustment internally), as humans get into the confusion of constantly having to recalculate their intuitive feeling of required time based on how long actually that took the last time they felt that.
50% off is understandable ? Where can I find such forgiving clients? My clients lawyers would eat me alive if I would start to bill them in such manner. They dont want to hear about uncertainty - they are buying professionals and this kind of estimations looks to them like we dont know what we are doing.
Sure we all know this, but for business people with money this looks fishy.
This xkcd sums up the problem perfectly:
https://xkcd.com/1425/
How non technical person can tell the difference between task inherent uncertainty and Your incopetence? They cant that's why they will buy Your competition that will claim there is no uncertainty.
> To claim estimating is "impossible", when many of us do it absolutely fine, is ludicrous.
How do you do it? I mean, how do you know when you reached the necessary granularity? And even if you know, sometimes it just means more questions that the client might not be able to answer at that time. Do you come up with a worst and best case and carry that delta up the breakdown hierarchy of components? Are you able to do this for every kind of task that can come up in a project? (From frontend design to backend implementation and third party system integration and infrastructure setup and then product deployment.)
And velocity should be an internal team measurement not shared with outsiders because (Goodhart's Law) when management says "Let's increase our velocity" and the team and developers are GRADED/PROMOTED on their velocity then you'll get point/estimate inflation which will hurt you more in the long run since the inflated estimates actually now allow for the work to fill the time (Parkinson's law).
> The traditional way to manage this impossibility is that engineering lies about it (they have to lie, because they can't know either)
Honest estimates with uncertainty are not lies, and not having certainty doesn't prevent estimation.
But, yes, people seem to often decide that being uncertain justifies self-serving lies instead of honesty (and sometimes the environment encourages that by punishing honest estimates.)
What's the usual processing speed of a software engineer when it comes to reading through and understanding design & specification?
We found that usually either the documentation/specification/requirements are too fine grained (and then they then change all the time, but then there's no real effort/bandwidth to do change management on the specs), or they are not detailed enough, which makes the estimation process a useless guessing game on what might they mean by this or that.
See, I would expect the engineers to pipe up and explain that. It takes collaboration to get it right, and it takes the engineers setting expectations properly for what they need to estimate accurately.
It’s a collaborative effort, not a one-way street, as with most things.
Another bit of wisdom I got from Kent Beck is that there are three basic controls to every project... schedule, scope, and resources. You can only control two of them. And resources are generally fixed at the beginning of the project(1), so most projects are either scope-bound (we must have all these features), or schedule-bound (we must hit this hard date). If you're feature-bound, estimation failure means you'll be late. If you're schedule-bound, estimation failure means you'll be incomplete.
This can be a very hard pill for the business to swallow. They want it all, and they want a predictable schedule. But Beck's triangle is akin to thermodynamics. Do you want the volume, or the pressure, or the temperature? When fixing devops-related and agile-related process problems, I often hear "But we're a schedule-driven company!" when they have a scope-driven problem like process transformation.
1. As The Mythical Man-Month pointed out almost 50 years ago, adding resources to a late project makes it even later.
> If you're schedule-bound, estimation failure means you'll be incomplete.
Schedule-Bound development (or Deadline Driven Development) can actually work well with minimal estimation as long as you are truly building MVP (minimum viable product), you have to ruthlessly slash features and only build the core features that are going to deliver the most bang for the buck.
There is a fourth control of course which comes into play when nothing else will give room: quality. You can take many shortcuts to deliver in time, full scope, with the resources available. But the result will be buggy and/or unmaintainable.
Surprising amount of companies choose this path, I guess most without realizing it.
Quality is basically inherent in scope. Is testing the product in scope? Yes, then it will take up precious resources (time). Do you want to test it on every platform? Yes, even more time. (And of course the same goes for code review, writing unit tests, planning, writing and discussing a design document, etc.)
> They need to know that, because they need to decide if it's worth it in the first place
If this is the case, they should also be able to state the threshold above which the item would be "not worth it", and I would assume this is significantly easier to figure out than it takes developers to build a decent estimate.
From a developer point-of-view, the first high-level estimate is then much, much simpler: "Is it going to take more or less than $not_worth_it to build?"
If the answer is "more", then it gets dropped -- at least in its current state. It could be re-scoped later as a new item with a smaller MVP, for example.
If the answer is "less", then the developer can put in the time to get a proper estimate. I think there might also be an argument that if the backlog is properly ranked the detailed estimate also becomes pointless -- just work on it until it's done. No one should be doing detailed estimates on items that are more than a few weeks/sprints away in the first place.
Disclaimer: I've only recently been thinking about this abstractly, and have not yet tested this in practice, though I'd love to have this discussion with anyone that has.
Nobody should make estimates. They're always wrong.
Do your best to break tasks up so that all tasks are the same size. Then work on tasks. You'll find a stable average of tasks per amount of time and that will let you forecast how long things will take, how much they'll cost, etc.
That's how you figure out when things will be done.
Some tasks have a high degree of uncertainty. Others don't.
Back when I was using a ruby-on-rails style framework (in PHP) I would frequently get 20 hours of work estimated properly down to 15 minutes when it came to adding simple features to a web application.
If on the other hand you are trying to figure out the gap between what the documentation says should work and what actually works, that is hard to estimate.
That act of breaking up and organizing tasks of the same size, that's what estimation is. This feature has these tasks, historically we complete these tasks in this time, so here's a hard minimum for a completion date (which implies cost). Slap on an appropriate fudge factor for dealing with other teams, testing and burn in, and general error bounds as needed.
You've described scrum, what you're doing is scrum.
Points are a team-internal measure of a task. You can after the fact convert points to time, and then after a few sprints (when you have a fairly stable average velocity) then you can convert points to hours and do a forecast/estimation.
// In my mind you forecast the date of completion, but you estimate the amount of work. It's probably just mindless semantics, after all saying you can estimate the date of completion sounds just as natural, but saying you can forecast the amount of work sounds a bit unnatural.
This is the perfect recipe for never delivering anything. Without release dates developers will continue building and gold plating and building and gold plating. Create your tasks, estimate your tasks, put a date out there, and hit the date. If the product has bugs, unfinished features, then so be it. Users understand flaws. They don't understand missed dates.
That's interesting as in my experience is exactly the other way about. It's the experienced developers that try to gold plate to avoid the issues that they had in the last project or two projects ago, whereas the juniors ship code quickly but unfortunately often incomplete and certainly lacking a reasonable amount of test coverage
I don't think the parent poster was saying that the learning itself was bad.
I think the gold plating they're referring to is a form of over-correcting. The learning itself is good, and correcting prior issues is good. But over-correcting and over-learning can be problematic and can lead to gold plating.
I don't think there's any easy indication of the line between the right-amount of correction and over-correction, but I don't think it's unreasonable to state that one can over-correct based on prior experiences.
The second-system effect is definitely real and is a trap most developers will fall into. I think gold plating introduces liability and it would be better to ship early. I am, however, conflating my own behavior and anecdotal observations to paint broad strokes.
Estimates are always wrong only if they are concrete estimates as if they were certain.
If, instead, they are 90% ranges (I am 90% sure that this will be done between x and y) then it is much easier to estimate accurately. It is also easier to spot bullshit (if the spread doesn't go up as your time to completion moves further from now, it is probably a bullshit estimate).
I really love the method from The Clean Coder, where you make best/median/worst estimates for tasks and then add them up to a mean and standard deviation. This helps capture the truth of “we don’t know how long it’s going to take, but it’s likely between x and y”.
Where this still falls apart, for me, is knowing how many hours per day I’ll be able to spend on each project. I have multiple clients, and things come up. This method has gotten me very good at the budget aspect of project estimation, but the scheduling aspect still slips some (it’s rare that more hours in a day become available)
I think this is totally reasonable at certain times. E.g how long will it take to add feature x with scope y to our existing product is a decent thing to estimate (and estimate only) for stakeholders to prioritise appropriately.
I think most problems people have with estimates is when they are applied to things too large, or too small, to reasonably estimate. E.g How long will it take to build this product from scratch with a laundry list of features. Or more commonly, to micromanage. Why does anyone care whether this task will take 2 days as opposed to 3? That’s not meanginful information unless you’re mistakently expecting the individual user story estimates to add up to a reliable assembly line of work.
I’m happy to estimate when it has some business purpose. If not, it’s meaningless busy work or worse.
Theoretically. Practicaly they don't do that kind of planning and high estimate leads to pressure to lower it down (or making you feel ashamed for it being to big etc), which most developers will do, because developers tend to sux at negotiation.
That's where it breaks down. If you strip the Scrum-Industrial Complex nonsense away, one of the basic concepts of Scrum planning is that the business gets to define the stories, and the developers get to assign the points (or whatever mechanism is being used to estimate). Business sets the scope, technical sets the resource requirements.
If developers can't hold the line on estimates, they're toast. Nothing will ever get done on time or under budget, because the organization is focused on basic dishonesty about what work can actually get done. Which means people are being rewarded for the wrong things. Measure by estimate accuracy rather than promises made, and you'll see a lot more honesty in estimation.
Only issue being that the estimates one gets from poorly planned sprints are probably less reliable than just asking the devs how long the project will take and going with it.
Good estimates come from watching people deliver over time and scientifically comparing empirical performance to subjective estimates, not asking them to predict. Joel Spolsky has a great blog post on Painless Software Schedules.
There is nothing scientific about this method in my opinion. You do not make consistent reproducible experiments, you do not control for anything, you haven't even formed a null hypothesis etc.
If it's optional, they need to know to make a decision to include or exclude it.
If it's not optional for the project, but the project itself is optional, they need to know to make a decision to kill or keep the project.
If it's not optional to the project , and the project is not optional to the business, they need to know to decide whether they keep or fold the business.
In any case, if they might choose to keep the business, project, and feature, they need to know because they have to budget for the cost if they do so.
So, essentially, business always needs to know the cost.
>Don't do sprints. Have a continuous backlog. Don't do overtime. Don't make estimates. Always do the simplest thing. Only ever do the most important thing, as defined by the stakeholder.
The problem with this is that the stakeholder might not understand what simple means. It happens here all the time.
We get "simple" requests for verbiage changes, but after reviewing the story, the verbiage request isn't universal. It only applies to certain offerings, and the stakeholders only want the verbiage the be applied after a certain step in the application. This is still a relatively simple change, but when factoring in all the other "simple" requests that involve complex logic, changing displayed text becomes relatively complex.
We do sprints because it's our time box to see how close we are to hitting the mark. A sprint isn't a hard deadline in which the team must kill themselves to get everything finished. It's an arbitrary passage of time for setting goal to keep on track with what is going to be released. If you have something that's releasing two months into the future, it's easy to say that you can still make time although your first two weeks were riddled with unexpected complications and stoppages. A sprint forces us to focus on what should have already been completed to re-prioritize if necessary. And you can't feasibly do that without an estimation.
The two biggest problems with estimations are underestimating and treating estimations as promises. It's hard to estimate. So the best course of action is to make stories as small as possible. Probably smaller than someone would consider rational. If not, at least have the stories divided into individual tasks or chunks. Then once you have estimations, treat them as goals rather than deadlines. Use your sprint review as a time to honestly reflect on why the estimation was missed. Then, and this is critical to successfully estimating in the future, use the notes of reflection to make better estimates.
> The problem with this is that the stakeholder might not understand what simple means. It happens here all the time.
"Do the simplest thing" means don't overengineer, not necessarily that the feature won't be complex. You only code up what helps fulfill that particular story's definition of "done."
As for complex features. when my stakeholder asks for some big complex change it's almost always decomposable into much simpler stories. Maybe those have to be hidden behind feature flags until the whole epic is done, but they're shippable individually. Doing that decomposition up front helps demonstrate the complexity to the stakeholder and takes some pressure off of me. It also makes them feel secure because they have more granular insight into progress; that they're not sending me off on some Lewis & Clark expedition.
The number one reason agile projects fail in my experience has absolutely nothing to do with planning session, sprint cadence or estimation. It's because the client was not properly prepared to accept iterative delivery or play their part as product owner. I see a lot of team organize themselves around a well-groomed backlog and set their priorities only to have clients come in and ask for deadlines and fixed scopes and all the other stuff that is anathema to agile. If you client is able to set priorities effectively and allow a slower, quality-driven model then everything else becomes just so much easier.
I just read a marvelous book called Handmade, by a fine furniture woodworker, and something he says over and over is "Go slow to go fast". The sales pitch to the business for a well-controlled agile process is that it maximizes productivity. Shifting priorities and poor planning undermine the productivity of the development team.
Ironically, such clients also seem to expect that whatever additions/changes they dream up should be able to be folded in to the plan willy-nilly. Whereas if they accepted an iterative process that would come naturally, without constant re-negotiation or ill will.
They can! That's exactly the point of agile and is how you get them onboard. When clients want a feature that is weird or complicated or whatever, the answer is never "no" the answer is "sure, now tell us where it fits in the priority list".
And agility in this case being Business Agility: the business being able to change course, not being hold hostage to a years long plan which cannot be changed.
Agility has nothing to do with software development, and everything with business.
I tend to view scrum, kanban, XP and also the more traditional tools like V-model as tool boxes - or maybe some kind of pre-configured framework. They combine agile or other project management tools in order to solve problems the team or stake holders of the team have.
However, this doesn't mean you can't take out and exchange parts. Some teams work profiles fit well with set sprints with a stable set of tasks. Others, like ops work with few people, doesn't due to incalculable factors like incident management. Prioritization might need different mechanics depending on the position and the responsibilities of the team.
It's all a big grab bag of tools to create some working workflow for a team.
If you can accurately estimate how long a software task will take, you should have already made a reusable component or automation to generate that code.
Estimates are meaningless. I've seen PhDs waste endless hours faffing with estimate-calculating spreadsheets.
Fundamentally, the universe is unpredictable. Chaotic and complex systems require their starting conditions to be measured to an infinite level of precision to be predictable. The Heisenberg principle means this is, as far as physics can tell, impossible.
On a more practical macro level, a complex adaptive system becomes unpredictable once three feedback loops are present (the three body problem is related).
Modern computer systems are unpredictable because we cannot predict the interplay between levels of abstraction.
It does not matter how smart you are. Unless you have perfect knowledge of all levels of abstraction in the system below you, even in a macroscopic sense you cannot predict the future. Precise estimates will be inaccurate.
Confidence ranges and superprobabilities are of some use. Discrete and precise estimates are an utter waste of time at best, and are dangerous and misleading at worst.
EDIT
Written on a mobile waiting for plane take-off, hence lack of citations. For more on complex adaptive systems, I recommend the works of Murray Gell-Mann and the research output of the Santa Fe Institute, particularly Scott E. Page.
Another way to put it: If you know how long something will take in advance, you have a solution in mind. It is unlikely that this solution is (A) the best one and (B) the one you will actually implement. It would be stupid to ignore information you learned along the way. If you could actually predict the future you should invest in the lottery, not in software.
EDIT: Of course there are projects where you actually know exactly what to do. Happens a lot in consulting. That has nothing to do with Agile though.
I think it's often the over approach from the manager/PM side: they will be looking for a methodology to have estimates and team commitment, and Scrum will be an option.
There is an awful lot of PMs who will candidly explain that they don't really care about the methodology, they just need stuff to get done and know when.
That is technically be true, but I've worked at four shops that have implemented Agile methodologies and it hasn't been true for any of them, nor for most of the engineers I personally know but don't work with. I do personally know one person who works on a team that this is true, but he's the only one.
This may be doing Agile wrong, but if something can be so easily done wrong that it's common, I count that as serious flaw in the methodology.
I'd push back on calling Agile a methodology. [The Agile Manifesto](http://agilemanifesto.org) a set of ideals, that's all. These ideals often run afoul of conventional wisdom in traditional management/business/sales circles, so we end up with a set of procedures masquerading as "Agile" in order to not upset prevailing sensibilities.
Said another way, estimates are not promises. Don't crunch to meet them. I think it should be phrased as "no deadlines".
The whole sprint structure is so you're constantly adjusting your plans and estimations at some predictable time. Without a sprint you can end up with randomization.
I've noticed some managers and project managers love to emphasize the that sprint plans are "commitments". "OK, is this what we're committing to for this sprint? Is everyone comfortable committing to this?". LOL. OK. Maybe that guilts the young bloods into doing free overtime or something. But no.
It's like when car salesmen try to get you to name a number you'd definitely buy the car for and sign it on some not-at-all-binding-or-official piece of paper, like that means something, before they go back and "ask their boss if they can make it work". Psychological trickery bullshit.
It's a very similar psychological trick. I've even heard project managers I like and who I think are generally very good do it. I think it's just part of their language now, and some may not realize they're doing anything kinda shitty. But it's something straight out of Cialdini's Persuasion, and unsubtle enough that even I can tell what it is.
"Do you feel comfortable committing to these stories?" Always a question.
Committing. If you don't make it for any reason not obviously caused by "outside blockers" you're morally responsible—and maybe even then. What are you, some kind of liar? Quite a step from an estimate. Kind of harsher than a deadline, even, which are oh-so-rarely as "deadly" as the name implies. But people close enough to Scrumish processes to get in the meetings but far enough away not to be writing code or testing things or putting out designs sure seem to like that word. Commit.
I agree with most of it minus the "Don't make esitmates" part. Without making some sort of estimate things just don't work.
I guess maybe it could work assuming you fully control a single product. Everywhere I have worked we need the estimates simply for coordination of all the moving parts.
I think by estimates they might mean deadlines. It’s well worth asking, as an engineer several questions like: “How complicated is this? What are all the moving parts? Whose going to need to be involved to get this out the door?”
But it’s counter productive sometimes to say “ I think feature X will be completed by Y” and then that estimate turns into a deadline.
Maybe you could rephrase it to "Don't make estimates before work is well underway". The main problem with estimates is that they are usually just wild guesses and pretty useless. But once you've got going on something, have had time to think it through and test your ideas, you can usually give at least a very rough estimate at that point.
>Don't do sprints. Have a continuous backlog. Don't do overtime. Don't make estimates. Always do the simplest thing. Only ever do the most important thing, as defined by the stakeholder.
you just described doing agile wrong...
You're advocating for a version of agile lite, not agile.
Or alternative, agile is different to everyone you talk to and your agile isn't the same as someone elses agile.
Take your pick, but sprints, estimations, not only doing 1 thing/most important things are basic tenants of agile as most people see it.
Would you prefer the centralized planning model of waterfall? Of course none of these systems are perfect, but it's been a major step in a better direction for everyone involved.
What i would prefer, is to take a step back and look at all major interest partys involved, who will deform the development process. If management puts to much pressure on, a good process would give tech and the customer more chances to counter said pressure, to avoid tech debt and badly implemented features.
I want a process that reacts to the situation, in favour of the product, in favour of longterm goals - who actively resists people who try to gamble it for whatever reason. Agile is not that.
"Agile" is a set of principles and values as defined in the Manifesto for Agile Software Development. If how you work contrary to those principles, then you simply are not "Agile", no matter if you call it that.
"Agile" will never fix bad management, nor will anything else for that matter.
You have to do estimates, it's how a business works. Not knowing when something will be delivered is too much to ask a company to deal with.
Also, "always do the simplest thing" is one of those phrases that can be twisted and morphed to support literally anything, which makes the phrase useless. It feels good to hear and say, but the reality is it doesn't help you out of a jam.
Sprints are exactly what you're describing, except with accountability built in. That shouldn't scare people, but it does, and that is what causes burnout. Fixing the fear around accountability is how you fix burnout, not eliminating the thing that your boss can use to justify your job.
The key thing people miss about agile (and project management in general) is that you have to tune the process to the situation.
If you look at the PMBOK (Project Management Book Of Knowledge) it is really a comprehensive list of all the things you might have to think about while running a project. All of them are relevant to every project (e.g. hiring, communicating with the public) but some need a lot of attention for some projects and others don't.
I've worked on "A.I." projects where the sprint involves running a batch job that might take two days if it all works right. If it doesn't work right you might have to retry a few times.
When I was in charge of that batch job I would start it as soon as possible, sometimes with a week and a half to spare. Whenever somebody else was in charge of it they would start it with half a day or a day to run and we would blow the end of the sprint.
I blame the continuous stream of "urgent but not important" communicates generated by agile for that.
The timeboxing of planning is also a very bad idea. I worked at a place where we had a timebox of 2 hours for planning but really after that we were nowhere near a realistic plan for the sprint and it would take another 2 or 3 days of knock-down, drag-out meetings that would leave us all exhausted to understand what we had to do. After that the work was mostly downhill, at least the way I saw it, but one of the other team members would consistently burn the midnight oil at the end.
Often agile "teams" have a "normalization of deviance" situation where they have to do one thing (or say they are doing one thing) so they can say they are sticking to the process, but actually do something entirely different to get the job done.
That is why the retrospective meeting is at the heart of agile. A truly "agile light" setup would be:
Every other week, do a retrospective.
That's it!
On the retro, ask yourself 3 questions (or work with these 3 themes):
1. Is the way we are working helping us, and the rest of the organization, make the right decisions and reach our goals in an efficient way? If not, what needs to change?
2. Is our understanding of the customer (or whatever system we are trying to improve) correct or are we basing our decisions on the wrong assumptions? If so, what do we need to learn?
3. Do we have a clear picture of where we are going and what we want to achieve and how that is aligned with the goals of the organization? If not, how do we course correct or make our progress towards our goals clearer?
There you have it: the retrospective and the 3 dimensions of agile.
I would say that retrospectives are the biggest waste in agile in my experience.
For one thing, retrospectives often come at a time when everyone has been busting ass for a long time and they just want to go home. If you put it off till next week then it seems like another distraction.
Like the planning meetings, the timebox for a retrospective is often wrong. In some cases things went smoothly and there is a little to say. That is where you should be. In some places you budgeted 45 minutes but there really is a day worth of material.
On top of that in many (most?) firms there is no sense of psychological safety. Often the real message is that the process is 99% bull but you can't say that in a meeting which is claimed to be about continuous improvement but is really about how to rearrange the deck chairs on the titanic.
In his book "Good to Great", Jim Collins points out the use of the word "alignment" is a bad smell. In a healthy organization there is alignment, naturally, built into it. If you feel like you have to paint alignment onto it after the fact you are just causing more misalignment.
In some cases things went smoothly and there is a little to say.
Has been my experience (on good teams.) After a while, you tend to gel pretty well and don't need to spend that much time introspecting. The issues raised are either generally intractable organizational problems (that'll never get fixed), or fairly minor, and on several teams I noticed that retrospectives tended to feel pretty similar after a while (To the credit of the team, at that point we were like "we probably don't need retrospectives every sprint.")
> when everyone has been busting ass for a long time and they just want to go home
This sounds like a smell. You should not be busting ass and have everyone feel like they just want to go home at the end of the sprint. You should be working productively every day without burning out. Perhaps the team is forced to make too many commitments? Kind of sounds like it from your other comments.
Judging by my retros, I think other dev teams trying this will rapidly find that the answer to all 3 questions can be “no, but there’s nothing we can do about it!” Past a certain company size/amount of bureaucracy, simple agile seems nigh-on impossible.
Good points. I would rather have these answered in planning, rather than a retrospective. If these questions need to be asked after every week of work, that's a sign that the retrospectives are not helping much.
It's ironic to me that even this "Lite" version of Agile (Scrum really) clearly puts process over people and conversations. I think it's great to have a starting point of a known process and tools, but we should have much more focus on adjusting to the concrete problem, the people and larger organization.
It's ridiculous to me that this proposal is set to reduce burnout, yet we still seem to commit on what gets done and by whom by the end of a time period that has the asinine title "sprint". What we are doing inherently deals with new and unknown, we usually aren't building, cookie cutter, prefab homes. What we are doing is certainly not a sprint, it's not even a marathon. Nomenclature like that creates a culture of heroes and cowboy codes who will burn themselves out.
Hard rules like "can't change or add to the backlog" don't serve anybody. Nobody wins of the ship keeps moving in the wrong direction or stops. Let's just have a conversation! People should work together as a team and communication is paramount to a successful team. Let's not process our way around that and solve that problem!
>Often agile "teams" have a "normalization of deviance" situation where they have to do one thing (or say they are doing one thing) so they can say they are sticking to the process, but actually do something entirely different to get the job done.
You’ve succinctly defined the problem in a very profound way. A verbal punch to the gut for sure.
>The timeboxing of planning is also a very bad idea. I worked at a place where we had a timebox of 2 hours for planning but really after that we were nowhere near a realistic plan for the sprint and it would take another 2 or 3 days of knock-down, drag-out meetings that would leave us all exhausted to understand what we had to do. After that the work was mostly downhill, at least the way I saw it, but one of the other team members would consistently burn the midnight oil at the end.
If your backlog is properly groomed and you have sufficient time for planning and the team has the last word on how much it tries to take in, then it works beautifully.
If my team was to have that problem, it would come up during the retro, we would add a few more hours for the planning event, hold more or longer grooming sessions, refuse to plan work which we can not yet estimate because the requirements are not clear, etc.
And btw, your "implementation of Scrum" wasn't working properly; probably because you weren't living up to the Agile principles.
> I worked at a place where we had a timebox of 2 hours for planning but really after that we were nowhere near a realistic plan for the sprint and it would take another 2 or 3 days of knock-down, drag-out meetings that would leave us all exhausted to understand what we had to do.
Wow! Sounds like decision-making processes needed tweaking even aside from Agile practice.
One of my biggest pet peeves is the pointlessness of standups. I have never worked anywhere where they did not immediately become a status update, which is (in theory) what the board is for.
Why is the board not up to date? Because we just talked about all of that an hour ago and doing all of that over again is infuriating. What is the status of ticket x? Either wait until the next day’s status report/standup or start writing down notes you can reference. While you’re at it, just go ahead and put those notes in the comments on the board... oh wait.
I was once a project manager on a team that does daily standups. What eventually happened was that the team would usually re-iterate what I say, or vice versa. It made me question what was the point of doing standups.
My take on that is that any standup attended by project manager is not a Scrum standup anymore, it's a status update. What I've seen in few companies is that after such morning meeting with PM, the development team, would hold their own, smaller scale meeting, the real stand-up :)
One pathological case I've seen is the Scrum meeting that would run for an hour, because it was attended by 25 people, every day.
The point of standups is to help teams to learn to communicate and to steer the team to a habit of working on the most important things. Once that's a behavior, standups can be less frequent or dropped all together. This is especially useful for new teams or when the team changes.
No, the point of standups is to go around in a circle and make sure that everyone has everything they need to keep working (that there are no “blockers” in the parlance of agile). That’s why they’re called standups - you’re supposed to stand so that everyone gets annoyed if it takes more than a handful of minutes.
If you’re discussing what you did yesterday, what you’re going to do today, when you think x is going to be completed, what is blocking you (other than that so-and-so owes you such-and-such), or anything else other than nodding that you’re good you’re missing the point and that’s where the slippery slope of pointlessness begins.
But if something is blocking you, you should not wait for the standup to bring it up, what a strange way of working is that. Just ask someone who can help you. That's one thing that works well in my company.
Still people also want standups, basically to hear what others are doing and feel like a team.
And so we circle back around to the pointlessness of all meetings.
If it is as-needed to hash out an idea or determine the best way to fix something or to scope and point... that’s fine.
If it’s every day, twice a week, every MWF, etc. there is absolutely no way it’s actually necessary every one of those times and everyone is going to eventually defer to human nature and wait for the meeting to bring things up.
Part of that is natural and well intentioned - I’ve got the meeting in an hour, I won’t bother them yet, I’ll wait for it.
Part of that is natural and self-defeatist - if we already discussed everything then what will we discuss in the meeting?
The actual solution is to get rid of the meeting. The real solution is to just wait and discuss it all there. It’s like why I don’t call my mother the day before I go over to have dinner with her - we’re going to cover it all in the phone call and it’s going to be awkward silence while we eat.
And finally, if a standup is the best way you’ve found to make everyone feel like a team... there is no hope. That’s a really, really crappy way to make people feel included. Though that is what passes for team building at more places than not...
I find a good replacement for a traditional agile standup is a board based one. Rather than going through each person where it feels like you're being put on the spot individually, you go through each card on the board and ask what needs to happen for it to move to the next step. 90% of the time it's going to be one person putting their hand up and saying "I'm working on it" then you move on, and the other 10% of the time you might actually have a productive conversation in a meeting, which IMO never happens in a standard stand-up.
I'm surprised more companies haven't moved to this model. I don't really give a fuck what Jim is working on today, I just care whether his card that I have a dependency on is ready or not, or if we need to collaborate on it in some way. If the team is finding they don't know what's going on, or the board isn't being kept up to date, then this style stand-up will actually help with that, rather than just blowing 15 of my most productive minutes listening to everyone spin some bullshit story about how much work they crammed into 8 hours yesterday and why it didn't perfectly align with what they projected in standup the day before.
The thing is that we are ~11 people working on ~20 projects (the largest has about 2-5 people working on it at any moment, the smallest is worked on a couple of times per year, all the rest is in between). So without keeping each other informed there is a lot that goes unnoticed just because your work doesn't depend on it.
Going through all tickets would take a lot longer than having an update of all people so I don't think that will be popular, but I like to look at the tickets that aren't assigned to anybody yet at the end of most standups so that we don't lose sight of them.
The point of standup isn't to report status or get unblocked. Even in a large team or for x-team blockage, you can just talk to the PM.
The point is to keep social pressure on weak performers.
One of the main points of Agile (as implemented) is to push the team to perform. Otherwise natural habits of slack creep in. One or 2 people failing to deliver destroys all the good work of the strong performers. This is the real reason for standups.
No matter what you do, or what process you implement, if the organization does not _respect_ engineers, your life will categorically suck.
As others have noted, the amount of process involved with "Agile" these days is not in the spirit of the original Agile Manifesto. Additionally, how is it that _some_ organizations do it well, vs. others that make life hell?
This fundamentally comes down to how much the organization values and trusts its engineers. You only implement process if you cannot trust a person or group of people to do something on their own. You only track and measure performance by metrics if you do not trust them to work hard. This is easy to verify - how often is senior management beholden to process & measurement? Usually, the only "process" they need to go through is related to laws and regulations, which - again - is fundamentally based on how must we trust one another.
It's an atmosphere. An air of dismissiveness that is hard to pin down. It comes out in various ways. Dismissal of estimates. Removal of autonomy, micromanaging. Transparent attempts to buy productivity with token gestures like, pizza or beer, when management is at risk of looking bad. Not having retrospectives, if they are held, nothing is ever taken on board and there may be slight eye rolling going on. Fictitious deadlines, that arise roughly every 2 weeks, plucked out of thin air to try and stress everyone out to get them to work harder. Just a very faint whiff of contempt hanging in the air, the developers never really belonging in the company. Like we are interlopers, a necessary evil, like... like an air conditioning unit in a boutique hotel. You cant build it into the wall because it's not a purpose built building and theres no space, but you also cant not have it in the room. So it just kind of sits there clashing with the otherwise well thought through and lovingly created decor. Something to be tolerated but also to be avoided.
I mean developers dont help themselves, they tend to let their desire for purity and craftsmanship get in the way of getting the job done. They over state the case for various development practices and management can sense it. Somehow the two kinds of personality just tend to lose faith in each other and it all unravels, until there is no trust left and all but the thickest skinned developers roll off.
That's really sad. Almost every place I've worked has respected developers. The two that didn't were both very large corporations, and I quit both of them as soon as I could.
The idea that any process is the blame or can be a success in an environment with sociopathic management is absurd.
"Baseball sucks because my manager hits me frequently with baseball bats to make me work harder. Here is my blog against Baseball, I am pushing my org to switch to Soccer. I'm sure the lack of hitting weapons will stop my manager from abusing me."
Interesting idea. All I've experienced so far was "Agile Enterprise Edition" - cargo-culting all the agile terms, wasting developer time in overly-long standups, yet having a fixed, set-in-stone schedule and delivery plan. Hilarious.
Not quite. Agile, when done right, by small-to-medium teams, can be effective. However, whenever a big corporation tries to jump on the agile bandwagon, it turns into nightmare fuel.
I think the author has made the mistake of "what works best for me is what works best for everyone". It's easy to make. Likely, they had many bad teams that used "agile" as an excuse for poor management systems, leading to burnout. Then, they found a system that worked really well for them in their project and said "aha! everyone who isn't doing it this way must be experiencing what I experienced before I did this!".
Look, the point of Agile is that the team builds the process that works best for them within the parameters of the work that needs doing. If you're burning out because of your process not working, change the process.
For most teams I've been on, a month-long sprint is too much. Once my team switched from 2-weeks to 3-weeks, and in that situation it was pretty good. But on other teams, requirements and priorities shifted frequently, and sometimes 2 weeks felt too long. This same "well that might work" pattern applies to most of this document's recommendations, in my view.
But kudos to the author for finding a system that works for them in their current situation.
As others have noted, I think it's important to note the difference between Agile and Scrum. Agile is a mindset, Scrum is a framework that encapsulates a lot of Agile tenants. The ideas of a sprint or backlog or cards are purely Scrum. Agile says nothing about using these items to satisfy customers (the highest priority per the Agile Manifesto). That said, Agile principles intentionally include a note about promoting sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
TL;DR So long as you are constantly mindful of Agile tenants, there's already built in awareness around burnout and sustainable practices.
One change I'd suggest: drop the use of the term "sprint". Prefer "iteration" instead. Talking about "sprints" is a bad metaphor, and the metaphors we use do shape the way we think and act to some extent. IMHO, along with the "gap week" between iterations (which I vehemently agree with), this is part of avoiding the conditions that lead to burnout... if you're sprinting, sprinting, sprinting, all the time, bad things are going to happen. Not everything you do needs to be at balls-out, breakneck, full-sprint speed.
Seriously. Development phase or iteration is way better. It's also more of a flexible concept. It doesn't need to always be two weeks or whatever. We just decide what to do next and then do that.
That's a good idea. Consulting firms have really overcomplicated Agile a lot. I've been displeased to meet bloated implementations these last years.
My only point is that, at least in the companies I've worked for so far, a practical Agile implementation must provide some device for making a "pressure" over the team to avoid too many items ending up carried to next sprint.
Of course there are lots of legitimate situations where an item doesn't fit in the sprint and this should be acknowledged, providing inputs for the estimation of the next sprint and making those estimations more accurate. However, in my opinion, it should also be clear to everyone that those slippages have consequences and everybody should be employing their best efforts.
I don't consider this a deficiency in the article though, since Agile in itself seems to be optimistic about teams by its very nature.
I believe this is going to get me some downvotes, but this is unfortunately the reality I live in and if I were going to devise an Agile implementation for my team I would take this into account.
Sorry, there is no "faster" button. The only lever you have is cutting scope as you go. Fixed scope just makes no sense.
Otherwise you get one of three outcomes:
1. We underestimated how much we can get done. People now start gold playing stuff and wasting time that would be better spent on future backlog items.
2. You estimated just right and are done Friday at 5pm. Obviously this doesn't happen frequently.
3. You overestimate and now something's gotta give. People will start cutting corners or putting in over hours as a punishment for being bad at estimation. This is not sustainable.
We need to get away from the fixed scope mentality with which Scrum had poisened the Agile pool. If we cannot trust or developers to do the best work they can and wanting to be proud of their work, the organization has entirely different problems.
Experience shows that this is not the way things work.
Real-world team members present varying levels of maturity and, therefore, commitment levels to the aimed results.
Some will work at their natural pace and deliver the thing, provided the estimates were accurate; some will relax and leverage the fact that it's always OK to say that there was not enough time; some will work hard at the beginning and get contaminated over time; and so on.
It is sad to work without a 100% mutual trust, but we have to be realistic. Building trust takes time.
It seems like you could solve this problem in an even more dev-friendly way by sticking to one of the most fundamental principles in scrum (and possibly others): Don't schedule 100% of your developers' time, and definitely don't fill them up to 100% on coding work. Not even close. Devs are supposed to work at a sustainable pace.
A sustainable pace leaves plenty of time for kicking your feet up on the desk in order to think about things. It leaves plenty of time for chatting with one's teammates to make sure ideas are fully baked before implementing them. It leaves plenty of time for trying out new ideas.
And, importantly, it leaves the time for doing this relatively unstructured. Because the dev team is a bunch of working professionals who should be free (and trusted) to figure out for themselves when they need to take a pause from cranking through tickets in order to do other stuff. A "3 weeks on, 1 week off" approach doesn't get you this.
I think that the spot where the car always ends up upside down in a ditch on agile implementations is a misunderstanding of the basic idea behind velocity. It isn't a KPI that you're supposed to maximize. It's a feedback mechanism that the product owner uses to manage the pacing of some of their own work, in order to make sure that the pipeline neither empties out nor becomes jammed full of work.
If the PO is doing that job correctly, then they would be making tough decisions about what is and is not reasonably doable in a given timeframe, and providing backpressure to stakeholders when they're asking for too much. If they're instead accepting every single feature request, and dealing with the resulting backlog logjam by continually pressuring the dev team to work faster and faster (and more and more sloppily), then, no sense in mincing words about it, they're doing a bad job as a product manager. And the dev team is well within their rights to push back against them on that.
Which, incidentally, is what the orthodox Scrum formulation is trying to do when it disallows the PO from deciding how many items (or story points, or whatever) to pull into the sprint. That's supposed to be based solely on the dev team's own opinion of what's a reasonable amount of work to take on.
>It seems like you could solve this problem in an even more dev-friendly way by sticking to one of the most fundamental principles in scrum (and possibly others): Don't schedule 100% of your developers' time, and definitely don't fill them up to 100% on coding work. Not even close. Devs are supposed to work at a sustainable pace.
This sounds great until you work someplace where you need to allocate 7.5 hours every day to a billable project.
If you don't allocate 7.5 hours you are asked what you were doing the rest of the day...
I've seen where someone won't have a conversation at work because they can't allocate a project to 10 mins chatting with work colleagues.
Or when you get asked a coding question from a junior and so you help them, but then need to get their project code they were working on so you can allocate that 10 minute chatting /giving advice to that project.
Or helping a junior with something they are stuck on, management sees and questions why two devs are sitting at one machine...
I prefer a structure of: variable length sprints + optional 1 week interlude.
I don't understand why the "sprint length" is this set-in-stone thing. "We do 3 week sprints, we never deviate". That's not very agile. Sometimes you've got very well-defined requirements on a large project and you could go heads-down for 3 weeks on something. Other times, you've got a good "phase 1" that would take 1 week to implement; so let's implement that, then plan the next sprint. Or you might want to take a sprint to just write more tests, upgrade dependencies, etc. Plan it, take a week, then lets resync.
The interlude week is used to decompress and give engineers time to plan their own schedules. They can work on whatever they want; they create the plan, create the tickets, and execute. Ideally it should have some thread of connectivity with the team's overall mission, even if only slightly. Leadership uses this time to plan the next sprint. There's a natural "bulk up" on meetings during this week that were avoided over the sprint itself.
Specifically: the planning and retros happen during this week. Most teams I've worked on put the Retro on the final day of the sprint. At one place it was at like 11am. This is crazy! Combine that with a typical Friday drop in productivity and you've just written off the entire last day! During a 2 week sprint, that's a full TEN PERCENT of the sprint. Instead, schedule the retro on Monday morning during the interlude, and full team planning on Friday before the sprint.
Often those interlude weeks end with work that's best classified as either "hackathon-style" (this is cool, not sure if we can use it right now but lets bank the code and revisit) or "infrastructure" (we've wanted this done for a long time, but it never got priority, we've finally done it, awesome). Burntout engineers will naturally schedule themselves less to do or easier things, like dependency upgrades; this is a great signal to management that something is up and we should talk about it.
The two week sprint is for management. So that all the stakeholders only have to travel to "the pit" once every other week for a sprint review. It is vital that every team finishes the sprint at the exact same time. If teams are out of sync the stakeholders have to visit once a week or more.
Given how important all these managers are to the organization, they need to be unloaded with trivial tasks such as playing with their phone during a sprint "review" (which is actually a demo).
I would not suggest a full week off, a lot of people would not have anything to do in 1 week every 2 other weeks.
Instead give everyone an extra day off, a 3 day long weekend. It's easier to have a recurring appointment that way, like exercise or take a theater class or whatever.
I've been working 4 days a week for the past 3 years and I'm not going back to 40h/week.
while it does make people agile, i.e. stir things up with daily stand-ups etc, it also causes more chaos on the technical side.
anyone can pick up any stories, after a while there is nobody that is an expert in any domain, everyone knows a little about everything but nobody knows any subject deeper, no more domain expert. Now bugs took forever to debug, the whole group is constantly in panic mode and burnt out.
to make things worse, document is neglected due to agile's own philosophy and due to the daily chaos, and it makes development much much slower.
In short, agile gets everyone going and looking busy, but the product can never deliver because nobody knows enough to fix hard issues. Many of them are senior developers, the old model seems working better, a bit slower and quieter but products are out of the door with good quality.
Agile is bad from my experience so far, our product is embedded system that can't really be sprinted like those fancy front-end UI projects and such. Agile does not fit us well.
Agile isn't standups, nor user stories, nor sprints. They have been attached to it, but you can be agile without any of those things.
My understanding of the "Working software over comprehensive documentation" is based on all the stupid documents that no-one ever read. You should still document the software for your colleagues, not for imaginary ISO9001 auditors.
There are so many charlatans in this area, it is frightening.
How do you deal with a sudden bug in released version then? Or even bugs in the curent dev branch? All developers time is allocated to new features, there are no openings – so all the bugs are moved to the next spring automatically and we release with criticals?
Edit: everyeone's answering with very good advice on how to handle it, but my intention was not to ask for advice for any situation I encountered personally, but rather as a criticism of published document. It's written as if it covered all the bases, but it doesn't cover bugs.
I've seen this handled a few different ways. What you do is going to depend on the size of your team and your current business context. Like the rest of engineering, there are few hard and fast rules, you have to weigh the trade-offs.
One approach is to prioritize all bugs before all features. This is the Joel Spolsky approach. In a typical sprint-based environment, this basically means that available work effort is allocated to bugs, and only remaining work effort is allocated to new features. The Google SRE model (as I understand it) tries to moderate this by basically saying the team has some flexibility in work allocation between bugs/features unless certain SLOs are missed. When that happens, you go full Spolsky.
But that doesn't really address the "what if a critical bug comes up mid-sprint". To address that, you basically adopt an on-call support model. Each sprint, one (or more, or a half, etc.) are assigned to be the support person. They triage any issues or bugs and address them as best as possible. It really helps if there is a rotation, just like your operations on-call rotation. In fact, it's best if you view this as the "escalation level" from your operational on-call rotation. You can provide a similar resource for marketing or other kinds of events as necessary. The benefit is that you have an up-front acknowledgement of the level of investment needed for responsiveness, as well as being able to provide folks with periods of interruption vs. periods of deep work, and share that burden.
Lastly, I think it's really important to separate "release" from "sprint completion", especially in a SaaS environment. If you build your CI/CD and release processes around releasing at the end of the sprint, you end up building a very inflexible infrastructure. It's much better if you can release often, as work is completed. So, if you have a small feature ticket and you tackle it early in the sprint, ship it right away. If a bug comes up, release the fix as soon as it's available. I've been on too many teams where you have an inflexible release process tied to the sprint. When something comes up, it interrupts the whole flow to get something done. So, "end of sprint" != "big release".
Yes, small releases are a huge part of making this work. "We can't do short iterations because iterations are so much work!" is the core of resistance. Something's going to go wrong, and we have this heavy bloated religious "deployment" ceremony with ten people on a call for six hours and how on Earth could we do that once a week? Yeah. We can't do short iterations because of all the crap we do because we do long iterations.
I'm always paraphrasing Kent Beck... if you can't write your requirements on a card, you need to use a smaller card.
If we can all agree that "shipping" is a feature[1] and that "shipping faster" is a competitive advantage, then "shipping fast" is probably one of the first features we should invest in as a team, from leadership to private chef.
If it takes 10 people and six hours to accomplish the release of even the smallest of features, then it sounds like there's a bug with your "ship fast" feature and the team should invest some or all of its resources in fixing that. You probably can't do it over night, but you gotta chip away at it over time at the very least.
If you are looking for justification backed up by real world numbers, I highly recommend the book "Accelerate" by Nicole Forsgren, et.al.[2]
Yeah, I know. And I've read the book. But I work in enterprise devops. This is the reality of many, many teams. Which means there's a lot of unnecessary process that needs to get tossed and a lot of automation that needs to be built in order to do short iterations and get out of the 3-6 month window.
Have you considered giving it as a gift to your peers and leadership? I really think it's a great read and resource for anyone trying to sell organizational change.
I wonder if any of those "automation needs" could be turned into startup ideas?
I actually tried a startup in the monitoring space, but sadly failed (it was great fun losing $100k or so, tho... well worth the experience!). But the automation needs problem is more a consultancy thing than a product thing. There are lots of products. Teams buy them, with the best of intentions. Lots of management wants to believe they can buy their way out of the hard problems of not having any discipline. Sigh.
Here's how to handle the situation you are in right now:
1. Work with the team to identify what item in the current sprint will be delayed.
2. The EM and Scrum Master should communicate the delayed issue to their leadership.
3. Identify any long-term objective that will be delayed and communicate that as well.
If there's a question about why a delay will occur be honest: either the critical issue affecting customers gets fixed now, or the new thing customers don't yet have gets attention.
Going forward, allocate 1 day per person in each sprint as capacity to address bugs. Do this explicitly if you have mature leadership who understand how development works, or implicitly by padding other estimates if you haven't. Addressing bugs should be an implied task every sprint. When there are no important and urgent bugs, that capacity should be used to address tech debt instead.
This is good advice, but I'm already doing something along these lines and my point is that this is not covered by the OP at all. My question was not intended as asking for advice for my personal situation - it was a criticism of published document.
Apply the five whys. Why do you have a critical bug in the production release? Is is environment-specific? Did the released code not match requirements? Or were the requirements themselves wrong?
It's not "What do you do about critical bugs?", it's "How do you stop having critical bugs so they don't disrupt your development process?" If criticals in production are a regular part of your life, then you're doing something wrong as an organization.
But to answer the question itself... if you have a critical bug that requires enough development resources to prevent completing the iteration successfully, then the iteration is ruined. End it right there and start over with a fresh planning session. Yes, everyone will howl. Pain is your body telling you something is wrong.
> If criticals in production are a regular part of your life, then you're doing something wrong as an organization.
I believe that may be slightly idealistic - a test case doesn't get covered by the stakeholders and suddenly once the solution is in, it suddenly pops up its ugly head. It takes a ton of self-awareness and resources for a project to know its every use before it gets to the end user.
Company culture is what causes burnout. Process is mostly a reflection of a company's culture. You can't fix burnout by changing process because the process will inevitably warp to fit the culture of those who use / define it.
Changing culture is really, really, really, really hard. Unless the company is tiny, I recommend looking for a better fit instead.
What we do where i'm at is the perfect amount of "agile" for me. Granted we're a small team, but it's worked VERY well for 3 years now.
What we do:
- Standup twice a week, never lasts more than 15 min
- 1 hour "planning" meeting each sprint where we discuss new stories for the upcoming sprint and assign them points
- 2 x 2-week sprints (1 release a month containing work from both sprints), this gives us flexibility for unexpected problems if we have to cut stuff out of the release or add features missed during planning
- We do not track hours
- We track velocity by points, but it's only a guide for the next sprint and not taken as do or die
- Developers freely choose what they want to work on, but they must go down by priority on the sprint's items
- When a dev is finished with their story, they pickup the next item in the sprint
- If all sprint items are taken/done, we grab from the next sprint assignments. If those are all done, we have another planning meeting or work on tech debt in the backlog
Pah, I've not seen Agile cause burnout at all. Far from it, the way sprints become long slow walks and stories move from one sprint to the next, at the altar of 'Agile' and not 'Delivery', developers appear to be under way less pressure than in older forms of project management. With, you know, deadlines...
Well, sort of by definition, if you're doing "agile" and it's causing burnout, you're not "doing it right", but that seems to be the crux of the problem - every place I've ever worked that has tried to adopt a mindset of actual agility has almost immediately fallen back into the authoritarian command-and-control centralized decision management style that dictators prefer: "tell me everything that you're going to do and exactly how long it's going to take and then I'll argue with you that it shouldn't take that long and blame you when it takes longer".
Everyone has their own vision of what agile and/or scrum should be. Every company, manager and developer has their own special and unique recipe. There are as many flavours and variants as there are rules for playing a game of pool across the world.
Personally my main takeaway from the whole agile world is "people over process".
Sort out your communication, trust, and how you work together first. Then start looking at whether you want to work with agile, XP, scrum, kanban or some other recipe.
I think people respond well to natural rhythms with contrasting phases (a time to sow; a time to reap...) so I find the general concept quite appealing. One thing that always bothered me a bit about scrum was that it's basically an endless series of sprints. Just saying it like that sort of illustrates the problem that you can't sprint indefinitely.
Additionally, I've found that for maximum creativity/productivity, I need periods of down time. Work on a problem, then put it down, and often the solution will pop up while you're in the shower or taking a walk. So I think explicitly building some sort of breaks ("take a couple of days to learn/rest or work on whatever you want") is a good idea. I'd advocate doing this informally when needed or when schedule permits, rather than formally scheduling 3 on, 1 off.
My mind doesn't take 12 weeks off a year on a schedule dictated by management, and it certainly doesn't take the remaining 40 weeks on on a schedule dictated by management. I'll work a lot better doing 6 hours of work a day every week than 8 hours of work with no slack for three weeks straight.
I don't think this is a viable solution to Agile. I think the spirit is fine in that its painfully obvious that Agile has become little more then a buzzword sold by consultants, and almost all implementations of it look a lot like mini-waterfall then anything truly agile, but this misses the biggest faults in current agile implementations
1. It still puts process over people, you can never have an agile workflow that has ordained gatekeepers, in this case the separation of "project leads and stakeholders" from "developers" is going to lead to the same class of sprint problems you have in any implementation today. The people you need are the one's doing the work ( every single one of them, from the most junior to the most senior ) to sit down with the people
2. The lack of agility in scoping work in sprint means this is just a three week waterfall rather then a two week waterfall. You can't call any process agile that doesn't allow you to change direction at any point in time, hence the word agile. In traditional agile this is supposed to be a terminated sprint, but for reasons this is almost never done.
3. The baked in rest week will just make people unhappy. Teams are at their best when they are working together and making progress, that rest week will foment dissent within the team, especially since the "stakeholders" still have tasking to be done that week.
I work mostly with startups and I don't know any that could survive with a plan like this:
> 3 weeks on/1 week off development cycle
Unless you're lucky enough to have no competitors and a ton of runway and no major support issues ever, there's no way you can give your engineering team 12 weeks of vacation a year all at the same time.
> Once a sprint has begun, Issues may not be added to the sprint, but they can be removed. This reduces context switching and that is a good thing.
Yes, minimizing context switching is a great thing, but for 4-8 weeks you can't adapt to changing business conditions? A change that comes in on day 2 will have to wait 8 weeks to go live as it won't be put into a sprint for 4 more weeks and then launched another 4 after that.
I'm a developer and totally understand the desire to have every requirement up front and peace and quiet to implement it. The goal should be to get as close to that as possible but still being open to business needs.
Unfortunately I've seen first a dev team sink a multi-million dollar business through a lack of flexibility and turnaround time.
I don't think you'll find many managers rushing to implement this, which is basically inflexible agile with a week of vacation every month. I think the experience of managing a dev team while trying to balance a budget would be invaluable for anyone thinking that this process makes sense.
We do something very similar to this where I work. Week 1 is not a vacation for us. Each developer has work assigned for the cycle but it might be high level or vague. We spend the first week designing the feature and nailing down requirements. We also do allow very important stuff to get added to the cycle. We have very brief standups at the begging of each week, but we also communicate throughout the cycle over slack.
It works very well for us as a small team of five developers.
Purely my opinion, so feel free to agree/disagree.
Most of the time, agile fails due to an unwillingness to be flexible. It's either stakeholders or managers with rigid deadlines/demands, or teams that are incapable of adapting their processes to increase productivity.
If you ever want to test your agile setup, ask yourself this: what happens when you finish a sprint and you have time remaining on a task? For me, this is the ultimate test of agility in an organisation, and it's usually where you see the first problem(s).
A lot of people in tech like to complain that consulting firms have ruined agile, but I blame you/us. We've ruined agile because we refuse to be agile, and we ultimately accept a process where we rush into development without adequate planning, or the ability to change course during production.
In all fairness, it's not just developers faults. It's also the fault of managers that implement this "agile" thing we've sold as a rigid process that needs to fit a set of concrete parameters.
Seems like author did not really meant that to be specific advice or exact manual. It seems more like talking piece and maybe some distant idea we could strive for.
I was also at first thinking "what kind of company has those kind of resources, and what kind of ideal world is that where you can plan 3 weeks of work in 1 week without adding stuff to sprint".
I've never gotten burned out from working too hard. I get burned out by having no say or control over what we are working on or how it's done, and by getting stuck working on low-value tasks for prolonged periods of time. Those projects are the ones that make me not excited at all to come to work.
It's usually because the client / product owner has no idea what they're doing but still insists on making all of the decisions with no input from users / developers / designers. And it sure sounds ridiculous, but it is the norm. Developers are viewed as people who do not want to participate in meetings or planning, and who exist on streams of work to do. If the developers run out of work, they'll go crazy! As long as we "keep them unblocked" and have tasks ready for them, we're doing our jobs and they'll be happy!
> I've never gotten burned out from working too hard.
Me neither. I burn out when I'm working on something that I don't love working on (and things like feeling powerless or bad management can make it something I don't love working on). Not coincidentally, I also don't work as hard on those things despite all good intentions.
This is why the #1 requirement I have when I'm considering a job is that it is something that I will enjoy. That's more important than compensation or location.
I believe this happened because enterprises and dusty orgs wanted all the benefits of Agile without touching any of the real problems that make their orgs suck. Like communication issues and unrealistic expectations. This lead to first Scrum and now Safe.
Stakeholder: "So, just so I understand, your team went surfing for a week, and the reason we didn't finish everything in scope for the sprint is what again?"
I think agile has always suggested modifying to fit the team - so then do we need an agile light, or just critical thinkers doing whatever agile provides actual value?
And the industry pretty much modified agile in a way that gets the most work out of people, regardless of fit. So yeah, sometimes we do need something that's written as a "manifesto" to remind people what agile actually was supposed to be.
But when your adaption consists of using your existing methodology with some agile concepts, but no retrospect on the methodology itself, you're not agile by definition.
What this "Agile Lite" puts right in the center is to split up your goals such that you can make meaningful work in a 3 week window, and track it asynchronously. Managers are free to have an overall plan for release in 12 months, as long as it's split up into units of work at most 1 day long.
What I think I read from your comment is that if you couldn't get this to work in the "Old" agile, you will fail with this as well, and I agree.
Personally I think that asking how teams do agile differently and how team members change agile practices can be a good gut check to see what agile is like at a company. If some teams do scrum and some do kanban or some teams have daily standups and others don't, then agile is probably more developer driven. But if the answer is something small, like the time of the daily scrum then agile's probably management driven.
This kind of reminds of a weight training regimen.
3 weeks of clearly defined goals and progressive load, followed by a "deload" week where you're not sitting around doing nothing, but you're lifting lighter weights to let your body recover.
Makes sense to me, because whether you're lifting weights or working on software, stress is stress and probably follows the same patterns of progressive overload and recovery.
My worry with a mandatory one-week vacation every month is that people won't take the vacation - they'll use the time to make progress on features or other work-related projects. Burnout isn't solved by a simple "You must spend this time away from your keyboard and this time at your keyboard," and some of the most difficult burnout for me to work through has been when a problem has seized hold of my mind and I've felt compelled to keep working on evenings even when I clearly wasn't making progress.
If you end up in a situation where the document on paper says everyone's taking time off to surf and paint and the actual practice is that some contributors are doing work during this time—and, almost certainly, not getting punished and in fact getting promoted for doing so (perhaps because they commit locally and rebase so nobody knows they were working during this time)—you're going to end up with way more frustration, burnout, and uncontrolled work schedules than you ever started with.
>> It is an intentionally light week and many people may simply take the time off to paint or surf or whatever.
And the next week will be spend on meetings where management is trying to explain to the returned (hopefully) surfers what was decided to implement on the previous week meetings?
And it will turn out something was missed out and needs re-planning?
Another week, another iteration of planning and surfing?
This seems like it repeats the same problem I generally have with most methodologies: it treats planning as being separate from development.
Plans go into (Jesus make the hurting stop) Jira while development goes into Git.
And, okay, all of this requires new tooling, that figures out what your "issues" are based on the state of your source repos.
But... Suppose you were doing (Something Like) TDD and your "planning" was to write a bunch of tests that broke.
Or you're even not doing TDD but you can detect stubbed out code and draw issues from that, possibly by reading related documentation.
And your working set of issues, then, are all the tests / stubs detected in active branches.
(And this needs some logic to clean up the duplicates, and needs to be smart enough to notify people when things finish. And you want smart tests like TestNG that can identify dependencies.)
And it needs to serve aspects outside development; let's say functions that touch the UX must be certified by a designer / tester. That person should be able to digitally sign code (maybe even just a handle and date is enough) and then those changes are known good.
The reason I bring this up is because of a big deficiency in the issue trackers: identifying a new issue is cognitively/technically/procedurally expensive.
One of the big things language designers try to do is make elements lightweight. Python added inline assignment because they saw people would repeat code just to avoid creating a new variable name.
And when we're doing issues, planning out a new issue means setting up a meeting or opening a ticket in Jira and filling out a ton of paperwork, etc.
It seems like it ought to be as light-weight as defining a new test, or writing out a stub function.
Is anybody else a little creeped out by this recent insistence that we refer to everything being done as an "issue"? I never agreed to this. I don't know where it came from, but it's really weird.
Issue implies something is already wrong with what is being built.
How can we be wrong when we haven't even started yet? It's utter madness
There are three parts involved in any project. The product, the process and the people. As it currently stands scrum does not make any provision to address the people. Hence management uses this void to turn scrum into scrum butt and turn the devs into jira ticket processing machines which are pushed until they break.
Until the big names in the industry accept that error and address that, I guess there will be no hope for most people doing dev work.
Most companies on themselves don't have any incentive to address this fact because the commoditization of programmers benefits them and because they aren't in a position to understand the long term consequences of this (or don't care)
My experience of agile has been that it’s a justification for management to put a lot of pressure on their team while micromanaging them at the same time and always making everyone feel like they are failing. If you can get everyone to announce what they got done every day then one developer is thinking, I did ok, and the rest are panicking and thinking, I’m going to get fired if I can’t keep up with that person! Meanwhile there’s nothing in agile about team members having actual agency in determining their own priorities or making decisions. It’s just classic top down pressure cooker micromanagement. In my experience.
Telling your developers to bugger off for 1 week every month will never work out. They still need to be at the office, but they can pursue learning, help with planning (this is critical), or focus on other development tasks they actually want to make.
Does anyone had worked on a company where you can stay for 3 weeks without stakeholders appearing with "urgent" things to add on the sprint with an excuse that this is necessary to don't lose that unmissable deal?
Any methodology where it takes more than a month to turn around a bugfix for a discovered issue in the first week of the month seems flawed. Unless I'm missing something, that's the case here.
The author did mention that some urgent issues don't fit inside the sprint window and should be tackled immediately. I can only assume he meant hotfixes for bugs and things of that nature.
An understanding of every comment here shows agile (or any other methodology) in all its "glory"......
People just can't agree on anything is the simple answer. It's how we get round that to get anything done as a group (given the many personality types and their experiences) that matters.
Usually, for something successful to occur (scope, time, budget are met), it comes down to a knowledgeable leader who understands people. And there's not many of them around.
This doesn't seem very agile. Without developer input into the sprint planning meeting this is going to lead to 3 hard weeks where overtime is highly likely because the team didn't have any say on what work was done and 1 week off to recover.
Whilst this may help with burnout so do the main implementations of agile when done correctly.
Agile done properly is all about quickly getting feedback on the speed of work so the business can correctly plan in accordance to this.
I noticed that as well. That'll be pushed back against, and the leadership is going to decided that they must respond to SOME issues to appear responsive, and let's be honest, it's going to have to happen regardless of project ideology. There'll be some silly rule put in place that only priority "X" issues get looked at mid sprint, and suddenly every issue is going to be priority "X", and now someone gets to spend the time they would have spent fixing the issue going "Ok, is this really a priority 'X' issue?" and fighting with whoever raised it.
Decent iterations cannot be done without immediate management playing defense, period. As long as anyone is allowed to interrupt the iteration, then iterations are just going through the motions and won't solve any actual problems - because the problem is a lack of control.
The engineer's response to unplanned work should be "Go talk to my manager", and the manager's response must be "Wait til next iteration". If the team can't defend its own boundaries, it's hosed, period.
The problem I've seen with this approach is when issues cross org boundaries and have externalities.
Say the event subsystem is shared or is under control of another group. They do maintenance, and the app doesn't restart and stays down because it had bad retry logic and won't retry after the connection is closed. Stupid bug, easy fix.
You're now hobbling that other group from doing their work, and depending on the discipline of the app team to fix it, and that bug may stay in the backlog a long time. Meanwhile, it's going to come up in a handful of meetings with a handful of people as it gets estimated, prioritized, assigned, touched again and again...
Coming to someone after diagnosing and helping them recover from a problem, only to be told "we're busy, come back three weeks from now" sucks.
I've never know immediate management to understand the business nor the system as well as the ones with boots on the ground. I've yet to see a situation where the manager doesn't end up coming out of his office and asking someone on the team "so, what's this mean?"
It's not management's job to understand details of the code (and it's probably a problem if they do). And it's not their problem to understand the business perfectly (and it's probably a problem if they do). It's their job to facilitate getting work done. That means helping their developers work as effectively as possible. And in most cases, that means keeping customers from end-running around whatever work management process is in place. If you're doing agile, the manager's job is to protect the iteration, and shield the developers from politics and pressure so they can work well.
I often use a bread-baking analogy here. Making software is like baking bread. This iteration, we get some flour, water, yeast, and salt, mix them together, knead, rise, and bake. And if someone comes in five minutes before baking is done and says "Can't you just add some raisins now? It's just a handful of raisins, it's not much work". No. It means starting over.
This is another time to ask uncomfortable questions. Why are issues coming up in the middle of the iteration that "take higher priority"? Why can't they wait?
Is it a production bug? If it is, can it wait? Just because it's a production bug doesn't mean it must be addressed outside the normal iteration cycle. Criticality should matter.
If it's not a production bug...
Is it a missed critical requirement? WHY??? How did the entire team miss something that must be done right now? That's a major process failure.
If it's not a missed critical requirement...
Is it someone with great power just disrupting your iterations for their pet project? Do you have multiple customers who are competing for your team as a resource, and not hashing priorities out together in iteration planning?
Following from that...
Are they directly in your chain of command? Is it your superior changing horses in midstream, or your customer? Because you can tell customers no. Even if they scream and shout and say they're gonna tell Mom. The customer is not always right. Learn to say no.
And if you still feel like you have no authority and no control over your work...
I don't even think it's a good rule because if something critical/high priority comes up it could be because of planning or it could be because of multiple external forces and or a bug.
Maybe it's a good general workflow but as a hard rule it seems rather silly... but I would love to work somewhere where there wasn't a flipflop on priorities every week or so :)
Many projects have often predictable periods of intense testing and bugfixing without new feature development.
On the other hand, distinguishing between "the product doesn't do X properly" and "the product doesn't do X yet" isn't necessarily important or meaningful.
I have never worked in a field more obsessed with talking about how it does its work. Today we're standing on one leg. Tomorrow we're programming in downward dog stance. Next week, we're gonna try the Red Bull diet and see how that goes.
This really doesn't have to be that hard. You talk to people. You figure out what's important. Then you do that stuff. Then you talk to more people again.
I have always said that Agile methodology, as it is used by most companies, is just a way to squeeze every drop of efficiency from an engineer and ensure that people aren't goofing off. Agile works assuming that you are able to drop features or push deadlines if needed but in my experience in startups and enterprise tech companies, this NEVER happens.
Great guide that does what it says: assure defense to protect developer in weak positions, which as we know is a normal part of experience.
However, maybe it would be nice to add a guide for shadow operations that hackers may want to undertake to ensure project long term success, for when they have a strong position ("aggressive agile" if you want).
Agile burnout means that there are to many items in the sprint, and that your estimation points / priority is not right. Nobody needs to burn out when you do a good estimation planning that fits into a 40 Hour workweek. Every hour above that is less productive and will work towards a burnout.
The TL;DR of this is "work less (hours), avoid burnout."
But this prescription needs a few more paragraphs of caveats that describe the company, team, product and other factors that affect whether this strategy is viable. The simple answer is "do what works for your situation" but that's light on useful information. If you can make Agile or Agile Light or Waterfall work for your team, go ahead. If your team cannot wait 7 weeks for a production issue to be fixed because "we don't add issues to sprints" then you might not be able to work with this system.
When I saw 3 weeks on/1 week off, I was actually thinking of a sort of reverse - 3 weeks of active development with a final week of catching up on QA and bug fixes discovered in the sprint, as well as retrospectives, grooming and sprint planning (though, presumably, a dedicated product owner would get most of that work done concurrently with ongoing development.) You don't end up with an actual week off work but it is a lighter week.
The main issues I've seen with Agile were not burnout related, but simply having an incorrect or weakened team structure. Not enough testers, insufficient engagement of a product owner, overloaded manager/scrum master/architect. It kind of goes without saying that if you try to follow Agile but you omit key team members, the existing team members are then more likely to be overloaded to pick up the slack, quality will go down, and the smoothness of the sprint cycle will decrease.
My friend, software engineer at a VFX company, said his sprint meetings were only for planning ahead and no crunches to snap deadlines to sprint "ends". Thats silly, stuff always exceeds sprint ends.
My team insists on sprint deadlines, but no sprint meetings . That's cargo culting.
Pretty much what we do except our sprints are two weeks with two of those days devoted to planning. If it's a bigger project then planning may be a sprint task of is own.
We release on Tuesdays so every other Friday and Monday end up being pretty light assuming the Thursday QA went well.
I've been through the wringer it sounds like this team is going through more than once.
You have to teach your stakeholders and managers how to be agile, if they aren't willing to actually get that, it always turns into a death march eventually.
And agility requires slack (unscheduled capacity) which means less than optimal "resource" efficiency. Stakeholders and managers need to understand that if they what to be able to handle changing plans and requirements then their time can't be fully booked. Problem is then many expect the developers to just work more hours leading to burnout and turnover. I really think developers should push for hourly exempt status (the only class of workers in the US that are allowed hourly exempt status) instead of salary exempt status. With hourly exempt, while you won't be paid time and a half, at least you'll be paid straight time for anything over 40 hours a week.
A missing piece is how to handle things like major production issues occassionally popping up and decimating a planned sprint. The idea that “nothing can be added to a sprint” doesn’t work if things break badly enough.
What industry do you work in that you can let product decide everything with out any engineering input, and also allows you to go 3 weeks without reacting to buisness/shifting priority?
mate, i don't get 12 weeks of vacation each year. only five. this method basically requires to be pinned down in labor contracts. this also basically transforms a 40 hour week into a 36 hour week.
but i suspect this schedule is still going to be difficult for people in relationships. it would be nice for me though.
the premise is right though: scrum is bad. as a developer always argue against estimations and so on. after much bickering we succeeded in getting rid of them here.
Went to github, saw the word “sprint”, closed window. I really appreciate any effort to return us to basics. However, we should have a firm grasp on what the basics are first. Today, you wouldn’t batch all of your team’s code together this week and then do a build - you would build and integrate continually. Why would you adopt large batch, non-continuous process for your overall development process?
I'm a big believer in the 6 hour work day now. A single 6 hour push is better in a lot of ways than the traditional 3-4 hour push with the post lunch 3-4 hour meander.
> most communication happens through the issue tracking system (which is faster to work with than e-mail)
Written by someone who hasn't communicated this way (especially remotely). This is really just a way to mark your ticket as blocked, and fuck off for the rest of the day because the person who needs to respond won't get to it until they're out of "flow" or whatever (isn't maker time great?).
> Once a sprint has begun, Issues may not be added to the sprint
So the company is just supposed to eat the extra time in a sprint if there happens to be that extra time? No fucking way will a company opt into that, especially combined with the monthly beach week time (AND any reasonable absences during the sprint itself).
This is a pipe dream. Sorry, but asking a company to treat you like this is asking a company to basically pay you for doing nothing. Ridiculous.
That will not lead to the absence of a death march - it is a recipe for a death march. Not only will you not have an accurate assessment of the tasks but they will not be ordered correctly, and likely way overscoped for the timeframe, and you get no chance to say no. Technical minds / engineers in the room early and often is critical to success - otherwise you’re just told what to do instead of architecting it the “right” way.
Communicate when you need to but try it all for a sprint or two (really, Standup is a hardship? You may not be doing it quite right), then drop after the team finds a rhythm.
Edit; after reading the author’s other works the burnout seems to be centered on a big push from stakeholders to accelerate and keep going so a sprint is seen as a reset - kinda like a new day dawning in a news room. You can plan-in your work to avoid this and still continue to make progress but it does take some discussions with leadership, or at least a clear justification about why this week is exploratory instead of hands-on. Done it many times. I would not suggest changing the whole method just to accomplish this, however - a process fix for a problem like this won’t necessarily help.