More than at anytime in history, the past decade has proven that it is no longer enough to be the first one to hit the market with a disruptive and innovative software product/service. Facebook was not the first social media player, but was the last giant left standing! Gmail was not even among the early list of email service providers, but now is the most dominant player in the segment. Chrome was no where in the picture during the heydays of Netscape/IE browser wars, but now has the 2nd largest market-share across platforms.
Pedigree, past success, and deep pockets are no longer a guarantee for current relevance. Abundant financial support didn’t guarantee the success of either MySpace or prevent the demise of AOL. Kodak, one of the most iconic brands and companies in the world is a great example of how incapacity to innovate and change with times can make you irrelevant! On the other hand, Xerox, another iconic company has successfully reinvented itself into a modern, and thriving technology services outfit that is vastly different from its bread and butter photocopier background. Irrespective of whether you are a startup, an emerging or established player, if you don’t have the ability for continuous innovation, you are guaranteed to become a dinosaur in no time.
While the right Go-To-Market strategy, and disciplined execution from a business front are vital, the ability to consistently excel in technology innovation is undisputedly the biggest differentiator for successful software companies. And in the current digital landscape,the ability to continuously build and deploy sophisticated software is the most dominant strand of a company’s technology and innovation DNA.
I have spent the past two decades in helping numerous softwarecompanies organize their development teams, functions, and processes to facilitate continuous innovation. Irrespective of your company size and product life cycle stage, it is vital to understand the 6 P’s of organizing software engineering as a core business function:
Product management is perhaps the most pivotal organizational role in a software setup. Whether it is an individual or a cross-functional team, product management must be instrumental in articulating the vision, setting the strategic roadmap, and identifying/prioritizing which customer pain points to solve; More importantly, product management must have a thorough understanding of the market, and keen insights into how and what will differentiate our software from that of the competitors; and will define the ‘why’, ‘what’, and ‘when’ for everything to do with the software.
This key role is responsible for the overall technology architecture, as well as the design and technology directionfor the software. In larger organizations, this functional role is often played by a group of architects, who could in turn be responsible for the architecture/design of a specific component of the software or a given technology layer. This critical role will define the technology and engineering excellence of the software, and must strive to be at the forefront of technological innovation at all times.
The ‘project manager’ in an individual capacity, or a Project Management Office (PMO) in a larger setup must be responsible for the systematic planning, execution, and delivery of every software release or iteration. A skilled PM or PMO will have the ability to identify potential people/process/technology bottlenecks, smoothen out dependencies, and ensure that all functional teams are working in tandem towards a common release/delivery goal. Quiet often, in today’s software development environment, this role must be well equipped with the best practices in terms of agile development methodologies such as Scrum.
It is our experience that often the core software development activities including (design, coding, testing, and integration) are best handled by smaller dedicated teams, with cross functional expertise in different areas who will be responsible for specific components in the software suite. The individual component teams must have complete ownership of all infrastructure as well as the people and processes for source code control, test automation, and configuration management.
Product support & maintenance
While the Release Management Team (RMT) working under the guidance of ‘product management’ will physically manage the delivery and deployment of the software, the support & maintenance function must be handled separately to ensure that all live customers are adequately supported, with appropriate resolution and feedback mechanisms.
Process for Continuous Innovation
While each of the above cited core functions is important for any software company, the ability to execute all of them in a systematic, repeatable, and scalable fashion through a streamlined process is at the heart of “Continuous Innovation”.
Based on our extensive expertise in adapting agile principles and scrum practices, we at coMakeIT have captured the best practices for every functional step in the software value chain, and made them part of our proprietary “JumpStart” methodology; this can be adapted by any company to create a “Software factory” capable of continuous innovation.
In a series of upcoming blogs, my colleagues who are seasoned agile practitioners and who have helped numerous companies create “software factories” will present the “JumpStart” methodology in detail.