Bas Moussa is the Chief Architect at Nuvole Computing LLC, a cloud consulting firm in San Francisco. He designed the firm’s reference architecture that implements cloud architecture in a way that fulfills the promises of cloud computing with maximum portability of components. He has been programming since he was 8 and has worked in Internet software development and operations since 1996. He was in Uganda this year to chill; I had a chat with him and sneaked in some serious questions on what he does.
You’ve heard the saying that the early bird catches the worm. Do you agree?
*hesitates* <Loading screen shows>
Wouldn’t the worm have to be early to be caught?
The assumption is that the worms are early; earlier than any of us and the first one there gets it. I would say it is important to figure out if the worm is worth catching. Some people want to sleep-in and it’s more important that they sleep-in than catch the worm. Other people REALLY want the worm so they go get it.
And if I don’t like worms, then why would I get up early?
‘Cloud’ is a buzz word these days. “I had my coffee in the cloud this morning”, “The cloud should make it rain”, “My house is in the cloud,” what does the word mean in your context?
Most generally, it means the black-boxing of things that used to be very messy. There are a number of ways of talking about it but the example I try and give a lot of lay men (stares pointedly at interviewer) is that of a Word Processor. That’s a product you buy, you put it on your computer and it doesn’t go away. As long as your computer works, it works. If your computer breaks down, you are in trouble. You have to go get another computer, download the software again and then set it up.
If you make that cloudy, you remove the software from the computer so you no longer have to download it. You just access it on some set of servers in the ‘cloud’ and it takes care of everything for you. So when you are offering a service, it can be very machine-oriented, very non-cloudy but if you offer your software as a service, then that is the cloud, in one sphere of things.
Ok. Is that the one you deal with?
My business [Ed: Nuvole Computing] caters for anybody who wants to design software that operates like that; software that you don’t download but that you provide as a service. In the old model, the resources required to run 100 copies of a Word Processor are 100 different machines. When you are doing it as a service, all of those machines are now on you, the service provider’s, machines. That presents particular difficulties. You have to stay up all the time. People can’t have a Word Processor going down. So yeah, we specialize in design of software as a service.
In the old model, the resources required to run 100 copies of a Word Processor are 100 different machines. When you are doing it (in the cloud) as a service, all of those machines are now on you, the service provider’s, machines.
What’s the biggest challenge you run into doing this?
Far and away the most challenging thing I run into, not just once but repeatedly, is getting the client to believe in the model. There are two types of clients; one kind comes to me and says, “We have an idea. We have a program, it’s mobilized and we want to do this but we want to do it right”. So I sit down, design it with them, show them how to do it, they have a go at it and we make the thing right from the start. That’s always a wonderful, rewarding experience.
But very often, people with enterprise products, software that they designed for download, the kind that follows the old model, say, “I want to make this a service”. So, they have a product that’s already making a lot of money, they are looking toward the future and they want to change but we don’t have the luxury of imposing architectural constraints on them. So there’s a big, not a mean fight, but a struggle. On one side they want to maintain what works and makes money and on the other side, we want to take advantage of everything that this cloud offers. You need to virtualize everything. You have to change the way you do things. Before it makes money though, it is a very difficult argument to make. So we run into that and what ends up happening is we meet somewhere in-between. We make certain aspects of it work in the cloud and others we maintain as before. It’s difficult but it’s a great first step. Once they see it working, their eyes light up.
Given that challenge, do you ever have to carry boxing gloves to meetings?
Never. These are clients; they always win. There’s no fighting with clients. <Interviewer expresses his disappointment>
Have there been any heavy technical challenges?
There is dealing with those elements that cannot be made stateless. Certain clients have come with the old model relational databases, like MySQL and they want to make that internationally replicated. I simply say no to that. I don’t know how to do that and I would question those who say they can do it. It doesn’t work very well, that much I know. So that’s one of those architectural changes.
Certain clients have come with the old model relational databases, like MySQL and they want to make that internationally replicated. I simply say no to that.
If you want to do this, you are going to have to change the back-end database which is a HUGE deal. That affects everything. What I’ve found is that a lot of people in that circumstance are abusing MySQL. They don’t need all of that power. They just need a subset that does a very specific thing and there are many tools out there: from the NoSQL databases to a simple key-value store, you can even leverage caches that way. Yeah, but technically speaking that’s a huge challenge and one that I cannot meet
If there is a startup out there planning to do stuff right, at a global level, from the get-go, what do you have to say to them?
Most generally, I would say whenever possible, use Open Source software because the quality can be very high. If it doesn’t meet your requirements, then certainly go find and pay for what you need but very often, there’s no need. The quality of software out there is tremendous so start there.
Most generally, I would say whenever possible, use Open Source software because the quality can be very high.
Number two, try not to rely on special hardware. Or very fast connections. Design your product so that it can work in any environment, even the cheapest, slowest environment. That way you can scale endlessly and you can work in any context.
What do you have to say to someone with his or her hopes set on going to Silicon Valley someday?
Silicon Valley is very much, a little less so these days, but more so than most places in the US and probably the world, a meritocracy. If you come and you bring something to the table that nobody else has brought, somebody will listen to you. You can usually find a way in. The organizations are usually flat.
Again, there’s always who you know and so on and so forth but you can make great headway. I would say from all the way over here, it is so far away, use the online forums. Make a presence for yourself online so that anyone who wants to can see exactly what you are up-to and what your context is. One great thing, if you are going for technical stuff, there are some websites out there like stackexchange. Everybody uses it and if you get on there and make a presence for yourself and you get listed as a guru, it doesn’t matter where you are from. That’s like “Oh, that guy knows a lot and his peers approve.” If I were looking at that, that would be tremendously valuable.
And of course make connections. Reach out wherever appropriate, make those connections and run things by people. They are generally pretty nice.
What’s been your impression of the developer here?
I’ve essentially only had one day of interaction with Developers here. The projects seem heavily SMS-oriented whereas in the States we don’t have any of that. We have SMS but we barely use it. We use it just for “Hi, I’m downstairs”, that sorta thing. We were late, even Europe was years ahead of us-we started using it late. In the US, the web has taken hold as the main interface for the client-server architecture of the web at large so I think that transition introduces a bit more complexity but from what I saw, it’s the same stuff.
One thing I’d hope and wish for tech workers here and that I’d love to help in any way possible is for them to skip a lot of the mistakes that we made and just jump straight into the other stuff. For example using Mongo instead of MySQL would free you tremendously in the future when you have to grow and it would build the expertise that a lot of people now in the US are scrambling to learn. It is still a rare skill but there’s no reason it needs to be.
…skip a lot of the mistakes that we made and just jump straight into the other stuff. For example using Mongo instead of MySQL would free you tremendously in the future when you have to grow…
I did get the feel that the motivation level was tremendous; that was really great. Geeks unite all over the world!
What’s the most common challenge you find that people run into?
A few things. Performance-wise, if people grow quickly, that’s always difficult. When that happens, almost always, and this is going back 20 years, the relational database, just the database in general, is the choke point. Not only that, very often their database is overloaded and they don’t know what to do. Sharding is the best answer or just build a bigger DB box which is what most people do and it ends up costing a lot of money.
At first, you can have everything running on one machine and it is fine but if things go down then you move to a virtualized setup. Then if things go down more then you have to start using HA; more boxes for each layer and if you do not write your stuff correctly or at least leave room to switch quickly you can be locked into some very painful stuff. So, one example is each layer, for example the front-end, display layer or the API layer, you want those layers to be stateless. This is very important and it is something that if you need you’d have to go back to the beginning to change
What’s the future of cloud computing? Will we carry the cloud in our minds? Will our brains be computers and to establish a TCP connection with someone else you rub noses?
I would love it if we’d rub our noses to establish a TCP connection- that would be great. Short of that, I do see the future as entirely virtualized. Dealing with hardware and machines and all of that is still done at some level but as developers and business people and people trying to put out products, we should not be thinking about that at all. I think in future, everything is going to be entirely service-oriented. Everything is going to be an API. Everything can talk to everything and your entire infrastructure should be code. To the extent it’s not, it should be a simple trade that somebody without a lot of training can do. Red light goes bad on a machine, replace it. Behind the scenes, the virtualization people write everything in such a way that it can shift a virtual machine from one machine to another just like we write our applications.
I do see the future as entirely virtualized.
Take the abstractions that have been happening over the course of computer history; we started out writing very basic languages –C and managing memory and all that stuff and now we are at the point where we aren’t doing that. There are virtual machines and there are scripting languages and these are very high level things and they are just getting higher. Now we are at the point where your entire infrastructure can be code- including the machines. It is one of those things where every layer of abstraction imposes constraints and the only question is are those constraints worth the effort? There are always people who cling and say, “No it’s not worth it. We need to do things this way” but it is almost always not the case so always look at the next layer of abstraction to make things easier and easier and hopefully computers work better and better because right now, you almost need to work in the industry to make a computer function and that shouldn’t be the case.