Due to my background, the concepts in the modern software factory resonate with me very much. It brings back flashes from the past. And, yes, this blog shows my age but (at least I hope) does not make me an antique.
I have some firsts on my record (although, of course, nobody remembers or cares anymore). I am the very first to develop solid modeling (where you represent a three dimensional object on a computer) on a desktop computer, called a Terak. Later, I was the first to develop the software for an Apollo (a UNIX wanna-be), IBM PC and for an Apple Macintosh. And that is where my story begins.
In 1982, IBM made a huge splash when they released the IBM PC. At the time, the language for scientific and engineering software was FORTRAN and the original PC did not have the compute power, memory or graphics capabilities. But when the IBM PC AT came (with the professional graphics card), I was in business. Unfortunately, the development tools and FORTRAN compiler were horrible.
Fortunately, I already had a few Apollo computers, which had great development tools and my team knew how to develop for the Apollo. So, we established a process to develop on the Apollo but sell on the PC.
Here are a few key things my software factory had:
- Follow the standards: Although the Apollo FORTRAN compiler provided some unique capabilities, we restricted ourselves to the basics to ensure portability. Any non-standard capabilities (such as certain I/O features, device access, etc.) had to be clearly isolated into target-system specific libraries. This approach allowed us to later port our software to some rather esoteric systems in short periods of time.
- Automate, automate, automate: We established a complete automated porting process. Every evening before the last person left for home, we initiated the porting process. Then, in the morning, we could test our work on the target systems.
- Agility in action: Of course, Agile was a concept not yet "invented" at the time. I called it design by prototype. In talking with customers or prospects, I came up with a solution and implemented it in small steps. Then I would show it in demos and get feedback. I would refine until we had a useful solution for release.
So, yes, I am excited about the modern software factory. I wish I had these tools back then in the stone age. So, what had you tried in the past to improve the software development process?