Ahmad Nassri returns to the party for a deep, nuanced discussion around the thoughts he shared in a recent blog post called Solving Solved Problems. We hear about the common issue Ahmadâs seen at software shops of all sizes, learn the anatomy of the total cost of software ownership, and debate what to build and what to buy.
Ahmad Nassri: The same patterns. And I think the short summary of that - Iâve had the privilege of being in leadership positions or executive positions where I donât only look at the technology and the code and the infrastructure, but I also have to look after budgets. I also have to look after peopleâs salaries. I also have to look after sustaining peopleâs salaries and sustaining those budgets ongoing, year after year, quarter after quarter.
[12:04] So the dynamic shifts a little bit when you start thinking about âAre we making the right choices? Are we doing the right decisions?â When itâs not just âIs this the best library that we can use?â or âIs this the best framework that we can use?â or âIs this the best cloud system that we can adopt?â Itâs also like âAre we investing money in the right space?â because if Iâm gonna throw my money at a vendor â I donât wanna name names, but like big enterprise vendors and itâs gonna cost millions of dollars, what happens to the team that Iâm paying also their salaries, and how does that relationship work together? Am I gonna have to hire more people to maintain the product that Iâm also spending millions of dollars on? Or Iâm gonna have all of a sudden no need for the team members that I have, because Iâve shifted all my processes to a product that can, for whatever shape or form, replace a lot of the functionality that weâre doing alreadyâŚ
So those are both hard problems, but also critical problems, because we can debate all day long the value of frameworks and tools and services and libraries and all that kind of stuff, and the shape of an architecture that we wanna debate - and trust me, I love that stuff⌠If left to my own devices, to my own means, I would probably over-engineer everything, because why not? I love to create new things, I love to experiment with technology, I love to create all this complexity of cloud architectures, and challenge existing patterns, and create new ones⌠But at the same time, if I have an accountability and responsibility for peopleâs livelihoods, their salaries, their job functions and their job growth, I have to be very critical in the way I pick choices of technology, even down to the framework, even down to the process of how we implement code and how do we do automation testing, how we do deployment CI/CD, all that kind of functionality.
The patterns that Iâve noticed, again, in big enterprises, in small companies, in agencies, in outsourcing companies - there is a disconnect between developer experience, as we were talking about earlier, before we started recording, and user experience. And even though some companies have the kind of values and espouse things like âWe care about the user, we care about the customer and all that kind of stuffâ, it doesnât really translate to technology and how technology is implemented. Somehow there is this [unintelligible 00:14:12.25] barrier in front of developers, to how that actually reflects on the way that I do my work.
So if Iâm a developer and Iâm given a story in a backlog or a task as part of a team to implement a frontend experience, or a mobile app, or a backend server, or an API, or whatever - yeah, sure, the company has these big values about users first, blah-blah-blah; it doesnât matter, because the code needs to be the code, right? Thatâs how most people think.
But the reality is thereâs this concept of â again, as a person who has to own budgets and has to own long-term planning for team members and technology, thereâs a concept of the total cost of ownership of something. If Iâm gonna make a decision on something, I need to measure the total cost of ownership about it. And to me, that kind of breaks down into five different things - the cost of knowledge, meaning if Iâm gonna adopt their library, what do I have to expense in terms of time, energy, and dollars to make sure that the knowledge of that library is equally distributed across the team members that I have? And thereâs a relation there to how big the team, and also in relation to how long I need to keep this thing goingâŚ
Which leads to the next one, which is the cost of maintenance. Like, fine, youâve adopted a library, youâve adopted a service, youâve adopted an infrastructure tool, but how long is this gonna be going on, and how long are you gonna be invested in maintaining it and invested in having team members continue to run it, or update it, or deploy it, or monitor it - whatever the functionality is, given the component that weâre discussing.
Thereâs also the cost of the ecosystem, which weâre very familiar with in the JavaScript world⌠Basically, pick the library that has the most contributors. But even in a tooling sense or infrastructure sense â if youâre gonna buy into Kubernetes, for example, youâre gonna buy into a whole set of other things that youâre also gonna buy into and pay the cost of⌠Which also leads to the cost of infrastructure. If youâre gonna adopt a vendor product - cool, youâre adopting a vendor product. But is there infrastructure costs associated with that?
[16:07] Most people forget about that when theyâre doing the choices of technology, saying âIâm just gonna use Gmail.â Okay, youâre using G Suite then, which means you have to do everything through APIs.â You no longer have access, for example, to the low-level systems of file storage and data storage. Now you have to have tools and libraries and desktop application management for IT teams.
Thereâs all these kinds of concepts that people have to measure before they get to the cost that most people actually think about, which is the cost of adoption, i.e. âHow long it will take me to implement.â
So when I look at this big picture of the cost of ownership, I look at the way people make their decisions and the way people try to take shortcuts by saying âYou know what - I can build a login system myself. Itâs only a couple of libraries, and my cost of adoption is a dayâs worth of work, or two daysâ worth of work before I go and just deploy it⌠And then Iâm done and itâs clean. This is it, this is the cost.â And they forget about the maintenance, they forget about knowledge sharing, they forget about the ecosystem around it, and they forget about the infrastructure involved.
So thatâs kind of like the preamble to where are those solved problems that exist already, and how people try to re-solve them or reinvent the wheel around them⌠And my experience has been also in - like Amalâs earlier point - all the stuff that I was able to get things shipped; I get things shipped by simplifying the problem and getting down to the basics, rather than trying to break things apart and say âHey, letâs use this library instead of that.â I start with the basic thing of saying âWhy were you even doing this to begin with? Letâs discuss there. Are there shortcuts and cheaper options to follow?â