Thursday, December 13, 2012

Product Engineering is different!

Knowing the difference between 'product engineering' and 'application development' is not optional at my workplace... here at 99X Technology, we live and breath product engineering everyday, the niche we specialize.

Anyone thinking of of joining us... it's clearly advantages to know why & how product engineering is different to other disciplines.  This blogpost... one may even treat it as a leaked interview guide from me... ;)

If you ask the question from someone, the popular answer is around codebase maintainability. Historically application development was considered short lived, for example with limited number of releases (deploy & forget), whereas products were expected to evolve for longer durations and regularly maintained.

But this doesn't hold entirely true today. Although most of the best practices of software maintenance (e.g. unit-testing, automation) were ideated at product engineering houses, I see the difference diminishing lately as smart organizations demand internal applications also to evolve regularly and rigorously. Though it is true that product engineering mandate longterm maintainability  that's not optional for application development either.

So what are the clear cut differences? One of the important aspects is to understand the flexibility demands of your customers. Products are intended to be sold to multiple organizations (or individuals if in B2C space). Business rules, user flows and integration requirements can substantially differ from one organization to another. 

Unless you verify your architecture agility fulfills the 'cultural' demands of your customers, you may have a hard time convincing the customers at your sales meetings. Note the use of the word 'cultural' above... that was very intentional. You can propose customers to adapt the better/innovative flows in your product, but the last thing you need to negotiate is the culture and the values of his/her organization.

Next significant is to understand the distribution model of your software. Let it be SaaS, OTA or push installation on desktop computers, distribution has to be painless for the customer. Internal IT departments are not going to sit for days and figure out how to get your software up and running. In application development, the context and environmental conditions are much known, and buyin from internal IT is high as often it's their own brain child.

But in product engineering, assumptions you may take are limited and your product needs to address a broader combination of packaging, deployment and compatibility scenarios with a smooth distribution model.

Last but not least are the considerations of sales and marketing department. What is your licensing model? Do you provide online trials and demos? How to manage the different editions you offer to the market? These are some unique questions in product engineering. 

Also keep in mind that products are expected to compete in the market with dozens of similar software out there... How attractive your user interface is? What is the user experience you excel? Importance of user experience (UX) design is far prominent in product engineering for two reasons. First is the obvious 'market competition' aspects. Second is the fact that your product is not custom developed for a particular organization and therefore may appear allien to your users unless you stand out in the user experience you provide.

Ensure you answer these questions consciously when doing product engineering, or be prepared to loose your market to someone who does it correct!  ...and the reason we specialize product engineering is because... we want our customers to be in the latter group!


I have refined the content to be a more structured white paper. See it here: 


creed - Uchitha said...

Hasith, a very simple and clear identification of the differences.

Let me mention an interesting experience on distribution model in an application development environment.

As you mentioned, in an application development the target environment is quite well known. However the distribution model could be quite important/complex regardless. In my case, this is because the IT department is different organization/vendor to application development.

The emphasis on our deployments are on 'simplicity', 'repeatability' and 'capability to roll back' rather than 'flexibility' which is critical in product engineering.

So as far as the deployments are concerned we hand it over to another vendor to carry it out and they expect the deployments to be simple, repeatable and if something goes wrong 'easily reversible' as well. Depending on the existing political relationship between the 2 vendors things could be even more complicated by having a layer of 'untrust' between the vendors.

The learning from this is that there could be instances where 'distribution model' could turn out to be important even in application development environment. Nevertheless it's important for very different reasons to a product engineering environment.

Andy said...

@ Creed - I'm not sure you're taking in exactly what was trying to be conveyed.