During my professional life, I often have to explain my point of view of software development responsibilities. When, who has and where to develop software? Does a factory or manufacturer have to develop its own software? Is there not a standard software already around which is more expensive, but already present and a responsible software vendor is out there in case of bugs? Do I need a own software development branch? Could an external system house or software developer develop my specific solutions?
To make this tough question even more difficult, let me give you the straight answer: “It depends…!” 🙂
Let me explain my own small model about the responsibility layers within a virtual high tech factory. These layers can be identified within every organization with some differences, but the principles stay the same.
In reference to the OSI model, I created a small model for explaining these issues. There are roughly five or six layers within the IT landscape within a factory.
The Layers of Responsibility
Layer 1: Hardware Layer
This layer is the typical machine which is bought from a vendor. The machine is put and installed in the factory and does its job. The responsibility is clear: The machine vendor is responsible for its machine to work. The own facility crew has to assure that all media are available, but the machine is under vendor’s responsibility.
Layer 2: Data Collection/ Measurement Layer
Within this layer, data is collected or measured for later usage in layers above. A lot of machines have standard interfaces for presenting information outside, but some information is still not visible per default and can only be parsed out of log files or got from other sources.
As long as the data comes from standard interfaces from the machine, the machine vendor is fully responsible to get the interface work as documented. As soon as there is no standard way the software for getting these information must be customized.
Layer 3: Data Preconditioning and Conversion
In this layer, data coming from layer 2 is preconditioned and converted into formats and data which is more suitable for layers above. Every company, factory or organization needs other data and with another grade of detail. To reduce the amount of data, uninteresting data has to be eliminated and the grade of detail can be reduced by statistical summarizing. This layer is very tightly coupled with layer 2.
Some machines have the possibility to precondition data, but in most cases the amount and the grade of detail for data are to be customized. This layer is under full responsibility of the customer and the customer has to think about ways to do this customization.
Layer 4: Data Storage
Collected data needs to be stored for later use in a flexible and reliable way. This storage should be done in standard tools like databases and file servers. The responsibility is at the vendors of this storage systems. It would be strange if a non-software company would develop its own database systems and file servers.
Layer 5: Calculation
The data stored should now be used meaningfully. To achieve these parameters and numbers have to be calculated to give the appropriate information. Due to a customized table space or server landscape where the data is stored and a customized definition of parameters and measurement values those calculations have to be customized, too. The locations of data and the detailed definitions of parameters vary from organizations, factories and companies to others. This layer is to be customized in responsibility of the own company.
Layer 6: Presentation
The presentation could and should be done in standard software. It does not matter in first place whether it is within an office suite or with dedicated reporting tools. The views within these tools have to be customized and this should be part of layer 5. The view itself is done with standard software and responsible is therefore the vendor of the used software.
As shown above, a lot of software is around to solve standard tasks like storage and presentation. The machine vendors should ship interfaces to get all interesting data out of the machines. Everything else could and should be customized due to varying forms of server landscapes, database schemes and grades of details. Every company, factory or organization has its own ideas on how to collect data and which grade of detail and what amount.
Therefore, in layers 2, 3 and 5, customization is needed and should be done in responsibility to the company using the software. There is no other way around. Machine vendors do not know the details of their customers and can not meet all demands. They can only create easy to use, reliable and well documented interfaces to get all important information out of the machine. Everything else has to be customized.
The question “Who should do the development?” is more difficult to answer. My answer would be: “If you can effort it, do it on your own. Hire at least two people who can program the software for the layers and be happy about the knwoledge and capability to make changes on your own.”
If your company, factory or organization is large enough to keep two or more programmers busy the whole time, you should hire them on your own and make the software on your own:
- External software developers are more expensive due to the extra money they need for offices and administration.
- In case of bugs, your own programmers know your company better and can fix the bugs easily.
- In situations of change, your own people can make the needed changes. That’s faster and cheaper. I do not only speak about changing a company logo after a merger, but about changing a whole product lines or factories to new machines or products.
There are some obvious parts within an IT landscape where customization is needed and should be done: Data collection, measurement, pre-condition, conversation and final calculation. If it’s affordable, one should do it on its own to get the best benefit out of it and to be flexible in situations of change.