You know when you wake up at 2 o’clock in the morning with an idea? And you know you should be sleeping, but you just can’t shake it off? And your brain just kicks off on overdrive and you go deeper and deeper in the rabbit hole? Well, this happens to me a lot more than it should…

Yesterday, I posted a blog entry about rebooting the software factory (SF). It’s an idea I’ve had for a while. The kind of idea that is: “I should do this,” but you haven’t really thought it through.

So yesterday, I posted about rebooting, and it triggered one of those 2am ideas: Where should I start? In the post, I talked about new model types, but what should be the first model type that I build? And then I just went down the rabbit hole…

You know when you have an idea? And the idea is recursive? And you keep going down deeper and deeper into the recursion loop?

Let’s have an Inception moment and discuss the first model type I think I should be starting with: The model type.

## Inception moment

I’ve been using the term model definition to describe model types. It could also be called a schema, a data structure, a class hierarchy, a data model, or many other names. But I like model definition and have been using it for years.

I called the first model definition I created for the software factory the Component Model. It provided a language that allowed me to express what a component was.

When I first created the software factory, I wrote the Component Model as a set of classes backed by a group of database tables. Then I started writing models.

As you can guess, I quickly found the Component Model limiting and constraining. And making modifications to it was prohibitively difficult. Can you guess what I did? I used the Component Model to model a new version of the Component Model. Then used, the software factory to generate the code for the new model. I actually did that twice over the years.

As stated in my previous post about the SF reboot, the Component Model has become this massive monolith of a data structure. Maybe I should use the Component Model to model a new model definition model?

Then with a new model definition model, I could create all the other model definitions I need to develop more models. Simple, right?

## Master Model Definition

This is the kind of stuff I find fascinating about working with the software factory. The recursive way you use the tool to generate the next version of itself…

I reserve the right to change my mind. But, I think starting by creating a master model definition is the perfect starting point. What do you think?

Can I go back to sleep now?