Hard deadlines are not user-first
jatins.gitlab.io
jatins.gitlab.io
Timed sprints exist not for the benefits of managers, but for the benefit of developers. They exist so that the development team has a shield against managers making last-minute decisions and changing priorities without notice.
If the focus and discussion is regularly on short term deadlines, then the developers are not driving the process, the managers are. It means that sprints are seen as a management methodology and not a development methodology. And then everyone has a hard time.
Managers who think this way know they’re not “allowed” to make mid-sprint changes so instead they focus on the end/deadline.
The managers should be spending their energy supporting the team and figuring out what the priorities are for the next sprint(s). If they’re spending their mental energy on deadlines then they’re doing everyone involved a disservice.
What works for one team, might not for another. It's a good idea to have semi-stable teams as there is significant overhead creating temporary teams and disbanding them.
When there's no true need of urgency or the deadlines are outright fake, kanban and maturity may make a good alternative to scrum/sprints. It may even allow for some flexibility how to allocate people and borrow temporarily from other teams. You don't want teams to silo down, which they do the minute they are formed to start healing the wounds. Teams will need clear responsibility boundaries to be able to make effective decisions, while also granted the slack, incentives and psychological safe learning environment that fuel the necessary and logically next steps.
And since we're talking about Scrum, PO and Developers (traditionally) supposed to sit together with stakeholders for Review meetings, gather feedback from them and provide input on the next tasks.
Keeping the deadline of the sprints is supposed to force management and devs to agree on reasonable scopes, such that the output of the dev team becomes predictable with time.
This enables devs to get trusted by management, breaking the poisonous relationship.
Sprints also have the pleasant effect of forcing some coherence onto work.
In the Old Days, teams might build software like a layer-cake: All the lowest layer, then the next layer, then the next, and so on to the top. So at the beginning, we’d be building infrastructure based on projections (a fancy word for “wild-ass guesses”) of what the subsequent layers would need.
You can, in theory, do that in sprints, but with an emphasis on delivering “working software,” sprints would help devs and stakeholders pick very small end-to-end increments and build whatever was needed to make them work.
This kept everyone focus on work that was known to be needed, and since you were building a complete increment, the team would be building the infrastructure at the same time it was designing and building the functionality relying on the infrastructure.
This kind of thing has its own failure modes, of course, but it eliminated a number of catastrophic project failure modes without even getting into the value of delivering working software sooner and revising priorities based on feedback.
I am curious about that “trust” part. In your model what happens when management doesn’t trust devs ? do devs trust management ?
Getting development done has traditionally been a game of getting developer attention. Scrum is one way of clarifying the contract between the stakeholder and the development team. I'm sure there are others too.
Though in my experience, devs do not trust “management” writ large. But they will trust individual managers who see their job as representing their teams within the management hierarchy and protecting them from the suits. That trust isn’t automatic and usually has to be earned.
IMO, you should only really care about imposing deadlines as an answer to the question "how much time is it worth investing in solving this problem?" If the scope of the solution becomes larger than expected, and it starts to look like it won't pay off, abandon it and start doing something else instead. You had a good experiment which was entered into in good faith based on the data available at the time. That's the nature of experiments. Learn your lessons and try the next one.
Trusting that your teams have good plans that fail early and incorporate fast feedback loops is generally the only real way to make sure that they have realistic scheduling/deadlines for those plans and that they are likely to generate real value. It amazes me how many people in management seem to put their efforts and emphasis mostly on scheduling the plans, rather than the plans themselves. I guess it's easier to come up with estimates for things, than it is to come up with good strategy and business value propositions/justification.
I really recommend reading "A Seat at the Table" by Mark Schwartz (ISBN 9781942788119) for a good exploration of how agile meets management trust issues, budgeting and longer term planning, and how to try to break down the barriers between "IT" and "the business" (when in most modern companies, IT is the business).
Reading the comments, I think what I was bugging is the notion that would give a task not trusting it would be done.
People point at micro-management as an effect, because it basically means providing more limited tasks with limited risks.
But I think in the long term the direction we tend to take for people we don’t trust is to set penalties (bad evaluations, demoting, firing included).
In that sense, in average there should only be people you trust at the appropriate levels of an org, so I am not sure it is important to focus on gaining trust as it builds up just by doing ones job.
That’s where I like your idea of management trusting a plan, more than focusing on the team.
When I was a baby manager, I focused hard on Agile process and deadlines / roadmap commitments. And you’re right; it completely ruined my relationship with my team. They saw me as a representative of the oppressive corporate overlords, which is totally fair because those were the people I was trying to impress.
It took a few failed projects for me to get it through my thick skull that “doing things right” meant protecting my team from this behavior pushed down from above. It meant giving them space to do the job we paid them for. I realized I was letting my anxieties overrule people who knew way more about the issue than I did. It meant listening more and pushing back on unreasonable requests.
And it turned out my boss didn’t care about missed deadlines for the most part — he cared way more about production incidents. The best way to reduce production incidents is to work deliberately and not take unnecessary risks. A side effect of this was that we had way more power to say “no” to other teams, which made maintaining the code base a lot easier.
OT, but it's super common to hear in management circles about how managers are supposed to "protect" or "shield" their teams from the nasty CTO or CEO or some powerful stakeholder. IMO this is just not sustainable.
A CEO or any powerful person pushing a manager too hard accomplishes absolutely nothing at best, and is a disaster at worst. This kind of thing really hurts the morale and culture of the whole company.
Glad to know your boss is one of the good ones. My current CTO is like this and compared to the company I was in before it's night and day.
If an organization has the right customer focus, internal deadlines should be meaningless. Customer-focused orgs are generally better places to work overall because there is a shared sense of what is important.
and in most cases, 'something' * 12 > 'nothing'.
(although that 'something' might not be very changeable, or complete, or 'good')
and thus agile, getting things done with people that haven't done things before. (not meant to be snarky. long design iterations require experience in the problem domain. now days, no-one has experience. or the problem domain is new).
Right. This is the thing that's nearly impossible to achieve in most places and why so many people hate Agile: because they're dealing with "imposed agile" where the managers are driving the process.
The idea of locking sprints was a reaction against the problem of going _sideways_ , i.e. "changing priorities without notice" and requests for unplanned work to be done "now" without any thought of the effects.
That is not to say that sprints do not serve a purpose -- several, in fact...
Strongly disagree, it's not on the shoulders of developers to ensure faulty promises can be kept. I will for sure not sacrifice weekends, this is far from ideal
I find it to be a very difficult topic, as everything has to coexist: no sales, no company but no developers no product to sell which is then no company.
I find that the deadline setting sometimes gets out of hand because it's not the setter who has to meet the deadline. For example if I set a deadline you have to meet and I can not influence the work being done (help or somehow make it easier to hit the deadline) how could I ever understand the "true" consequence of setting the deadline? In other words, not my weekend so I probably won't care as much as you.
What has worked for me (sometimes) is setting up the consequence; if we have to make x for deadline y, we won't be able to make a for deadline b. And then try and involve "sales" or the deadline setters in how we cut down whatever has to be made so we do make the deadline.
But that completely aligns with the post as that rarely is user centric or building the best solution for users. This simply gets stuff done within an arbitrary deadline set by someone, to meet a contract etc.
Bear in mind these experiences are from startups and not corporates.
Time and time again we've butt heads with the sales team because they promise the world to one or two leads before checking back in with reality. Those interactions are met with checking in with stakeholders to validate assumptions. we gained the support of our executive sponsor or customers who are actually paying for the product to be built. Asking that question insulates us from greasing internal squeaky wheels.
Any feature you use to entice a new customer isn’t necessarily going to please your existing base. It might, as someone else suggested, actually be a considered a liability.
So the idea of building a new expensive feature, or a new feature in an expensive way, is suspicious. There’s no guarantee you can amortize that cost across all of your customers. And the times we really butted heads with sales? The features cost us more than the value of the sale, reducing margins.
But I suppose that’s the sort of metric dysfunction you invite in when you measure salespeople by sales.
Learning productivity tricks and building tools actually lets you do the same amount of work in less time. Some quality initiatives reduce rework, which also increases throughput. And these practices also reduce stress during exceptional events (production issues). That effect may be mostly obvious but what we don't ever talk about is the fallout of stressful events and how they affect the quality of the code produced immediately afterward.
Burnout, as you say, is the end game of not doing this. But I think the symptoms are detectable long before that point (and I might argue are part of the feedback loop that leads to burnout).
Beyond that, working extra hours and weekends is a bad idea. It should only be done out of desperation because working overtime can quickly become the expectation.
Granted, the lines can be pretty blurred at some companies, namely startups that give lots of responsibilities to their developers. But most non-startups seem to have more refined command structures.
I do think it can be ok to work extra hours to seize an unusual opportunity or deal with some truly unexpected problem. (E.g., the destruction of the World Trade Center in 2001 required a lot of tech people to scramble.) But that has to be balanced by something good for the workers and painful for the business, like an equivalent amount time off or significant overtime pay.
But workers shouldn't have to spend their spare time making up for managerial incompetence and malpractice.
"Did a bomb go off in our datacenter? No? It can wait then."
While some people -- healthily or not -- are willing to bust their butts (with or without extra compensation) when they think everyone is in it together, it will generally kill morale and willingness to do such when you realize when someone else 'doesn't have time', the deadline is moved, it's only you expected to work evenings and weekends and extra hours to meet the deadline. Why is your work-life balance less important than theirs exactly? (Only because they can get away with it...)
And while not always as stark as your example, people are often shown this all the time, that not everyone's inconvenience is in fact treated equally, that the "deadline that can't be missed" really only applies to some people, and is moved for others.
And then you're somewhere crying on the floor or in a hospital, and not coding. The organization around you has adopted to poor planning, because you encouraged them to do it.
"I'm not wasting this food by throwing it away, I wasted it when I let it go bad in the refrigerator"
If we really do care about the customer, we should be fixing the problem at the source, not trying to scramble to fix things after it's too late.
When you work in a scrum team with a well-established workflow, and you have the experience that we usually finish around 20 story points per sprint, then shouldn't commit to finishing the next sprint with 20 story points.
You also know that that effort and technical challenges etc. vary greatly, so you can only do a commitment to, say, 8 story points per sprint with a straight face.
And now, try to tell somebody why you only commit to "so little" work being done by the end of the sprint when you tend to get much more work done... Mostly impossible, in my experience.
I want to meet the person who went around convincing PMs and scrum masters to abandon the word "estimate" in favor of "commitment".
Software I use every day: Firefox, Slack, Vim, MacOS, Python, Bash, GCC, Android, StrongLifts 5x5 App, Gmail, Google Docs, Google Maps, Simple (Banking) App, VLC.
All of these (except maybe Vim?) have released some significant features in the past year. Of these features, I only knew about a few Python features that were coming before they came, and none of them were ones where I was thinking "I can't wait for this to come out! If this doesn't come out soon I'm switching languages!"
On the contrary, features take a long time after they come out for me to learn how to use them and for them to affect my decision making. In fact, my initial reactions to new features are much more likely to be a liability than to be an asset to the software company. I'm considering switching away from Simple because their expenses update doesn't really fit my needs, since as a freelancer I'm not paid on a regular schedule. And I'm definitely switching away from MacOS since their deprecations have broken some tools that are key for me. If they had taken more time, maybe someone would have noticed the problems and avoided them.
Sure, early on things are different: first-to-market advantage is real. But for most of the lifetime of a project, you aren't releasing killer features. You're releasing incremental changes that have a much higher chance of losing you users than of gaining you users (in the short run, at least). Never releasing isn't an option--death by stagnation is a thing--but releases should be done with painstaking attention to detail rather than urgency.
One of the truisms I've heard and have always followed is you need to release something you're embarrassed about, because that's the quickest way of getting user feedback, and understand if a user actually _wants_ that feature, and if it's actually worth spending time improving that feature.
It's easy to waste valuable capital paying attention to details that the user does not really care about.
EDIT: I've noticed that most of the software you posted here is very well established, most > 10 years. I'd be surprised if any of them follow "agile" by the books.
Is there any example of a startup that actually made it by releasing features that were broken or poorly thought out?
Is there any example of a startup that actually failed because they released features a week or a month after an internal deadline?
Do we have enough insight into the internal strategy of enough companies to make any claims about this at all?
Your argument is basically looking at existing startup culture, but realize that most startups that use a fail fast strategy do exactly that: fail. I'm not saying that's causal: I think success is hard and there's a myriad of reasons why startups fail. But I don't think we can look at the fraction of startups that have succeeded and point to this one element of their strategy and say, "This was a necessary component of their success."
I'm not looking at the whole industry because I don't think there's enough representative data there. I'm looking at my own experience as a user and noticing, "Hey, I actually don't even know what features are planned for any of the software I use, yet I'm still using it. So maybe future features don't have anything to do with why I use software. And maybe other users are similar."
Let me ask you: can you name 5 features that you're looking forward to in the software you use? If those features take a year longer than expected to materialize, do you think you'd switch to a competitor? That's rhetorical: I am sure some HN people can answer those in the affirmative, but I'm also sure that's not the norm.
> One of the truisms I've heard and have always followed is you need to release something you're embarrassed about, because that's the quickest way of getting user feedback, and understand if a user actually _wants_ that feature, and if it's actually worth spending time improving that feature.
Sure, but then you don't know if the user doesn't want the feature because it's not useful, or because it's badly implemented since you didn't spend time to get it right. You're collecting data faster, but you're also confounding the data so that you don't know what it means.
> It's easy to waste valuable capital paying attention to details that the user does not really care about.
Agreed. One of the details I'm saying the user does not really care about is whether your feature is released today or three months from now.
> EDIT: I've noticed that most of the software you posted here is very well established, most > 10 years. I'd be surprised if any of them follow "agile" by the books.
...which is a pretty damning statement about '"agile" by the books'.
I'll say what I've said before many times: the entirety of agile is contained on this page: https://agilemanifesto.org/ . "Agile by the books" is an attempt to make money off a successful strategy, but you can't sell six lines of text, so people write books on how they implemented agile, which if you understand agile, is fairly useless for understanding how YOU should implement agile. If you really grok those principles, then it's really clear that releasing early to get user feedback doesn't follow the principles:
Individuals and interactions over processes and tools The deadline is a process rule that you're prioritizing over literally every individual in this situation.
Working software over comprehensive documentation Releasing broken software so you can document user response doesn't follow this principle.
Customer collaboration over contract negotiation Customers should be involved long before you're releasing features.
Responding to change over following a plan The deadline is the plan. The fact that the feature isn't ready by the deadline is the change that you need to respond to.
That said, the product managers generally left us with information such as "this is actively being worked on", "this is planned work in the upcoming quarter, but it could change", "this is on the roadmap without a date", and "this is not on the roadmap". No specific dates promised, but it was still good enough for our purposes.
I hope they weren't using our requests to push for specific dates, internally.
Processes and tools are important so long as they don't diminish individuals and interactions.
Documentation is important so long as it doesn't get in the way of building software that works.
Contract negotiations are important so long as they don't get in the way of a collaborative relationship with customers.
Following a plan is important so long as it doesn't get in the way of responding to change as a competitive advantage.
There is something I'm impatiently waiting for though: Optimization so it doesn't take 5+ seconds for Photoshop to load and be usable. Why doesn't it load within 100ms on $3,000 modern hardware? It's image editing software, not Grand Theft Auto!
That's where some energy could be put and make a real, tangible difference to everyone.
My current project in fact started out life offshore but the work was so slow-going and awful iterative results that they then rev'd up a real software team to complete it. Initially they wanted us to complete the project without scraping the offshore code base, which was in baaaaad shape. It took another consultant, hired for a different reason, rather than listening to their in-house leads (of which I was not one, I was a junior at the time), that they needed to scrap that code.
Sales commissions?
By choosing to release "whatever we can do" at a certain time it encourages you to make difficult prioritisation decisions as the "deadline" approaches. Are we really OK with releasing with just this functionality? Maybe we should axe X and replace it with Y since we don't look like we are going to get both. Maybe Z is an even better compromise that we didn't realise was an option at the beginning of the project.
If you try to hit functionality, it allows the organisation to avoid rethinking its planning decisions. We aren't releasing until the ideas we had 6 months ago are all implemented exactly as we envisioned it back then. By the way, why is it taking so long?
Of course trying to hit both at the same time is just a recipe for disaster.
There is effectively organizations that look at ongoing R&D subjects and say “this is almost shippable, we’d just need X. Let’s just priorize X and ship it”
Thus for me it makes the deadline or it doesn't. Early isn't a benefit, late is a problem.
The idea that adding additional process to manage your managers is laughable at best.
So no, you cant manage your boss, you can inform them, maneuver them, help them, cajole them; but at the end of the day you cant get them to change their behavior if they truly don't want to(and they can just fire you for being too annoying.)
I'm a big fan of going hard for a minimum viable product. The notion is that you find the absolute minimum that will let you close the primary feedback loop: seeing what people do in the real world. Maybe it's only one set of users, like early adopters in a particular market segment. Maybe we leave out a lot of "real product" things, like help and docs, making up for it with handholding. But we ruthlessly cut scope until we have something in users' hands.
At that point, I think it's possible to shift from an internal focus (e.g., an arbitrary date or a made-up list of features) to an external focus, where we look at who's using it, who we're delivering value for, how we can sell it, and what the next most valuable improvements are. W release weekly or more often, driven by hypotheses and data. For me, that's when the real magic happens. Then we can focus less on internal politics, and more on what we're learning from the real world. And there's always something to learn.
Wise words. Herb Sutter wrote a long blog post on exactly this, with regard to how C++ language versions release on a schedule, whether or not your favourite feature is ready yet.
https://herbsutter.com/2019/07/13/draft-faq-why-does-the-c-s...
Just keep the velocity as consistent as possible and things work out for the best. If the PM wants a story moved up the list, then they can see how much work will fit into an iteration and how it will affect schedules.
All of this is managed in their homegrown, but publicly available tool called Pivotal Tracker. You can read the website documentation for a more thorough explanation. Once I learned this methodology and started practicing it like a religion, deadlines went away and PM's could estimate due dates many weeks in advance. It was a life changing experience that I highly recommend at least giving a shot at your own workplace.
Iterations are 1 week and there is no expectation that a story will always fit within the current iteration.
The only tool that I have found which can accurately visualize this difference is PT.
All of the points collected in that week are summed together and the average of those points across a configurable threshold (typically 3 weeks) is the velocity. Once you have a velocity, you can start to make predictions about the future.
For example, if velocity is 10, that means 10 points worth of stories can fit into an iteration. If the PM moves another story into the iteration, the last story would be automatically pushed into the next iteration. Makes it easier to answer the question of 'when will a story be done?' as well as 'how will changing the flow of stories affect deliverables?'
Highly recommend you read the documentation, it has been formed over many years and is excellent.
In all seriousness I'm curious about the story pointing. Does the team meet together for that at Pivotal?
Pivotal has 3 regular meetings: daily morning standup (short), iteration planning (monday), retrospective (friday).
Any new stories during the week that haven't been pointed get pointed in the morning meeting.
Most of the time, the sprint planning just provides some ceremony around ensuring important stories are discussed and points allocated, and priorities set, and the planned sprint is pretty much a line in the backlog that suggests an aspirational goal that is likely to change. The point is rarely to hit exactly that, but for it to serve as a means of talking about what needs to be done first - whether something needs to fit into this round, or can wait for the next. It also serves as a means of talking about inter-dependencies and sequencing of changes.
Pivotal has 3 regular meetings: daily morning standup (short), iteration planning (monday), retrospective (friday).
Any new stories during the week that haven't been pointed get pointed in the morning meeting.
The standups are mostly just pointing the stories that need pointing, covering any questions and picking the pairs for the days work (pivotal is 100% pair programming). The meetings can be done within 5-15 minutes at most.
I'm currently living at a yoga retreat center in the mountains of Vietnam. I can see from the practice that the first few minutes of silence is good to clear the mind. I think having standups is a similar good way to start the day with a positive attitude.
What we have been trialing for awhile is a simple Slack checkin. Everyone reads them when their day starts, and if there are any questions or comments a Slack thread is started from the checkin message. It's worked quite well.
It sounds like you have found a solution that works for your company and that is great! The way I look at it is that as long as we are shipping software around the time when we say we are going to and the quality is high and people aren't killing themselves (weekends) to make it all happen, all good. =)
My hunch is that standups are pretty useless on teams where each developer is working on an independent change where there isn't much opportunity to get blocked by teammates aside from waiting for code reviews and the like. That's most of the teams I've worked on, and the standups inevitably turn into a verbal form of, "Hey manager, here's my status report for the day even though you already know all this because I've already said it in Slack," because you have nothing to ask of the other people on the team but you're required to say something every day.
Another plus for me personally is that it has a focusing effect on myself as a developer - if I say I'm going to get something done in standup, I'm going to force myself to focus on that task, and not get distracted by something else unless it's really important. I can see how that's a totally personal thing though - I need to have some sort of external "deadline", even if it's self-imposed and soft, to keep me focused.
All of the above can be solved with async updates in Slack though, and that's probably actually a better medium. Having folks get in the same room seems a little pointless to me, especially when you have remote folks and timezones are an issue.
I've been in environments like the one you describe, and I think at the end of the day it's more of a cultural issue than something that can be solved using a tool.
My hunch is that standups are pretty useless
on teams where each developer is working on
an independent change where there isn't much
opportunity to get blocked by teammates aside
from waiting for code reviews and the like
Personal anecdote, but I like to know what my teammates are working on even if we're not collaborating directly.I could (and do) read their commits and PRs, and standups are not a replacement for that, but I think you can usually get a better idea just by chatting for a few minutes each day.
I view the cost of a daily standup as very small (they should be only a few minutes long!) so while some would call the benefits modest, I think the "time spent vs. value obtained" ratio is still very good.
I too like knowing what my teammates are working on, but I already get that from the team's Slack channel where people talk about what they're doing as they do it.
Of course, that's my experience. Others may have had different experiences and I respect that. If you formerly had 0 interruptions per day and now you have 1 interruption per day, that would be frustrating. I would also like to work where you work!
My problem with a morning standup is that it completely destroys my productivity if I come in early and really get cracking on a problem, then have to stop and task-switch. I'd much rather make it optionally asynchronous.
I personally would rather do those meetings in the early afternoon, like before or after lunchtime.
Pretty sure there are plenty of studies that show early afternoon is our least productive time anyway.
(TBH, and I'm being completely serious here, my ideal schedule would also involve siesta time in the early afternoon)
"weakest" devs - you know not everyone is outspoken and will communicate without issues, new young devs will be afraid to ask an experienced guy. Some experienced guys (also "weak") will be assholes to young devs for asking questions. Just getting team to talk to each other at least once a day is positive. Unless you work only with senior people who are experienced and don't have any issues talking to each other, I would still try to get people to gather for standup.
Nobody should be an asshole. Nobody should be working alone.
Both of these are great ways to create a really toxic working environment, please don't perpetuate it.
Do you think he is not a senior person? Is he a bad person for pointing out his years of experience? Maybe I am bad person trying to express in BOLD that there are people with less experience, social anxiety, assholes and we have to work with all those personalities. With strong emphasis that standups are good tool for getting rid of toxic work environment and getting teams together.
> Nobody should be an asshole. Nobody should be working alone.
Ozim advocated neither being an asshole nor working alone, so is perpetuating neither. Standups have a place and it's to fight both of those problems, when some ICs on a team can't handle it on their own.
This guy is a beast at getting things done, and is a good communicator once you get him talking. Overall, a joy to work with. However, you do typically have to make the first step. He kinda stays dark without scheduled meetings.
To me the key is to keep the daily standups VERY brief. They help the "reluctant" communicators. And they don't cost the "active" communicators very much time.
I am a fairly "active" communicator myself. I'm gonna spend 15 minutes talking to my freaking team every day anyway. So a brief 10-15 morning standup is no problem at all.
Let's be generous and call the "real" cost 30 minutes of productivity... 15 minutes for the actual meeting/call, and 15 minutes of context switching cost.
That is 6% of an 8-hour workday. You can still code up to 94% of the time, not bad. And I think it has been shown many times that most developers don't really pound out code for 8 hours per day. We might work 10+ hours per day but it's not necessarily 10+ hours of coding. So I feel the cost of these daily meetings is very small.
What are the benefits?
1. For one thing, it is good to know what the rest of your team is working on and what challenges they are facing. This jogs a lot of useful conversations in my experience, where Developer A turns out to have some experience in the area in which Developer B is stuck. You may be thinking, "good teams communicate and can do this literally any time... why schedule a daily meeting for it?"
Yes. If your team is operating and communicating flawlessly, sure, standups are redundant. However, I've been at this for 22 years and this is not typically the case, and the brief daily meetings are a real upgrade.
2. These meetings help prevent "drive-by shootings." That's what I call it when management randomly stops by your desk and wants to know what you're doing and if you're stuck and wants to see your work in progress. I hate hate hate hate these. I would rather just briefly chat with leadership on a predictable basis. And when I am leadership, I would prefer not to subject my team to these "drive-by shootings." A lot of teams are already paying this cost, which I feel is much greater than the cost of a brief morning standup. Again, if your team is already communicating at a super high level, maybe you don't need standups. I feel this is not the case for a majority of teams.
3. For remote teams, these give folks a chance for some regularly scheduled face time and chitchat. We kept our morning call to < 15 minutes today and talked about Star Wars. As a remote worker myself I truly cherish this. If you have a remote team I would call video chat standups more or less a requirement.
I've worked at a few places that follow more or less the same practice and I've found that the planning meeting is hugely valuable but that standups and retrospectives are a waste of time more often than not.
The retrospectives at Pivotal are actually quite fun. Usually involves optional booze and doesn't last for more than an hour. The goal is to make them about anything, not just talk about work. It is like an end of the week team building exercise. Think about it, most of us spend more time with these people in the office, then we do with own family. So, we might as well have an hour where we put down the phones and keyboards, reflect on how the week went, find things that can be improved, talk about life events or anything really. Find the positive aspects and focus on those as well as quench any negative things so that they don't carry onto the next week.
The process you describe fits precisely within the Scrum framework; a key point of the retrospective in Scrum is not just to understand what has been delivered but what caused deviation from the estimate at the start and why. The assumption throughout is that the forecast from planning is just a forecast and that what will be delivered will pretty much never be exactly that.
Maybe there are other things you do that does not match Scrum, but the above fits Scrum better than attempting to turn it into static/fixed releases - after all the entire point of pretty much all iterative development processes is the acknowledgement that we do not know how to precisely estimate software development with sufficient accuracy to create precise estimates for specific sets of tasks.
At Pivotal, the forecast of what will be delivered changes all the time and it is tracked in a single tool that everyone can look at and keep up to date with (along with a few short meetings to keep everyone on the same page).
What Pivotal does is fairly vanilla Extreme Programming. Indeed, the vanillaness of it is something of a selling point. In the London office, we would start projects by giving client PMs and programmers a copy of Extreme Programming Explained and telling them that was what we were going to do. It's easier to coax them into following a process if it's a documented industry-standard one rather than some special sauce.
Pivotal does have a few extra bells and whistles that fill in spaces around the XP core - "discovery and framing" [1] and "inception" [2] being two that spring to mind. And as you say, there is less emphasis on iterations as a unit of work - the planning meeting is weekly, but it feeds a continuous flow of development and delivery. But the daily pattern of work should be familiar to anyone who knows XP.
[1] https://content.pivotal.io/blog/what-we-did-on-our-summer-in...
[2] https://www.infoq.com/articles/project-inception-meeting/
In my experience more typical is that the PM chooses a set of tickets and asks the team whether they can commit to them.
According to the constraint above, neither that, nor the “pick from the backlog” process you’re describing would qualify as “Scrum”.
One week sprints are also fine, but I’ve always found everyone hates them for doubling the number of planning / backlog / etc. “process” meetings.
One month is often too infrequent for these meetings, one week is too frequent, so 2-week sprints appear from this sort of naturally. As long as you don’t conflate the timing of the sprint with the timing of work tasks (eg accept there are single work tasks that cannot be chopped up into two week incremental subtasks) this seems fine.
It gets especially bad if there is a lot of fire fighting happening as well because someone might get pulled off that feature and now the time goes to infinite...
The idea is to try to prevent that type of common delay.
Fire fighting is just as likely to prevent completion in one sprint as the other, so there is no net change in how the effects of context switching for firefighting slow progress.
Of course, restructuring teams and work so that firefighting effects are reduced is always the goal, I’m just saying it doesn’t matter at all in terms of when the arbitrary cadence for syncing and planning are chosen.
As I mentioned already in the thread, retros are not just about the work... it is a check in on what went good, meh, bad during the week. It can be about anything, not just work. The idea is to have one hour at the end of a week closeout team bonding where anything can get laid out on the table.
At Pivotal, an iteration is a week and it doesn't make any sense to make it longer than that. What would a longer than 1 week iteration really be? Are you making them longer only because you don't want as many retros?
I said: "The idea is to have one hour at the end of a week closeout team bonding where anything can get laid out on the table."
You said: "In our retros everything is on the table for discussion, but it sounds like that's not the case at Pivotal."
There is a disconnect somewhere cause I'm pretty sure we are saying the same thing. =)
It might. For example, if your team is distributed (eg development in the Pivotal office, infrastructure in the client office), you might prefer to have retros once every two weeks, rather than either drag the infrastructure people across town every week or have retros remotely.
On some projects i anchored, we had planning meetings twice a week, because planning went more slowly, relative to development, than usual, due to complexity of features, multiple stakeholders, etc. We still had retros once a week. Was our iteration one week or half a week?
The truth is that iterations don't really exist. You have planning meetings at some frequency. You have retros at some frequency. You have client liaison meetings at some frequency. You may have various other meetings at various other frequencies. Sometimes the frequencies are the same, but it doesn't mean anything.
> There is a disconnect somewhere cause I'm pretty sure we are saying the same thing.
Sort of. In our retros everything actually is up for discussion. If people think 1 week iterations may work better for us, we may try them out (and we have). We got rid of daily standups because of a retro discussion (they may come back if we feel communication is lacking). The point is there are no sacred cows.
You already stated a few things that appear set in stone. 1 week iterations, pair programming, daily stand ups, and everyone at the office for the same hours every day. From my standpoint that appears very rigid, and I wonder what there is to talk about in the retro if the development process is static.
Many Pivotal teams hewed closely to the default practices, but not all. The most dogmatic is Pivotal Labs, because its job is to teach the basics. Having a rigid, predictable structure works better to start folks off.
I've seen every sacred cow at Pivotal slaughtered by Pivots and guests, when it was felt that this was the right and effective thing to do.
No one ever said a story has to fit within a sprint, that's not how agile or sprints are supposed to work. Some stories take multiple sprints. You should always break down large stories into sub-tasks that do fit within sprints.
This iteration thing your describing sounds almost exactly like sprints to me, just reworded to sound like their own thing.
Correct, all larger stories should be broken down.
To be super clear, this is not my own thing. =) It is Pivotal's thing. I am just explaining the process as it was taught to me.
Jira uses epics in the same way. And I'm not sure what you mean by "there is never an 'end'" - how does that differ from sprints? Iterations and sprints are just two words for exactly the same thing.
https://infocus.dellemc.com/rahul_bhandari/software-developm... (corporate version)
https://pivotal.io/agile (this one bugs me a bit since it really just compares against waterfall)
https://medium.com/@ryanjjones10/what-is-the-pivotal-process... (this one is more accurate)
I'd be amazed that Pivotal actually does pair programming all the time, except that they are in the business of selling tools to facilitate exactly this process.
All of this is presumably going to be in flux, now that the acquisition by VMware is complete.
Well, they shouldn't: https://www.scrum.org/resources/commitment-vs-forecast
The problem is that Devs making estimates tends not to be accurate IME. Some stuff is easy to estimate, but adding in new & significant functionality is notoriously usually hideously mis-estimated (either high or low). So much so that the numbers basically b come meaningless and can't be relied upon because every major new thing was a lot easier/a lot harder than expected.
The reaction to this is to split the task up, but this often requires that you do a lot of pre-work-work to architect and design the work so you know how it can be broken up, and that design work needs to be estimated so you are back at square one with wildly inaccurate estimates.
So like you said, devs learn to get better at forcing the PM's to split the stories into smaller chunks. Smaller stories are almost always easier to accurately point since it is always 2 (1 point for the story, 1 point for testing).
The numbers are not meaningless though. That is why velocity is an average of 3 weeks. A single week doesn't blow things out of the water and if it is a new project, the expectation is that we won't know where we are at all those first 3 weeks. It gives a built in ramp-up period for the project.
Agreed, the PM's role is SUPER important. For this reason, at Pivotal the PM's usually have a developer background.
The way you describe it, a developer’s role is to point out stories and jointly perform the work the PM has allocated.
Instead, if those same developers understood the users, use cases and metrics and co-created the work the team does, the team would have 10 or mor engaged minds all working to make a better experience instead of the one super PM.
Also when you are doing the 101st CRUD type function in an app, you probably cannot be that enthusiastic about managing yourself either.
If the team's programmers are "product-minded" [1], then the PO will be getting lots of input from them, and in a healthy team will be going along with most of it - the PO is in a "first among equals" kind of position. If the programmers are not like that (junior, new to the domain, just not built that way), then the PO will make the product decisions without them (but still with the support of a product designer, hopefully!).
There's an excellent leadership principle in the UK armed forces (and i'm sure elsewhere) that a leader must consult their subordinates before making a decision, but that once a decision made, subordinates must go along with it. The PM - programmer relationship around prioritization is an example of that.
[1] https://blog.pragmaticengineer.com/the-product-minded-engine...
In the same spirit, the longer you keep code out of trunk/master, the more risk you have and the more difficult it is for people to do refactoring. If you make large changes over a whole week, then you end up with difficult integrations. Even if you aren't doing true CI (i.e. actually integrating your code with everyone else's on a continuous basis), it's important to limit the amount of time your branch is held out of master. If you have a 2 week sprint and you have 1 week stories, you will almost certainly fail every single sprint (been there, done that ;-) ). The only way for a sprint to succeed is if the vast majority of stories are small enough that you are unlikely to start it without finishing it.
The funny thing about having small stories (around 10% of the size of your sprint) is that if you are doing them, then having a sprint end is inconsequential. You may drop a story or two from your board if things don't go as planned, but you will almost never start something and not finish it (especially if you prioritise stories by risk). So the main reason for preferring sprintless backlogs is because keeping the story size small is difficult.
In order to keep all your story sizes small, you have to be doing some things very, very well. First, you need to be doing your analysis very well. If you don't know exactly what you are building before you start, you will have wide variability in the amount of time it takes. It will also be very difficult to break problems apart because you aren't entirely sure where the good break points are. Second, your code needs to be very, very clean. You need to be refactoring literally constantly. The code needs to be simple in order to break your problem up easily. This requires a lot of iterations of design in all of your code as the code grows. All of this actually feeds back to the preference for CI over CD.
It's not a system that a lot of teams will prefer to use, but it has definite advantages. My experience has been that the potential is quite a bit better, especially over time. You need a team that is completely on board, though. It is especially difficult for PMs who usually don't want to think about problems in as much detail as is necessary for this system to succeed. However, I would encourage developers to keep an open mind because when it works, it works amazingly well.
TDD/CI/CD is critical and these are part of the culture at Pivotal.
Edit: a particularly poorly placed lack of negative.
Continuous integration originally meant that there was a single physical developer workstation that was considered canonical, and to get your work into source control, you would export a patch, walk over to that machine, sit down, merge your patch, run the tests, do any small changes you needed to get the tests to pass, then commit. If you couldn't get the patch working quickly, you would revert, and go back to your own machine and keep working on it.
Changes were serialized by the fact that only one pair could be sitting at the CI machine. Changes would only go into source control once the tests passed. Master was always deployable.
I once used a slightly more comfortable version of this process where you did the merge and commit at your own workstation, but there was a physical token that had to be taken before doing that, so that merges were still serialized. That worked pretty well!
The transition to the modern approach of just yeeting your changes into master and waiting for CI to go red after the fact constitutes a decay of this original practice. I don't think it's a deliberate evolution.
I'm not sure if I like that state of affairs. It feels like eroding goals or a capability trap.
So you're doing Scrum with a 1-week sprint?
The other type comes from third parties, generally, such as clients or the board. Once you separate these two types of deadlines, I find my engineers more understanding about having to meet external ones whereas blurring internal and external into one "deadline" simply causes people to either burnout or lose faith in management because everything is marked as urgent.
"The marketing campaign already promised it would be ready by X"
Basically if you prove you are working on it I bet they will let you off the hook.
Stuff is constantly pushed back. The India launch so far has been pushed back 9 months. A new product launch in the USA was pushed back 3 weeks - he initially said they were launching January 1st, when they get 2 weeks off for Christmas and no one works on new years day. Lol.
Even external deadlines need to face reality.
The alternative to Agile is Software Engineering, where you do important things like assess your requirements and capabilities, identify how to validate those requirements are functioning properly and support your business requirements, promote testing and QA to a first-class citizen. Most importantly to always have functioning software that is reasonably demonstrated to be correct. That way you release with confidence, people take pride in their work, and the product, team, and schedule all become quite pleasant.
The things you describe as “software engineering” are part of any reasonable agile implementation.
Many orgs have done a poor job of implementing agile practices, but throwing the baby out with the bath water seems like a great way to continue repeating the mistakes of those that came before us.
> The alternative to Agile is Software Engineering, where you do important things like assess your requirements and capabilities, identify how to validate those requirements are functioning properly and support your business requirements, promote testing and QA to a first-class citizen. Most importantly to always have functioning software that is reasonably demonstrated to be correct. That way you release with confidence, people take pride in their work, and the product, team, and schedule all become quite pleasant.
That just sounds like Agile...
Like, legit just sounds like the Agile Manifesto.
Honestly, if anything is likely to be the issue. It's Scrum. Scrum has the cargo cult. Agile just seems to get drug through the mud by everyone that implements some authoritarian variant of Scrum.
But again, not exactly a proponent of Agile here anyway.
That just sounds like Agile...
Agreed! It's Scrum. Scrum has the cargo cult.
What do you see as the problem: Scrum itself, or the cargo cult of folks who do it badly?Scrum done properly is very low overhead, at least from a developer's standpoint.
At my old job we did fairly strict Scrum and I estimated that it consumed only about 4 (so, 10% of a theoretical 40-hour week) of my hours per week.
I feel that is very low overhead. I don't know of a lot of development scenarios where you don't need to spend at least 10% of your time communicating with management.
I mean, people really have to think about what their actual dream scenario is. Some kind of world where they only have to spend 1% of their time interacting with management? 0%? These people need to get real. Management/stakeholders exist and you are going to need to communicate with them.
I have had jobs where upwards of 50% of my time was spent in seemingly endless meetings, plus "drive-by shootings" where management randomly stopped by and wanted to see progress and dump new shit onto my plate. Scrum is not perfect, but for most workplaces would be an upgrade.
Agile just seems to get drug through the mud by
everyone that implements some authoritarian variant
of Scrum.
I feel it is close to the opposite."Agile" is a nebulous term that has lost nearly all practical meaning. Bad management does some weird, loose version of "agile" (usually with some trappings of Scrum) and gives both Scrum and "agile" bad names.
Scrum itself. Sorry, but when you create a list of ScrumButs and indirectly deride everyone for not being able to take "Full Advantage of Scrum" so that your purists can go out and attack it at full force, yeah, that might be the problem.
The idea that different organizations might actually benefit from not adopting a methodology wholesale isn't that farfetched.
You could argue that's part of the cargo cult, I'd agree to some extent. But it becomes difficult to separate the 2 when you're literally derided for not following it to the religious T.
I never felt "attacked at full force" or "derided" even though we didn't follow Scrum to a T.
Never saw that "ScrumButs" thing until I Googled it just now.
I still don't feel attacked or derided. I've talked to dozens and dozens of developers over the years with various feelings on Scrum and never experienced those feelings.
But, you do, and it is 2020 so all feelings are valid. I'm sorry you've had bad experiences. People should not be jerks to you about Scrum or anything at all.
In general, my experience has been that the most wildly successful projects I have worked on tended to involve the least amount of stress, most amount of personal/professional development, and best relationship with peers. The least successful ones tend to be stressful, frustrating, and destructive. The common denominator is that the most successful ones rely on experience, intuition, and professionalism of your staff, the least successful ones submit to tyranny of agile - and when agile isn't delivering success, to double down on it and all those awful "issues".
Then again I never worked for Hooli.
If you have 10 hours a week of mandatory meetings and are asked to make projections about features and deadlines 6-12-18 months into the future, you are not Agile.
And does minimal testing, skips documentation, adds some tech debt, copies-and-pastes code rather than doing proper code reuse - because the deadline is the only thing thing being measured.
There are better ways, but it requires enlightened management.
I've seen many management fads. They come and go. They go because everyone tires of them and they get gamified anyways. At Sun I heard many people say things like "I'm going to code myself an SUV" whenever we got a new gamifiable management technique.
Sprinting too shall pass.
Note a result of this is deadlines are not something you should come close to: a break-even project isn't worth your time to develop, so there should be plenty of slack in the schedule to cut into before hitting the point of no profit.
It's effectively a job of an exec / director to make bets. Hopefully they are educated guesses, but there are times when somebody just have to flip a coin too.
this is literally why a significant portion of high-end intellectuals refuse to participate in this charade, and instead build quality technology in the open. Open source technology, built largely without artificial deadlines and fake drama, define the execution environment that this exchange is taking place upon (in many cases).
The old industrial plant planning algebra in 1950s textbooks, say something like "if we make widget N in six months with a team of 6 and $100,000 budget, we have a 30% chance of breaking even in two years, but if we make widget P in 12 months with a team of 4 and $20,000, we have a 60% chance of breaking even in 24 months" etc.. this is slightly useful in certain environments, but anyone here is going to argue that the "future" in 12 or 24 months is stable, technically?
The capacity of certain mental models to "Reductio ad Absurdum" is amazing to me, in an age of moving literally one billion+ conversations at once across wires and through space.
>12 or 24 months is stable, technically? Hm. Faster iterations are better, usually, again if we understand the context, but I see a lot of companies that are too quick to go into full panic mode. An example would be recession – If you plan to invest for the next 60 month, and a recession hits you on month 20, the right choice would be to ignore the inputs, and keep investing. Those who pull their assets when prices are low usually lose.
Quick or long iterations are not be all solutions, once always have to keep the context in mind and use first principles to understand what is that we are doing, and trying to achieve.
Given unlimited time, a team will ship more labor hours, that’s it. Constraints matter to getting shit done, and time is the most precious constraint.
For example, if you're working on embedded software that gets flashed onto ROM as part of a device's trip down the assembly line onto a boat, and the factory is ramped, you can't just say, oh we just need another month because our estimate was way off. Something is getting flashed onto those ROMs starting Day 0. If you're an engineer working on this software, this constraint needs to be taken as seriously as the OS API or memory footprint.
Yes, we know that’s what you think. We keep trying to explain to you that you’re living in a fantasy world where software development can be predicted accurately in significantly less time than it takes to just do the work. I understand why you WANT that to be true, but wanting something to be true doesn’t make it true, to the frustration of MBAs all over the world.
Why's it expensive? I think people who are capable of building and managing such teams, and dragging organizations into a set of processes that truly work, exist at a rate of about 1/1000 the demand for them. Meanwhile the people who can discern useful practices from useless ones or good implementation from bad are similarly rare and overlap largely with that same group, leading to an ecosystem of development practices that's almost entirely snake oil and wishful thinking, and where almost no-one can tell when they're looking at one of those 1/1000 folks who've got the knowledge and skills to make it work if you give them the authority, or some delusional schmuck or huckster.
The best most companies can do is to learn to live with a ton of uncertainty and work humanely and effectively with that, and few achieve even this lesser outcome, which tends to come with its own (lower) costs in hours and less-than-ideal predictability that many orgs just can't accept they have to pay to keep things running even sort-of smoothly.
Honoring deadlines also makes you predictable.
I once managed a handful of products for manufacturing. Our customers planned their down time, upgrades, etc around our releases. Defects, delays cost our customers real money.
A deadline without the information of its importance is pretty useless, unless you happen to be in an organization where all deadlines are there for good reasons.
In my experience, sales team rarely have any incentive to help out here. They almost always say that delay will create problems and they quantify in terms of dollars e.g. If X is not done by this date we will lose Y dollars. That Y number is almost made up to make things more urgent.
Actually, I have seen sales blaming lack of sales numbers on engineering because the delivery was "too" late.
What helps here is if you hold Business Value meetings with real people involved and try to reason relative priorities of stories. This is the fuzzy, social aspect of Agile development but I suspect it’s really the core idea behind the whole thing: it forces people to talk in person and empathize more, hopefully building up cooperative relationships rather than extractive ones.
If the stakeholders continue to be sociopaths though, you can either chose to give in and do whatever they say or lie. Both options break the spirit of the thing. Frequently there’s a 3rd invisible option where you use back channels to pull some influence. Which also defeats the purpose of Agile...
Sometimes it's real though.
Clients might have to make a vendor decision by the end of a quarter for example and want a bug to be fixed or a feature to be added before they sign.
In other cases, there might be a huge event and ad campaign where you have a limited timeframe to make a good first impression on a lot of potential customers.
Deadlines suck but in certain cases they're very necessary.
If estimates were all accurate, then the amount of work and the sprint duration would be the same. It inevitably takes more work than estimated, so something has to give.
If you constrain the duration and the scope of work, then quality will vary. If you constrain the duration and allow overtime, then you get a mini crunch time every two weeks. Some bosses think that people will slack off unless they are given pressure, so they like this situation.
A better way is Kanban. It's more or less Scrum where quality is the thing that's fixed. If the task is going to make more time than originally estimated, either you let it take more time or reduce the size of the feature, i.e. implement a simpler version of it.
then every level of management between the devs up to the CEO could be replaced with a spreadsheet.
I think many practitioners of Scrum would fall into what Steve Jobs described in that video as bozos.
So what do you do? Only healthy thing is to push back, give explanations for what is required before work can begin and have good relationships with all parts of the org yourself. Insulate the toddlers. If they need a PM, they gotta provide a budget.
After working with React for some tine I'm not so sure the good old Mvc is a bad thing, not always at least.
Is MVC as a pattern really all that bad for the majority of web apps?
i'm no different and have been caught up in this game more times than i can count, yes, i suck too. later in life i've come to determine, that whatever deadline i have in my head, i just extended by a factor of 2.5. if i think it will take a month, i say two and half months. that is more than enough time to not only get the project done, but also deal with anything that crops up unexpectedly. my serenity is worth more to me than looking good or being a hero.
If you have a manager who sets your team up for pressure and failure by artificially revising your estimates down, without cutting the scope of the work, then personally, I would find a new manager. Source: Am a manager.
I remember one meeting where I watched an engineer make a good faith effort to estimate time honestly and accurately, they said the number, and then the manager came back with a time period about half as long.
In that situation, the manager and engineer viewed the discussion in completely different, incompatible ways. The engineer saw it as a process of attempting to find the answer to a question about the world. The manager saw it as a negotiation. It looked like the engineer was frustrated with the manager for trying to treat facts as negotiable. And the manager was frustrated at the engineer for not being aggressive enough.
I'm not sure what the solution is. I'm sympathetic to the manager in a way because there is a natural tendency to ask for lots of time. Why wouldn't you, if you can get it?
If you are employed and a product owner is required to give you your workload, you are kinda of stuck. The best you can do is illustrate (over time) that you are unable to get things done because of changing priorities.
Put together a collaborative document where you write what you understand to be your tasks. When a task changes or a new one is added, add a new entry with a date/time. Invite him to see it and ask him to bookmark it because you want to be clear on what you should be working on.
This is a good thing to have around review time as well, because you may be confronted with 'It doesn't seem like you are very productive'.
Also if it is possible that your priorities are not changing as much as you thought, this is a good exercise for yourself as well.
Use specific examples (so everyone can learn) and avoid making about people by focusing on the jobs to be done.
If you're not comfortable bringing this up to boss directly, shoot through a Sr dev first (who may coach you around the issues / validate your concerns), or, Sr dev may speak up when needed to support your cause should you bring it to the group/boss.
But make it clear to them when they do this that there is a cost. "We estimated building the profile page based on doing it in one language; we can certainly internationalise it now, but it will take quite a bit longer". It's then up to them to decide whether the cost is worth the benefit.
As long as you are working as well and efficiently as you can on the work you have been given, you can feel satisfied with yourself.
Unless of course you're being judged for schedule slips caused by your product owner, in which case you're screwed, and you should quit and find a job somewhere less awful.
In many cases; especially where you have heterogenous projects, done by multi-disciplinary teams, dated milestones are pretty much required. You have to have some thing, by some time. I worked like that for many years, as part of massive, multi-national teams.
But these days, I have the "luxury" of generally working alone, or as a member of a casual open-source team that doesn't have any specific deliverable deadlines.
What I do, is define what "done" looks like, and set some very fuzzy milestones. At each of these inflection points, I reexamine the work I'm doing. In some cases, I decide to bin the whole effort, and either rewrite it, or simply scrag it, and move on to the next in the FIFO. In other cases (less often than I'd like), I am ahead of expected schedule, or the functionality of my work is better than expected. Boo-Ya. Go Me.
The important thing for me, is that I have a solid idea of a deliverable. It may not be associated with a date, and may be subject to revision, but it exists. At some point, the project needs to be released.
That may require some compromises, and it will require some tedium, like signing and provisioning, as well as producing marketing copy and graphic assets. That's part of what you need to do to have shrink-wrapped releases.
A lot of times, I can put off some of the sexier stuff for a 1.1 release.
Which is of course a short winded way of saying that the article makes a lot of sense. We for example have sprint goals - these are things that the team commits to actually getting done during the sprint. Then there are tasks in the sprint which may or may not overlap with the sprint goals and may or may not get done during the sprint.
It's always about trade-offs.
This is so far from the truth. I encourage you to spend more time with your sales team and even your stakeholders who are buying $100k+ software from vendors. There are so many parameters of a deal that go beyond contract signature date. Deliverables, SLAs, roadmap commitments, length of contract, legal definitions, opt-out conditions, payment terms, pricing, and more. Deals aren't just "on time" or not, they vary greatly in terms of quality. And that quality largely determines your company's ability to hire more engineers. Or fire them. ;-)
Bad deals happen when you're down to the wire and have to get it done on time or people will lose their jobs. Not unlike bad software. Work in the real world has deadlines. The people doing the work will always advocate for the loosest deadlines (or none at all, as is often the case with engineers). The people who need the work done will always advocate for the fastest turnaround. Without these checks and balances, the work just does not get done fast enough or well enough to stay competitive.
Additionally, some people need deadlines imposed to finish work. The alternative would be to fire them.
> Another idea is to experiment with more elaborate probabilistic ways of setting shipping estimates rather than gut based estimates.
In my experience, teams setting estimates and holding _themselves_ accountable is a great way to go with multiple benefits. This is why I’m a big fan on estimating software projects with a few ground rules [1].
Sprints and deadlines could be a tool to get here - as with a bunch of things, context, people and culture matter just as much as processes do.
Iterating and learning from iterations is how good software is produced, with a team that is motivated and continuously growing.
[1] https://blog.pragmaticengineer.com/yes-you-should-estimate/
1. Do the usual breakdown of tasks and point game to get relative difficulty estimates
2. Calculate the std dev points for each task instead of just averaging. The assumption is that this is valuable information about how uncertain developers are about the task, so we don’t want to throw it away.
3. Create happy-path and worst-case scenarios considering +-1sigma and +-2sigma
4. Prioritize tasks by deviation, to remove the most uncertainties at the beginning of the project
With this you start w/ a more realistic view of the uncertainty of the project, and it’s supposed to converge to the avg as the project goes.
A deadline can be for a ton of legitimate reasons, like delivering a signed contract by the agreed upon date.
Ok fine and sometimes I set deadlines because I’m like OMFG how have we not done this yet. Let’s get it done by x day. For example upgrading framework x to latest version y
Generally we err on the side of preserving articles' original titles and favoring authors above everyone else! But not when the title breaks that guideline.
Many Scrum Fanatics, especially the ones holding various Certifications, will scream bloody murder at the idea of tampering with their precious sprint. But the sprint is a fucking artificial construct that was meant to be fuzzy. If it isn’t good at representing how software is delivered you can either change the sprint or try to force your team to sync with it.
Unfortunately I’ve seen the agile processes be misused in many ways because it’s inherently so fuzzy and ill defined. It doesn’t really make much sense to bikeshed over minutiae but to focus on the outcomes and tinker liberally with the process to suit your teams style. Just keep your stakeholders informed of the changes.
Pun intented.
These days, I prefer Kanban style processes for several reasons. Most importantly, the practice of ignoring new requirements for two weeks (aka. doing a sprint) is not sustainable in most projects I'm on. It's just not a thing. Stuff changes all the time, deal with it now instead of in two weeks. Another reason is that I prefer continuous deployment and automating PM reviews away so we don't block shipping stuff over somebody's opinion. Sprint deadlines are utterly meaningless from a release point of view if you release multiple times per day. If it's better than what we have then merge and ship it ASAP. If it's obviously broken, obviously fix it now ASAP and don't wait to have a meeting about it in 2 weeks. Do that multiple times per day. Have responsible processes to ensure bad stuff gets caught before it is merged. It works. Shipping early means you catch stuff early and get feedback from real users rather than opinionated PMs and managers detached from reality. Also people stop throwing things over the fence when they are confronted with the consequences of what they did right away. It forces them to think end to end, a quality that I find is often missing with engineers because they are being shielded by layers of management.
Finally, I work with remote developers a lot these days. Anything involving telcos or meetings is downright painful; especially if you add language and cultural barriers. Having full day scrum ceremonial crap is just not something I have a lot of patience for. Doing that over a hangouts meeting is just an exercise in futility.
Kanban of course does not stop you from having regular planning meetings, estimation sessions, retrospectives, etc. All that can still work and if it adds value to your team, by all means keep on doing that. IMHO it makes less sense in distributed teams and those require more asynchronous approaches. I find decoupling what we do from when we do it in a Kanban style to be helpful. If the backlog is getting too short, add more stuff and add it in the priority you want things fixed. Don't allow your team to lose focus (aka. multi task) and set concrete goals. Have breakout meetings when things need clarification. Don't pile on too much work in too much detail until it is ready to get done. Doing CD means you can specify changes in terms of what you have in production and how you want things changed. I find that injects a sense of reality that just stops a lot of BS. from ever happening.
Nope. That context switching will cost you more on average than sticking to the process. And most often you’ll be wrong about the time estimate, or the customer will be wrong about actually wanting that feature, etc., making the context switch even worse and more costly.
I'll have to improve my efficiency at developing software anyway, but this article has given me more confidence that I can pace the promises I give to my clients as to when features will be delivered.