Changing the way we develop products
The entry barrier for new products is very high in the current market. This has less to do with new ideas and more to do with the number of underlying features that need to be present in the product before adding a new features to the product. For eg., a warehouse product needs to have a number of basic features such as inventory counting, inventory auditing, space allocation and so on before it adds the IoT features such as RFID related features to the product. For a startup, the investment required to develop the basic features is very high. There exists a number of old players in the same market providing variations and customizations to this basic and more advanced features. A company that is trying to enter a market then is forced to either tie up with one of the old players for the basic features and enhance them for the new feature or spend obscene amounts of time and effort developing these features without any assurance of market viability.
On the other hand, existing products are typically bursting at their seams in terms of features and customizations done for various customers that change is very slow. Customer customizations and ad-hoc feature additions has typically led to an unwieldy configuration pattern only know to a select few and increases the time of implementation for new customers. Existing customers prevent existing products from moving forward to newer technologies and features and new customers are difficult to onboard. Developing afresh from a clean slate becomes problematic since the time to market is very high.
It is time for us to take a step back and evaluate the reasons why we have got into this impasse where old products cannot easily adopt newer technologies and new products cannot get the time proven features to evolve from.
The first vision that floats into my mind is this huge chunk of code base checked into some version control system, where the version control system has changed, but the code is the age old one, which no one was willing to touch, a few key pieces of code that achieve most of the functionality and has not changed over the years. Developers have added periphery code to it, to adapt it for new technologies, but the core has not changed. Hence the most famous saying “The code is the best documentation of what is present in the code”.
The second vision that floats into my mind is this huge number of branches created for each of the customers, sometimes with a single line change, sometimes with huge module changes. Not one person in the company know about all the adaptations done except obviously when someone inadvertently changes a base feature and the customization for the customer cannot be adapted for the change. Then there is a huge argument between various teams with finger pointing and time lost while the customer is losing money. Companies are trying their best to change this by making it a single version, but when it comes to customers and their requirements, a strict rule cannot be applied.
How can we break free from all this attitude? How can anyone break free from this huge chunk of code base or huge amounts of branches that is present or will be present? While we can argue this of what has already been done, we need to see and realize that the current products are doing nothing better. They are in the process of generating this huge chunks of code base which in another decade will be in the same place as the currently existing products.
The first place to start is to stop generating huge chunks of code unnecessarily. It should be noted, that I said “code” and not “product requirements” or “Functional design” or “design”. The reason a core code base is “pre-coded” is because in the current technology scape, the “time to develop a product” cannot be afforded when you have already claimed a product is working to a customer. But the drawback of pre-coding is that the features that you have developed may not be the one the customer requires. What is truly needed is a way in which we can spend the time to do a market research, get the requirement, functionally design it and have the technical design ready as templates. When a demo needs to be shown to a customer, code is generated out of these templates and hosted to show the demo. Based on customer requirements, the design is replicated and changed for the features required before generating code again.
There are a number of features that are needed for such a platform. A few features are: to be to able to host a series of a lego-blocks, that allow us to reduce down the design templates to modular pieces that can then be linked together at runtime instead of at design time, standardized design methodologies so that the code generation can be stripped down to the least required testing and many such features.
The PoC It Online is one such platform where design templates can be stored and code generated and hosted from design very fast.
Published on Java Code Geeks with permission by Raji Sankar, partner at our JCG program. See the original article here: Changing the way we develop products Opinions expressed by Java Code Geeks contributors are their own. |