As I was writing this series, I was interviewed by Daniel Frey for his podcast. We’ve lost the first recording session due to a technical malfunction, the session where he asked me what I think is the difference between a Software Engineer and a Software Developer. The beauty of the verb thinking, is that even if I think of something, it does not make it 100% true or real than any other thought or anyone else’s thought. So I do allow myself to think, or I better love the term ponder.
For years I’ve been pondering what is the difference between the two. According to this series, one of the differences is the skill and action of modeling. As an Industrial Engineer, I went through a 12 week academic course of 4 weekly hours on nothing but modeling. Guy and I met during our studies, and later we became best friends (with Itay also) and even worked more than once together. At Silo, I was his manager.
Although we both went through the very same course and although we had the very same common language of modeling, there was one big difference between the two of us. We both were modeling but I was modeling before I started coding and he was modeling while he was coding. Sometimes I spent way too much time on modeling, and sometimes he rushed to coding and ended up with an inefficient model. I gave him hell over that, not necessarily because modeling-first is more beneficial (is it?), but because I thought it was so. And I thought he should act like me because I know better. I’m sorry for that.
Even though we were both modelers, were we always modeling? Of course not! Just like The Avengers are not assembled to stop a liquor store robbery, only to stop Thanos. Modeling each and every little Change is non-beneficial. But when we created an entire new application from scratch, and we did so tens of times, we modeled. Each at his own time, and it is still arguable which is better. Probably a mixture of both.
So, if modeling is a skill and an action of an Engineer, is he an Engineer when he resolves something that does not need modeling such as a small bug? It is a problem that does not require either the skill or the action of modeling, so it does not require a Software Engineer to solve that problem. At that very moment, if an Engineer is the one to resolve it he was not being an engineer. Presuming it is not a false dichotomy caused by our binary thinking minds, that means that at that very moment he was a Developer. Although his title says otherwise.
Between Guy and I, the question was always about when and how to model. We did not consider the option of not modeling, as it was not available to us as modelers. Throughout this series we saw why correct modeling has the potential to prevent inefficiencies, by slowing down the erosive evolutionary processes. Incorrect modeling does the opposite. But what about not modeling at all?
Before Silo, I worked for a few months at Gartner Innovation Center (2017). On my second day, I noticed something was missing. I stood before a room full of Software Engineers, there wasn’t one who hadn’t studied it and asked “People! where is the whiteboard?!”. One of the juniors, I don’t remember who it was, asked what a whiteboard was for. “If you want to be an Engineer, you need a whiteboard. Otherwise, you are just a code monkey”. I wouldn’t say that today as I’m not a showoff as I used to be, but there still is some truth to it.
Now, let’s say someone is not working on a bug, but creating a new application. That same someone has a degree in molecular biology engineering, and has gone through a coding bootcamp. In order to resolve the problem, he stands up and goes to the whiteboard and starts modeling. Although he hasn’t studied it and he hasn’t learned how to do that in the bootcamp, he performs the act of modeling. At that very moment he is a Software Engineer, because that’s what they do. Would he be better at it than someone who studied a 12 week academic course? Maybe, maybe not.
But what about someone who thinks that modeling is an entire waste of time? Or someone who doesn’t know how to do so at all? Or someone who is not aware that the act of modeling exists?! If you do not model at all, you are never acting as a software engineer thus you never are one.
The result would be left to coincidence, and may be left unnoticed. The application would not go through the process of modeling, but it would have a model. Relationships between entities always exist, it’s only a question what those relationships are and if we are aware of them. The result would be having a non-model.
Sometimes it would be good enough, that would fit a very simple short living application. Sometimes it would be a mess of a non-model, and we know the results of it for complicated or long-living applications. It speeds up their evolutionary processes, specifically towards a Monolith. That is the outcome of an incorrect model as time passes.
So, who are you?