In the IT department where I work, our goals include clarifying and drawing out the processes used and decisions made by the business. Processes and decisions are our competitive advantage.
The strategic direction is to center our products around Business Process Management. BPM models call out the major steps in the business process into charts that people can read and discuss. Meanwhile, the applications we deliver are each called “x Manager”, where x is the piece of business the application helps. The focus is workflows and work queues.
It occurs to me that we’re building a product, not a platform. We’re not only enabling a process: we’re enforcing it. If our users worked in a warehouse, this would make sense. But our users are scientists. They have PhDs. They’re capable of programming. They’re capable of working in a platform.
If we gave our users a platform to support their processes while enabling autonomy and innovation, perhaps they’d be happier with the software. Perhaps they’d have more opportunity for innovation — innovation that we could capture. When the scientist copies data out of the application and pastes it into Excel to do analysis, that knowledge remains with the scientist. When such analysis capabilities take 18 months of lead time to get programmed into the system (by us), that scientist sticks with Excel.
Is it possible to create a platform that would give them this flexibility? I don’t know. It would be a complete change of direction for our department.
Or would it? We’re looking at rules engines to give the user a quicker turnaround on improved decision-making. This is in the direction of a platform. However, a one-month turnaround on implementing and testing a new set of rules is not autonomy. It does not give a user the same freedom as Excel on his desktop. It still enforces uniformity company-wide.
If innovation is the competitive advantage, then the closer we get to a platform, the more advantage we have.
What is the competitive advantage in R&D? Processes and decisions, or innovation?
The drawback to offering greater flexibility on the platform is that the more freedom users have, the more freedom they have to create something that brings down the system. 🙂 There needs to be some kind of balance between locking it down to where they can't change anything, and allowing them free-form ability to do anything (like run in an infinite loop forever–\”honest, it made sense at the time….\”).This is one of the things that I liked, personally, about the whole DSL movement–it fostered a sense of \”Here, within this sandbox, you can do whatever you want\”, giving users that flexibility and control, but keeping the sandbox walls up as strongly (or not) as needed. Even if it's not a custom language, but using a \”scripting language\” like Ruby or ECMAScript or Lua to bind to an object model makes a lot of sense to me.