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: 

Wednesday, December 05, 2012

Simplicity Misunderstood !

Human thinking is complex... and our brain deals with dynamic, non-linear, multi-dimensional problems everyday. For example, people easily drive on extremely chaotic asian streets, simultaneously appreciating the pretty views around (u know what I mean..), while engaged in a heavy political conversation with another in the car… There is no question human brain is capable… but the question is… why we developers wet our pants when it comes to complexity in user interfaces we create??

Here is my take on it:
People hate 'perceived complexity' 
but love 'power for complexity' !
I know, that statement needs explanation! Here we go... 

Lets take Business Applications. Business applications deal with power/heavy users… and for power users, power to perform complex operations is mandatory. Give them a tool that restricts behavior/imaginations, and usage will just fall off... Need a proof? who thinks Excel is simple? despite criticism, it is still the most valued tool after all..

Ok, now.. What is the difference between 'perceived complexity' and 'power for complexity'? See below screen for a casestudy:

Problem with above interface is that it's just 'static, linear, single-diminutional' and people perceive it as complex… As per my view, the secret of creating user interfaces which are not perceived as complex, but with 'power for complexity' is hidden in three attributes, the exact ones I mentioned in the first sentence of the post!

  • Make the interface dynamic: By dynamic, I mean the sensitivity of the user state and context. Make the UI relevant to the user by understanding the state of the user and operating environment of the user proactively. Dynamic interfaces help taking most of the perceived complexity away from data oriented screens. See how smart LinkedIn in getting users to complete their CVs... That is a great use of social aspects too. Mobile adaption and new HTML5 capabilities helps web applications here a lot.

  • Make the interactions nonlinear: linear interfaces are navigation centric whereas nonlinear interfaces content centric. Paging and form based traditional UIs are examples for navigation centric UIs. Most of the modern single paged UIs are content centric and present users with relevant content at right time at right place without users performing navigation.

  • Serve with multidimensional content: My favorite .. Multidimensional behavior opens limitless opportunities for rich user interactions. Users are free for imaginations and are helped to best use the brain for creativity. Facet analysis based 'advanced search' interfaces are a good example for this. Multidimensional interfaces can even gamify complex operations and make the users to enjoy use of their brain while better achieving business objectives.

What do you think? Do you have any addition to the above list?