What about deadlines in an agile environment? While I generally agree that things are done when they are done, deadlines can be great. However, those deadlines need to be set from within the team. Deadlines should not be forced on a team. Often times, a team only gets to see a deadline when it's too late and it's already been communicated externally, without talking to the team first. Don't do that please.
Deadlines are not bad, as long as the team sets them. Let me give you a good and a bad example of deadlines in the past few years.
A few years ago, we were developing multiple products. We used Scrum and had two weekly sprints. As you know, a sprint is holy. You can't just throw something over the fence in the middle of the sprint as this ruins the entire planning. If this happens too often, you should reconsider if Scrum is what you want to do.
We started a sprint, it was pretty packed with tasks. In the middle of the first week, one of the project manager created a ticket which required us to set up an entire environment + preview for one of our products end of week. This was about 4 hours of work. We were not informed before, we were informed when the ticket was assigned to us. So naturally, we told the project manager that we cannot do it this week as we're in the middle of a sprint and that is not how we work. We need to plan, too, and he needs to make sure he respects that. His response? He already promised the client to deliver that on Friday. The guilt-trip, now there is no way to win. If you deny, the client will be unhappy. If you do it, you'll likely be unhappy, the sprint goal might be endangered and that project manager will not learn.
In an ideal world, this does not happen in the first place. In a less ideal, but still not as shitty world, the project manager would take ownership for his mess-up and solve it. In the real world, most developers will bite the nail and still squeeze it in the sprint, maybe even doing overtime. This causes a lot of fraction and frustration. I see this in so many companies that claim to be agile. The development teams do their best to actually be agile, but everything else like the project managers still do it the old way and cause a lot of fraction. To be agile, it's not just about your developers, other departments need to adjust, too.
As we were using Kanban, changing prioritization was as quick as possible. Any task could have been the next top priority task. We had a loose roadmap that we followed and looked at regularly. On some occasions, we set ourselves deadlines which helped us focus and prioritize.
We had been working for a few months on migrating the online shop, product and customer management. Eventually, we got into a hot phase, close to completion. We set ourselves a deadline to go live with the shop, it was two weeks from that day. This was great and we were hyped to finally go live with all the hard work we've put in. The goal was clear, go-live in two weeks. Everyone was on board. We communicated that deadline with the rest of the team (outside of development/product management). This deadline helped us think about what's necessary for go-live, what really needs to be done. It helped us prioritize and focus. We sat together and defined what really needs to be done and everyone helped reach this goal. End of story? We delivered on time, not a single hour of overtime needed.
We did that a few times. Every time we set ourselves a deadline, focus increased and boosted productivity.
This was a prime example of how deadlines can actually be amazing in an agile team. Keep in mind that the team needs to decide that deadline. Not the marketing department. Not the project manager. Not the CEO. The team.