On Wednesday, Thursday and Friday, depending on our regional location, we attended the Strategic Architects Forum presented by Beat and Ingo … two good speakers with a strong and ‘controversial’ message. I was really drawn into some discussions after the event and was taken aback by some of the comments raised by some of the attendees and realized how futile they can be when people are not open to new ideas... ? I will not use Beat’s restaurant or aerospace facility examples, because while these are entertaining they have resulted in the heated and in my humble opinion completely unnecessary debates (PS: We do believe in healthy debates.)
To set the scene, I would like to define an initial glossary to define my understanding of the various information technology lingo terms that will be countered herein. I have gotten myself into a lot of trouble by stating that information technology is confusing the rest of the industry with three-lettered-acronyms (TLAs), fancy terminology and often repacking existing technology with a new terminology … frustrating even the more experienced who waste valuable research time, only to realize that there is a new pajama, but same content. Those that have experienced the OLE versus COM versus ActiveX eras and associated confusion, will understand my personal frustration and dissatisfaction with the “re-pajama’fication” concept.
Term |
Definition |
Architecture |
A design or structure of a computer system, spanning hardware and software. |
Class |
A set of related objects, defining relationships between functionality and data as well as behaviour. |
Model |
An high level abstraction or set of rules that is context appropriate. |
Code |
A set of computer instructions. |
Component |
A unit of functionality, typically a subset of a subsystem. |
Copy-Paste |
A process of copying existing code and reusing it in new code. |
Factory |
A building in which goods are manufactured. |
Framework |
A structure for supporting something else. |
Generators |
A program that produces specific programs based on definitions. |
Library |
A set of similar things. |
Software |
A set of symbolic languages that control the functioning of hardware. |
Solution |
A method or process of solving a problem. |
Tool |
A device or program used to perform work. |
Artifact |
An object produced or shaped. |
Information Technology |
The development, installation, implementation and maintenance of computer systems and solutions. |
I will attempt to address some of the typical comments which are being raised which concern me ... begin quote:"
-
Component based solutions are far better than software factories.
-
Software factories are “pie-in-the-sky” concepts.
-
Solutions are all about business, not technology. Our success lies in delivering business solutions not technology.
-
Code generators add no value to the overall solution.
… end quote.
An information technology system can be seen as a set of artifacts that as one … Borg assimilation here we go … achieves some specific outcome, such as proving a technological concept, addressing a business need or controlling a device of some sort … there are too many examples to even try and list a few. While we know of two types of systems, namely the commercially off the shelve packages (also known as COTS in the IT world) and the custom information system, we will focus on the latter which involves the paying client, the user of the system and the developers of the system.
I will not bore everyone with the information system life cycle, other than mentioning that we are supposed to analyse and document the actual business problem we are trying to solve, describe how the system will be built and how it is broken into smaller, more manageable pieces, and decide which technology we will use to develop the solution. When we break the system into smaller pieces we can break them into classes, modules, libraries, frameworks or as architects like to say, into “artifacts”. But wait, we just broke the system into a number of different pieces such as classes and frameworks … well, it is all about how granular we want to go and “what we happen to call what”. The important thing to note is that we are all in agreement at this point … COM developers typically talk about components, while others will happily refer to the same as libraries or modules.
Then comes the next step of building the solution and this is where I personally believe that the information technology world has a lot to learn from the other industries. I often hear “oh, this is a simple system … we will write it in two months”. 6 months later the developers are still in the process of shipping the product. Why … “oh, we had a technical challenge” … obviously. Try and sell a car to a buyer, sending him away on the delivery date, saying “oh, we had a technical challenge … please come back later”. Guess what, the buyer will never, ever return and probably drive past the salesperson the same day, with a better car purchased at another vendor.
So what should we learn from other industries? Whenever a task becomes repetitive they develop robots, capable of completing a monotonous and repetitive task quickly and efficiently. Special tools are developed for specialized tasks and configuration dictates how easy a product can be deployed, adapted and used. In the information technology world we have code generators replacing the robots, reusable classes/components/libraries/frameworks replacing the specialized tools and best practice documentation guiding the developer through the complex world of technology versus business requirements.
I often wonder how a developer getting all excited about the My namespace in .NET, can argue against frameworks … they are basically the same concept, namely to package and make available generic functionality for reuse and to avoid the continuous reinvention and ongoing copy-paste development.
Then we have the concept of business solution versus technology solution. Well, I am opening up myself once again by stating that “any” solution consists of both, living in harmony in successful projects and an in disarray in solutions that ship late or never. The most important holistic delivery of any information system is to solve a business need and make the business more productive and competitive. To realize this solution, however, we require technology and the foundation of any successful business solution is a stable and solid technology solution. We cannot see these two tenants as separate worlds, but instead should see them as complementary. I therefore distinguish between two types of software factories, which combined may be refered to as a software industry ... one factory produces the business artifacts, while the other is focused on the techinal artifacts.
But where does the software factory fit in? Well, in my “humble opinion” software factories are therefore a concept which creates the building around all of the above, it is a process of sharing, re-use, constant learning and the evolution from code-then-model, to a model-then-code-and-configure world. In the words of YAH, they are the solution ecosystem of the future. A software factory must not be compared with components, code generators, frameworks and specialized tools, but instead be seen as a concept of configurable development environments, containing pre-packaged and re-usable artifacts such as patterns, frameworks, best practise documentation and automation tools. The most important ingredient in a software factory is the concept of communication and sharing. An organization consisting of teams who all go their own way, develop their own frameworks and tools, and more often than not compete against each other within the same organization, is not an ecosystem that will benefit from software factories.
So do I believe software factories are the answer? Personally I believe none of the terminology we discussed herein are the answer in isolation, however, used effectively all or some can create a potent antidote to the late solution deliveries, the common excuses we always hear when a 1-2 month project has not “shipped” months later, the late nights trying to solve a technical problem which a gazillion technocrats have solved before and allow all of us to go home “on time”, “feeling good” and enjoying an early dinner with family.
I may be missing the point, but in my opinion we are once again agreeing, but arguing as we are using different terminology for the same concept