Will Software Development Process Ever Mature? Part 1
It seems like software development is a hack-ish, trial and error process, with ever changing languages, libraries, and frameworks.
We’re back to another session of Ace that Career. Mikhail, I heard that you have a very interesting question for us to talk about today.
I have an interesting question, and this is something I keep thinking about myself. I’m keen on getting your perspective on this question, because I think this is something that a business person would ask themselves when they have to do a project together with software developers. Obviously, they don’t have any background in software development; they don’t really understand the technical side. They don’t really understand how software developers work and even think. That creates an interesting question.
Let me just ask you. If I’m a business person, right? If I’m looking at software developers at work; they’re producing software, they’re just making some cool stuff. One interesting question that I always keep in mind is that, for me, the software development process is very complicated. Not just because of technical stuff that they have to learn, but also it sometimes seems like software developers, don’t really know exactly what they’re doing.
For example, they have a really unstructured environment where they might use one of the hundreds of solutions. Basically, they’re trying several solutions and some of them don’t work, and some do work. Then they combine those together. I know that the software development industry is a kind of emerging industry. I mean, it’s still in its infancy perhaps. That’s what people say, and I agree.
I think that just my question is, do you think that software development will come to the point where basically people will start using one solution, or at least a series of solutions that they’ve already proven? They won’t be experimenting with other solutions. That hopefully will save time, will save effort, and also will save the development effort on their side. I’m just thinking, what’s the reason why software developers are keen on trying different solutions? If for example, there is one that is proven to be working and they would just use it and create the same software. Is it even possible to do it this way? What are your thoughts on this?
There’s multiple ways to look at this. We can say that they have this particular problem. It’s called “not invented here syndrome.”. Basically, some people just like to create their own stuff. Interestingly, people who are capable of creating their own stuff, are some of the best developers that you’re ever going to come across. Let’s say just for example, software is built in layers, right? At the very lowest layer you have, what’s called a device driver. On top of that, you have operating system Kernel. Then you have network stack, and then you have an application. By application you also have things like, Sei database [inaudible 00:00:03:39]. You have things like, [inaudible] and this is just in one single server. Not necessarily a server, it’s a computer.
You can have a network of computers that you build on top of, which is all comprised of multiple stacks. Some people like to go all the way from the bottom to top. They want to touch every single layer. Just keep in mind inside each one of these boxes, there are also multiple layers here. You’re going to come across developers like that. Any developers like that, they are really good. Because, to understand the whole complexity all the way down, this is a humongous effort. This is monumental, honestly. For most software developers to do so very smart guy.
I can draw some parallels with the business world. I’m just thinking that for people who don’t understand software development. But, I can easily translate it into business language. Imagine the business owner, they have to start with just a first check, or a first transaction, and first cash that they get. They have to build the business from there. Obviously, if you’re not involved into that first step process, it would be very difficult for you to actually design a strategy for a business. Because, you can design a strategy, but you don’t really understand what’s going on in the business itself. So, I understand the point.
Right. Now the reverse of a developer like that would be, a developer that only knows how to use things other people create. Only knows frameworks, libraries. Now, again, this is not necessarily good or bad. This is just the way it is. There are developers who, very much do not want to get involved in the creation of something that are reusable in multiple applications. They just want to create something for applications. So, there are definitely developers like that.
Now, what is very interesting. So again, this is just two different contrasts, right? But, what is very interesting isn’t whether or not which particular place you fall in, or along the spectrum where we fall in. What is very interesting is that, even if you want to just use frameworks and libraries, you still have to know how to use them.
For example, if I just give you a framework or library, given the fact that you are not a software developer yourself. You’re not going to have any understanding of how they use it, but you can learn it and you will take you some time to learn it. It might take you a year or something like that. But, let’s just say that another developer who also does not have the same knowledge of that particular framework. Now what’s going to happen here? That developer also had to learn it, but that developer is going to learn faster than you do. The difference being, that the other developer has a little bit more software development background. So, there’s some parallel for that person to draw in. They can leverage the existing knowledge to learn more.
But, no matter who it is, if it’s something that’s brand new, then another person needs to be able to learn it. I’m getting into some of the deeper weeds on technology, but I want to start translating into business speak for you. Imagine this, imagine that there’s an experienced business person and this person has run and created multiple enterprises from scratch. This person knows how to build businesses inside and out.
But, now this person now says, “okay, I know the true way of building businesses.”. This person is then, is going and spending time to preach about how to build businesses to others. Here’s a budding entrepreneur. Somebody who has some experiences in the working space maybe, but has never done and run a business before; and try to launch it from scratch. Let’s just say, this person takes a class from this other person, okay. From this is business person. So therefore this person, the experienced the wise master provided lots of knowledge to the budding entrepreneur. What do you think is going to happen? Do you think that this business, this budding entrepreneur, will run and operate his business the same way as this other business person; this experienced person?
Probably, not. Because, we are missing the value of experience. Most of this knowledge will come from your own experience. Unless you have had that experience, otherwise it would be almost impossible for you to catch up, because we are talking about different levels here.
At the best, the budding entrepreneur can do imitation. He can try to emulate what this experienced wise one has done. In the process of emulating, this entrepreneur might find something else works other a better for him. Just because of the way they think is a little differently. Maybe instead of A, then B, then C; this person likes to do A and B at the same time. Then, they’re going to go to D first, before he goes to C. Some of the things that when we think structure logically, for another person; now that person might need to take a longer route to get there. Just because the understanding is not there, but also the way of doing things is not going to be there. I’m pointing this as an example to you, as saying that there’s no difference between how businesses are run, versus how softwares are built. It completely depends on the person involved, because how it’s done speaks to the persons knowledge; current level of knowledge, current level of understanding, current ways of learning, current ways of putting things together, current ways of approaching problems.
All of these are going to be different. Even if they use the same sort of system. Let’s just say that both of them buy a franchise from McDonald’s. This is going to be about as cookie-cutter as it gets. Just because they all buy the same franchise from McDonald’s, it doesn’t mean that they’re going to run them exactly the same way. Even though it comes with the instruction manual saying, you should do this, you should do that; so on and so forth. The wise business person might know that they’re putting in a bit more effort into customer service. While the budding entrepreneur might want to cut corners, because he’s more concerned about getting to the bottom line first, and so on. After a while, their approach is going to start at diverged, and their results are going to start to diverged.
Then when a new batch of entrepreneurs come through, this whole lesson has to get repeated over again. Even if this lesson is distilled in the book, distilled in an instruction manual; it doesn’t mean that the next batch of people that’s coming through will not need to learn it for themselves. The Sanford developers, all developers, have to learn how to write code from the very basic level. From just how do you assign the variable? How do you do a variable plus one, a variable minus one? From there to build up higher level abstractions. Throughout that whole learning process, people are going to end up with their own ways of doing things. They’re going to end up finding that the framework, the libraries that they have, doesn’t necessarily do what they think. When it doesn’t necessarily do what they that they think, they will want to think a different approach. They want to have an approach that solves the problem their way.