Have you ever tried explaining to your parents what you do as a software developer? It’s pretty hard. My parents are mostly not that interested. Or perhaps they are, only a little apprehensive about something that they don’t quite understand. “He’s in computers”, they say to their friends. Today, as computers slightly outnumber the ants, that’s like saying “He’s in business”, just a tad too general.
Now, of course I don’t want my parents going around saying meaningless things; I try to be a good son. So I try to explain what I do whenever I get a chance. Usually, however, it doesn’t work that well. Their eyes go blank after a few sentences when something I say doesn’t quite make sense to them.
A few weeks ago something magical happened, though. I explained (again) what I did to my mother. She listened and when we finished she said something that made me think I had actually gotten through to her. So, if you’re inclined to give it a try, here’s what I said and her responses:
Joakim: Mom, it’s really not that difficult. Think of it this way: I work at a factory.
Mother [worried look]: You do!?
Joakim: Yeah, in a way. Well, of course it’s a nice office, and no, it’s not dirty or oily, but think of it as a clean factory consisting of only electrical machines. What’s cool about this factory is that it is 100% automated. Can you imagine a factory that works completely on its own?
Mother: Like… with robots, you mean?
Joakim: Yes! But these robots are only programs running in computers. They are not physical. But just like a robot they take some input stuff and change it into something else.
Mother: Mm hm.
Joakim: And it gets better. This factory is strange for other reasons. First of all, it can only produce one type of product, or variations of it. This is because we create unique products, so there is really no need to be able to build other stuff. Secondly, it can only produce one thing at a time. Typically it makes that thing and then it stops. This is not a problem, though, because we have copiers that can create an unlimited amount of exact copies of the final product if we like. Thirdly, and this probably sounds most strange to you, the factory itself is built anew every time, for every team, project and product.
Mother: That sounds expensive.
Joakim: Well, there are common setups, with tools and components, of course, that are used to make it less time-consuming. We do try to make it look like some project we have done before to be able to reuse stuff, but in general people assemble a new factory for each project because each project is slightly unique.
Mother: So, there are no humans in this factory? Where are you then?
Joakim: Good question! Yes there are (and I am one of them). But the humans don’t work in the factory, producing stuff, we work with the factory or the stuff coming into it. So, metaphorically you could say we walk around in the factory, adjusting stuff here and there. Maybe humming a little and scratching our heads. Saying things like “Hm, this used to work yesterday and I haven’t done anything here…”. That makes us look more like engineers than factory workers, I guess.
Most of our time, though is devoted to one thing: Feeding the machines their raw material. The raw material we work in is text. The text consists of instructions telling the machines how to build the product. They are incredibly detailed descriptions of the product. Like a recipe, but much more exact. Think of how you would write a baking recipe if a computer would be able to make the cake. Every movement, action and thing has to be in there.
Mother: How tiresome.
Joakim: Yes, as you can imagine, mother, these instructions get very complicated. In fact, they are so complicated that it quickly grows impossible for any single person to keep everything in their head. So, we work in teams, trying to help each other remember. We also use tools like models, documents, test rigs, sticky notes, and other stuff to better understand and communicate with each other.
I think this is the single most important distinction to remember. Although there is a factory, the work we do must not be confused with factory work. Many people confuse working in the factory with creating the factory and using it as a base for creating innovative products. The most difficult part in our work is coming up with the description of the product, which is very far from factory work. It is much more creative, like team poetry, if there ever was such a thing.
Mother: Well, I do like poetry. But why is it so complicated if it’s just text?
Joakim: Because the text describes both a structure and a behavior. It has to fit together perfectly and it has to be exactly right. And there are an infinite amount of possible solutions.
Mother: I didn’t quite get that.
Joakim: Sorry, but I hope you got the gist of it. Here’s how the factory runs: Typically, when the instructions seem right, the engineers put it into the factory and start the building process. This process only takes 10 minutes or less, ideally, so it is indeed a wonderfully efficient factory. If all goes well the finished product pops out on the other side.
Now and then it happens that somebody makes an error. Not me, of course, but others…
Mother [looking proud]: Of course. My boy…
Joakim: Any error, however small, makes the factory come to a grinding halt. This is no biggie, since we can easily see what happened, but it’s annoying. Therefore, the sinner is typically subjected to some public ridicule to make him or her more careful next time, but in our hearts we know it’s part of the job to fail. Humans are simply not as exact as computers.
Mother: So how often do you run this building process? Once a month?
Joakim: Oh no, many times each day. And we don’t perfect the factory first. We start with a very rudimentary version and gradually, during the project, we refine it into something quite sophisticated.
Mother: A rudimentary factory!?
Joakim: Quite. As I said, the factory is built from scratch so typically it starts out in a very primitive form. We put in a few machines, write a few instructions to it and kick it off. As I am sure you understand, what comes out is not very advanced. If we were developing a car, there would only be one single crooked screw at this point.
Mother: I am getting tired now, but it sounds very expensive to build a car that way.
Joakim: Ah, but we’re not building cars, are we? The beauty of this is that we have an advantage that car makers don’t have. We can run the factory as many times as we like – and it’s virtually free; all it costs a little bit of power. So, it make more sense to run the factory again and again, carefully observing the outcome, instead of perfecting the instructions before trying. If the product is faulty, we correct it. If it is good, but too simple, we add the next feature. We add feature to feature, starting from the crooked screw, until we have a complete car coming out. When adding stuff we must always look at the whole as well, otherwise we will end up with something that looks like that car Homer designed.
Mother: The ancient greeks did not have cars, don’t be silly. And I thought you said you weren’t making cars?
Joakim: Ha ha, touché. In a way, this way of working looks a little like that of the scientist. We make experiments, observe the outcome, adjust the experiment and try again. Working that way, from a very primitive start, a more sophisticated product can gradually emerge.
Mother: I think I see. But how do you know what to build?
Joakim: Oh. You’ve just identified one of the most vexing problems in our line of work. Most of our customers have no clue about what they really need (even though they make think or pretend that they do). How do you tell a customer they actually have no clue without insulting them?
Mother: Why ask? Most of my patients had no clue. (Author’s remark: My mother used to be a dentist.)
Joakim: Yes, but they are not patients. They are typically managers or entrepreneurs with staff or customers that will be using the product. They are paying a lot of money and rightly expect good service and products. The best we can do at the moment is one part understanding how the product will be used and by whom, and one part showing the product as a work-in-progress and correcting faulty assumptions as we go along.
Mother: But there is still one thing I don’t understand. What is it really that pops out from your factories?
Joakim: Well, as I said, they all produce different products, but more generally speaking, they produce other machines.
Mother: They do?
Joakim: Yes, but this is not as strange as it sounds, ma. Think of a car factory. It both contains machines and makes machines (cars), right? Same thing, only our machines are built from bits, 1s and 0s, stringed together. Now, a car doesn’t work without roads, traffic lights, and a whole environment surrounding it. The same thing can be said for our product. You have to put it into its environment (a computer) and crank the starting lever just right to start it. Then you can use it for your pleasure or utility, just like driving the car.
So that’s what I do, ma. Do you see?
Mother: Son, you have a strange job.