Dear family: a letter about software

I’m starting a new job on Monday as an engineer at Pivotal Software. I’m really excited about it! I’ll be working on their Cloud Foundry project, which is an open source PaaS that facilitates rapid deployment and scaling of apps, making it easier to ….. …. I already lost you, didn’t I?

Okay, I’m going to do my best to give a jargon-free explanation of the job. It’ll take (quite) a few more words, but I think I can do it without going full Up Goer Five on you. I think I can even make it interesting. Let’s start with something easier to get a handle on than my new job: my old job!

Up until a couple weeks ago I was at Case Commons, building software for child protective services. That’s simple enough. You have an idea of who uses that and what benefit it provides. You also know that unlike software in the ‘90s — which we bought from a store in a physical box so that we could use a physical CD to install it on our physical computer or insert into our physical drive every time we wanted to use it — the software that’s built now tends to be delivered in a different way.

Sometimes it’s downloaded from a site, sometimes it’s accessed online, and sometimes it’s a mix of both to allow for online and offline use. The software Case Commons builds is the second type. Instead of being installed individually on each caseworker’s computer, it’s shared remotely by the software provider and used entirely online. When software is distributed this way, it is called software-as-a-service, or SaaS.

Something you might not have known is that just because those physical requirements went away for the end user does not mean modern software is lacking a physical component.

The physical infrastructure required to host a web app is substantial.

Whenever you access an online application, your browser (Chrome, Firefox, etc.) is sending a request to another computer for information. That computer is called a server, and it’s comprised of hardware and software specially suited to delivering your web experience. At its most basic level, a server needs to be able to receive requests for information, and respond with either a) the information requested, or b) an error.

The companies building the sites you visit online don’t necessarily own and maintain the servers at the other end. They may pay other companies to host their website on their servers. Payment for infrastructure is often called infrastructure-as-a-service, or IaaS. This isn’t what I’m going to be working on either (sorry, still getting there), but we need to understand it a little better before we tackle what I’ll be doing come Monday…

Now, consider a sizable web app. There might be thousands of people making small requests all at once, or fewer people making larger requests, or a combination of both. The users could be anywhere in the world but the servers we’ve discussed so far are physical computers in a particular location with constraints on the number of users they can support and the speed at which they can deliver what’s requested. You can see how physical hardware quickly becomes a pain-point for growing companies.

Which brings us to the cloud. For this part, please forget what you think you know about “the cloud.” Just remember what you know about how your computer connects with another computer to retrieve the internet for you.

When people refer to the cloud they are talking about the allocation of computing resources from a pool of available machines as opposed to a specific machine.

It doesn’t matter whether the computer is used for storage or serving websites. It doesn’t matter if the app is used by millions of people or just you. It doesn’t mean “things that aren’t saved on your own computer” and it definitely doesn’t matter if there’s a cloud in the logo. It means when you load an app, the server answering your request isn’t pre-determined.

Your request will instead be sent via specialized router to one of many potential servers. Think of this like calling customer support. You call one number, and an automated system determines which person to connect your call to depending upon factors like where you are, where they are, whether they’re available, and which can best answer your particular question.

With cloud computing we improve our web apps by having more servers available to receive and respond to our requests. Now before we get to my new job, there’s one more tiny detail I have to mention about this process: the servers on the other end of the line might be physical machines like those we’ve already discussed...but they might not be.

Coming up next: virtualize all the things!