People often ask me why the productivity in terms of price per functionpoint stays the same or even increases over time. There is and always has been a lot of discussion about the craftsmanship of the IT-people and to some extend that is only too true. But considering that “general” IT- and business education has improved over time as well, I‘d like to trivialize this issue and weigh up the pros and cons and balance them to even for the moment.
The real answer has indeed something to do with our profession but is from another dimension: because the environment changes every time! My so beloved IT-industry “invents” new technologies like Windows, client/server, web-technology, Service Oriented Architecture and much more. And to be honest, of course there is always a sound business case. As an example, the promise that Windows was more user-friendly then a character based application was easy to believe. The education of the user would be a lot more efficient in terms of time and money then the client was used to. And even better, it was true! Or, virtualization of infrastructure, applications or even business will undoubtedly lead to a decrease of costs or an increase of revenue for a business.
Software generation is a big promise for years. So why doensn't really break through? Well, my guess is: it already did! ... Huh? ... well, yeah, let's look at the concept for a minute .. SG is in fact having an "engine" to automaticely create machine language while "coding" on a much higher abstraction level. Oooooh, so every compiler or interpreter in 3GL or 4GL is in fact a Software Generator ... well, that's kinda duh, not?
So let's skip this kind of SG and move on to the next level. The reason why SG is slow in deployment is that either it was too narrow focussed or it became too wide. In other words, just like 4GL 's or DSL's, the focus on an specific functionallity (type) made it hard to use it in other situations. As an example, when I grew up as a programmer a long time ago, we had RPG, Report Program Generator. As language intentionally designed by IBM to create reports more easily. Well, you can already guess what happened. It soon became the only language in an IT-shop with an IBM super mini and every kind of program had to be written with it. I personally wrote beside some useful busines programs (de-)compilers, chess-programs, screen-designers, performance-monitors, you-name-it programs with it. This mismatch can be projected on almost every programming language. It's often a matter of taste or a matter of focus. With this story you can easly picture the oher side of the medal too. What if the designer of the SG wants the tool to be used in a lot of different situations. Different environments in business, different functionality types. It gets pretty complex soon.
While summer fades away here in the Northern Hemisphere area, personal productivity is getting top of mind again. The first day after my holiday started of with downloading about 1000 emails (of which fortunately 500 where spam after all ) and a sorting a pile of real mail. After a day or so, the first calls and mails came with reminders that my holliday was already over more than a day and that "this message" was already waiting for more then 2 weeks for my answer! I thought I had been working pretty hard but obviously not hard enough. Then I remembered something of Stephen Covey from "The 7 habits of highly effective people": a quadrant with on 1 axis "urgent" versus "not-urgent" and on the other "important" versus "not-important".
Of course after a quick thought i saw myself like with "Old habits of a highly ineffective person" so i decided to change a few things. I even added some more "80/20-rule" mindset with the promise that 20% of my energy could deliver 80% of the required results just by choosing right. After all I didn't want to be remembered like with: "What do you think about Rob?" --> "Well i don't know actually but he must be good because he works so hard". Things went a lot better in the next days. but I admit it's difficult to stay on track. Doing easy not-important tasks is sometimes just tempting i guess. Mmmmm.
Remember, a software engineer who produces 15 use-case-points in a year exactly solving the business-problem is a lot more productive than the SE producing 30 points with beautiful but redundant functionallity .
"Hi Rob, long time no see! Still working for that consulting company, huh?"
"Yes John, and now for you too. I'am working on your productivity program so I'm glad I get the chance to talk with you as the head of the company about it and get your views on how it fits into your strategy."
"Glad to hear we got you into this, Rob. OK. Fire your questions"
"Thanks John. Yes, to start with a compliment. I've read the press release about the quarterly results. Congratulations!"
"Yes I'm glad we've managed to increase the utilization rate with more than 2% with of course a significant impact on profit thanks to my Productivity Improvement & Monitor Program, PIMP"
"Uhh, but both Presidentsday ánd Christmas was in a weekend that quarter, John. Won't you lose at least half of that increase of productivity again in the next years?"
A big frown start to appear between John's eyes."That is a problem"
The most compact definition of an assembly line is: "A coherent and governed set of measures aimed at improvement of software engineering". Having said that curiosity still remains around the actual set of measures. Well, the answer is of course: "That depends!". First of all the technology environment is of big influence. Not in the least because the technology vendors like Microsoft or SAP like to prescribe how implementation of their products can be done best. Of course all help is appreciated but there is no excuse of losing a birds eyes view on our own domain and craftsmanship. Last but not least there is the question of How low can you go?. In other words, a sound business case is still a good foundation for any idea of improvement.
Nevertheless there is a model one can use to build an assembly line without losing the overview. Lets start with one of the most simple representations of a system in general. Requirements go in, software comes out (remember garbage in - garbage out?). We need some governance, support and of course end-to-end management of the project itself. In fact, every single entity of this system has its own set of measures (accelerators) all aimed at the development of (intermediate) artifacts or deliverables. For projectmanagement this can be the plan, progress report, evaluation, risk analysis. For the requirements guidelines and templates. For governance measurement, a knowledge management system, continuous improvement. For support coaching, tool-support, education.