So imagine any bugs or any feature that goes from one team to another one. If you find any problem, it has to go back, and this goes on and on and on. And you basically have these two teams constantly talking between each other. So that could slow things down.
Challenge number two, work visibility. Imagine the best case scenario. You have one Jira board for the feature teams and one Jira board, let's say, for the device teams. But also, we have multiple feature teams. Actually, they are split by domains. So different domain teams working on all the features on that domain, which means that we have a bunch of Jira boards here, and then a few Jira boards here as well. So answering the question, when is this feature going to be released, is not that easy. Because you have to create a puzzle with all these pieces scattered in multiple places.
Challenge number three, devices teams can't fix issues properly. Why? Because they do not own the feature. In a sense, if a feature team is owning their code base with that feature, then they hand over that feature to the device team to make sure that it works on the Firestick, for example, on the Amazon Firestick, and device team says, it doesn't really work well, I tried to fix something, but there is this bug. And it means that they do not own that feature, they have to go back to the feature team. So ownership for the device team is actually quite a problem.
I want to recap the challenges before we move on. So first of all, slow feedback loop, this ping pong of bugs and features between these two teams, one is testing on devices, the other one is working on more generic feature. But then we also have work visibility, which is not super clear when a feature will be released or at least is not as straightforward as we would like to be. And then we talked about device team ownership, because this shared ownership between feature and devices is not playing really well, because it's a shared ownership, which usually means that no one's own anything.
So this setup brings us to the journey to DevOps. And I want to start the journey as every journey with a first step. And the first step is a quote from the DevOps handbook that says that the first way emphasizes the performance of the entire system. So not just focusing on the silos of different parts of silos of work or department, but focus on the entire system. And if we apply this one, which is like page one of the DevOps handbook, DevOps handbook 101, we have our old system which goes from developing a feature to the customer, which has an end over between feature teams and device teams. So we prepare something, we end it over, and this team check that everything is fine. So if that runs, if they are able to say, okay, this runs, we get to customer. But we have here, we have been here before, we have seen this, and what if I call this team here development? And what if I call this team here operation? Isn't that very similar? Isn't that exactly what was happening, let's say 10, 15 years ago when development team were all about to share their code as fast as possible without really care if that code was breaking production or if it was too expensive for that machine to run 24-7 to run so many hours of uptime? And then we had operations which had to cope with just development team shipping features that they may not even were working on some of the devices, some of the servers that they were supporting. And so we had this problem of handing over and my real question here is that okay, these are very similar, but in order to push forward this similar setup, but how did we arrive to the DevOps that we know to today? So we improved a lot in the last ten years, but how did we arrive to what we know as today's DevOps? And I think there are many contributing factors, one of which is for me are abstractions and abstractions are something very powerful.
Comments