Describing the business model canvas with SysML
I've been playing around with the idea that you could specify systems that encompass human...
I've been playing around with the idea that you could specify systems that encompass human interaction as well as traditional systems (socio-technical systems) with SysML. It seems like you could do just about anything else with it, so why not.
A way to map out a business structure while in the search mode of entrepreneurship is to use something called a business model canvas. The idea is that you give your best guess to what your business would look like and/or do based on a variety of characteristics. This could be customer segmentation, revenue streams, to even key partnerships.
Once you have it all figured out, you go out and test it. Will customers buy your product using this delivery channel at that price point? If not, then you go back to your business model and try again. This cycle continues until you find a good fit, at which point the organization graduates from a start up to a business.
package BusinessModels{
item def BusinessModelCanvas{
item def CanvasAttribute{
attribute Outline;
attribute Reasoning;
}
}
item <'0.0.1'> TestBusiness1 : BusinessModelCanvas{
item CustomerSegments : CanvasAttribute{
:> Outline = "Our test customer segments are people of gender, age, and x income";
:> Reasoning = "This is where you put your reasoning behind why you have an outline or changed it";
}
}
item <'0.0.2'> TestBusiness2 : BusinessModelCanvas {
item CustomerSegments : CanvasAttribute{
:> Outline = TestBusiness1::CustomerSegments::Outline;
:> Reasoning = TestBusiness1::CustomerSegments::Reasoning;
}
}
}
The package helps create a context which you can import from elsewhere. We define our conceptual models using the 'def' keyword. As you can see we define a 'BusinessModelCanvas' as well as a 'CanvasAttribute'. I don't just want to know what you think regarding the aspect of your business, but why. So, I've added an attribute called 'Reasoning' along with the 'Outline'.
We now realize our business model canvas with our first 'item', we use the short name, "<'0.0.1'>", to use basic numbering to keep track of where we are at. Then we have our 'TestBusiness1' which is the long name of the item and it realizes the more conceptual item 'BusinessModelCanvas'. We then can break it down into each aspect of our business that we want to describe, for example 'CustomerSegments'. The ':>' here just means that we are using the same attribute defined in the 'CanvasAttribute'.
Let's say that "<'0.0.1'>" was a wash because of some aspect of the business model canvas didn't match up correctly with reality. Then we can create another item of the same kind, and we can reference the values of the previous business that we want to use using the '::' to specify which subpart we are talking about. Like in 'TestBusiness1::CustomerSegments::Outline'.
If we know we are only changing a handful of attributes we can just specify the changes, instead of constantly copying over the same material from the previous version.
Something like this could also be used for the scientific method. In which you document the various stages of the method, and then the iterations that occur if the first attempt is unsuccessful. Then again I suppose this could be used for just about anything that is iterative, and has some data model associated with it. I could see this being applied to contract negotiations, or even the evolution of a model/theory for example. Which also gives a unique way to view historical events as a transition between objects that we care about.
Ultimately SysML is just a way to structure and convey our thinking, and the same can be done using natural language or even a different modeling language someday.