The thing about banks is there is a lot of centralized power because it is a centralized industry. Microservices and Agile are part of this decentralized movement to split things out. That is important to empower teams and allow them to make mistakes. But banking is a cultural control thing.
I talked to one bank that just got a new CTO who came in and said we're going to do everything microservices. We're going to write all of our applications in Node.js, we're going to do APIs everywhere. That just isn't going to work. You really need to focus on why you want to do these things and what are the goals you want to accomplish. I think an iterative approach is as much a part of this whole microservices movement as are small services.
I noticed that when you talk about microservices you bring up the old Ford Model T automobile. What is that all about?
In the technology world we always feel like we're on the cutting edge. But if you take a broad view, software engineering as a discipline is pretty young. And we spend so much time trying to solve requirements that we spend not enough time thinking about the craft of how we build and architect software. So I was likening where we are in the software engineering evolution with where the transportation industry was 100 years ago.
I was comparing the monolithic systems to trains, where there are a lot of dependencies and you have to wait for other people to get on the train. You've got to lay down a lot of expensive infrastructure. And then cars came along and changed that. You can have your own car, you can drive where you want to go and you're not dependent on anyone else. That's like microservices. Then with Docker you've got a container technology that is like an assembly line for software.
So we're kind of there, but there is a lot more we have to do in the software engineering field to mature in the way that the automotive industry matured 100 years ago.
I think it's good to keep people humble and thinking about the craft. When I get the opportunity to drop down and do code myself, I'm always amazed at how many cumbersome, manual steps are still required to do things—like command line stuff and compiling. It would be nice if things were a lot more out of the box.
So do you see the world moving anywhere closer to the "software factory" capability we used to hear about?
I think that if we as an industry are to scale software to meet growing requirements of the internet of things, we need to scale out the software engineering job market so we can be able to handle this. Right now there's a lot of power with developers. People that can code get to call a lot of shots. It's a very exclusive community in some respects. If we can make things more accessible for software engineering overall, it will benefit the economy because not only will we be creating all these new things that will be helpful in a digital economy, but we also will be creating jobs.
So are we on a trajectory to make that software factory? Not necessarily, because the coders themselves are quite comfortable writing that code. They like to have knowledge that nobody else has, but I think it's going to take a lot of force and energy from leaders in the industry to push down a path where we are more accessible and we do create software factories.
What do you mean by accessible? More citizen developers?
Yes, more citizen developers, but if we look across a cross-section of society there's a whole lot of creativity. Right now, the software developer gets stereotyped as this person who thinks in algorithms. You shouldn't necessarily have to think in algorithms to be able to contribute to developing software. If you're a creator, if you're a maker, you should be able to be given tools that don't require you to go in and start doing algorithmic development.