Should you build, rent or buy your software?

The target audience of this article is any company that wants to sell its products online.

Not too long ago, the debate was whether to build or buy, but with the advent of cloud computing, the question that makes more sense now is — build or rent or buy. Lets clarify these definitions.

You build your own software, reuse open source libraries and deploy your solution on either open source servers, or paid servers. You write every line of code that is specific to your business/website. The servers/infrastructure is out of the remit of this article.

You rent software developed by someone else. You don’t write a single line of code. Blogger & Shopify are two examples of this kind of software.

You buy the software written by a big reputed company e.g. Oracle, IBM , etc. COTS (Commercial off the shelf) is often the term used for this kind of software. You then hire consultants or retrain your own staff to customise the COTS solution to fit your needs. There is an element of Build in this, but nowhere near as elaborate as the ‘Build’ option in itself.

Companies move in and out of these paradigms at fairly regular intervals (~ 5-10 years). Whatever approach a company plans to take, it is one of the most expensive decisions which will keep impacting the company bottom line for many years to come. So, it is imperative that it is discussed properly.

Is there a right approach ? Or in other words can we have some standard rules by which this decision can be made. I am sure there are many views out there on this topic, so here is one more to add to that mix.

So, what is the problem? Why is it so hard to build software? As opposed to lets say cars. The car assembly line pumps out car after car with identical quality. Why is it impossible to apply the same principle to software?

Before we attempt to come up with a framework for evaluating those choices, lets look into some definitions which have a great deal of impact on those choices.

No two softwares are identical. You can drive any Ford Fiesta or Porsche (if you prefer) in the world , and they would be identical to each other. You don’t have to learn or unlearn anything to switch cars, which makes it easy & predictable to drive any car and minimises any risk introduced by the switch.

Software Developer
No two software developers are identical. One of the most undervalued entities in the software industry is a ‘Good software developer’.
What/Who is a good software developer ? If I have to answer that in one line, I would say that a good software developer is someone who spends more time writing new software than fixing defects in the code developed by him/her.
Any/every software developed at any point in time will have defects. However all defects are not the same, and it is important to understand the subtle differences in the defects, if we are to fully appreciate a developer.
A technical defect (e.g., a NullPointerException) is purely a developer’s fault. Whereas a behavioural (i.e., a functional) defect is not a developer’s fault. The responsibility in the second instance has to be with the person responsible for finalising and clarifying business requirements. If you have vague requirements, you will have behavioural defects, which will only come to light once the system is put under use (either at acceptance testing or with real customers). Too late. As they say, the cost of fixing defects increase exponentially with passing time. [1]

In my view, a good developer is worth 10 average developers, and infinitely more valuable than bad developers. A bad developer will set you back on your business plans, and the tangible cost of that can never be fully worked out in terms of $/£.

Okay, thats all good but as a business, how does it help me make my decision ? What do I need to do to make use of all that information, and chart a course for my eCommerce venture ?

Lets look into each type of business:

Small player, offline only
This category includes the SME player (< $500million annual turnover), which has brick and mortar structure in place but there is no online presence. i.e. they are starting afresh to sell their wares online.

Selling online is not just about the technology but the business processes that go along with it. You need to not just establish stable technology to be able to successfully cater visitors, but you also need to ensure that your business processes are geared to meet the online customer and understand its nuisances. Technology keeps changing but the business process i.e the roles and responsibilities of a business user is something that stays more or less the same over a period of time.

As a small player starting out in the eCommerce venture, you should aim to establish your business processes first. Also, since you are new to the technology field, you should go for low cost option in the short term with minimal impact on your existing business. Given these constraints, the option that best fits your needs is the Rent option. You can rent the software which has already been developed by someone else, and push your own product data set through that software. This will give you a feel of the online space and at the same time, keep your capital expenditure on the lower side. While you are using a stable technology, (which you did not have to spend time developing), you can take time to develop & streamline your business processes.
This should give you couple of years to establish yourself in the online space (or not). And once you have tested the waters, you can get adventurous or not, as the case may be.

Small player, online/offline
This category includes SME players which have offline shops as well as online presence.If you are a small player, and have been operating in the online space for some time, then you must have had time to establish the business processes. So, lets assume that you have half decent business processes in place. The reason you are looking to change the technology could be that your current technology has become out of date, or you are simply wanting to grow beyond your current customer base, which your current solution is unable to support.
Either way, you need to understand your current technology team to be able to make a decision.

If you have a great technology team, then you should go for the build option using API-first model [2]. You could start with a single API service to start with e.g. a ProductService and then ensure that this service works before applying the same principle to other services.
On the other hand, if you don’t have a high confidence in your current technical team, then you could go for Rent/Buy option. Consider, if you are able to invest in your team and improve the overall quality of the team by training or new hires.
If your business processes are complex and you have lot of customisations, then Buy is the only realistic option. With Rent option, you will eventually hit the roadblock where you are unable to do things that you need for your business, and by that time it would be too late. So bite the bullet, and buy. Or else simplify your business processes (if it works).

Big player, offline only
If you are a big player with only offline presence & no online presence (unlikely but possible), then you should invest in hiring the best technical team, and go for the Build option using API first architecture.
The most important thing for you is that your solutions are stable and scalable, and only a great technical team can ensure that.
You can also consider the Buy option, but in my opinion, the lock in introduced by the Buy option does not outweigh the advances being made in technology across the software stack.

Big player, online/offline
To do.



Gaffer, a spy software used by UK Government has been open sourced.

If you have a github account, you can fork out the project from below link:


Gaffer is essentially a framework for processing large amounts of interconnected data, and build graphs based on that data. This in turn can be used to analyse the relationships between those objects.

(AN = alphanumeric)

For indexing purposes, Oracle Commerce divides characters into 3 categories:

  • AN characters
  • Non-AN characters (as configured in special chars config)
  • Other non-AN chars not configures in above.

Case folding
Oracle commerce search ops are not case sensitive, so alpha chars are always included in lowercase form at the time of indexing.

Indexing of non-AN chars
The non-AN chars which are not specified as searchable in config are treated depending upon whether they are considered punctuation or symbols.

  • Punctuation chars are treated as white space. The following are punctuation chars:
    ! @ # & ( ) - [ { } ] : ; ‘ , ? / *
    In a multi word search with words separated by punctuation, the word order is preserved as if it was a phrase search.
  • Symbols are also treated as white space, but word order is not preserved. The following are symbol characters
    ` ~ $ ^ + = < > "

(AN = alphanumeric)

For indexing purposes, Oracle Commerce divides characters into 3 categories:

  • AN characters
  • Non-AN characters (as configured in special chars config)
  • Other non-AN chars not configures in above.

Case folding
Oracle commerce search ops are not case sensitive, so alpha chars are always included in lowercase form at the time of indexing.

Indexing of non-AN chars
The non-AN chars which are not specified as searchable in config are treated depending upon whether they are considered punctuation or symbols.

  • Punctuation chars are treated as white space. The following are punctuation chars:
    ! @ # & ( ) - [ { } ] : ; ‘ , ? / *
    In a multi word search with words separated by punctuation, the word order is preserved as if it was a phrase search.
  • Symbols are also treated as white space, but word order is not preserved.
    If a symbol character is next to a punctuation character, it is ignored. 
    The following are symbol characters
    ` ~ $ ^ + = < > "

Oracle Commerce Search supports following search modes:


  • MatchAll
    MatchAll means all keywords specified by user should be present in the record. e.g. If a user searched for brown bag, the result should have both brown AND bag in the text.

  • MatchPartial
    Matches partial keywords e.g. brown bag will return all records which have EITHER brown OR bag in its properties. In addition, the settings specified in ‘match at least’ and ‘omit at most’ parameters, also must be satisfied.
  • MatchAny
    Matches any of the terms in the search query string.
  • MatchAllAny
    The engine first tries to match ALL, and if no results are found, it falls back to Match any.
  • MatchAllPartial
    First, the engine tries to find results for MatchAll. If no results are found, then MatchPartial is used.
  • MatchPartialMax
    First, the engine tries to find results for MatchAll. If no results exist, then the search is executed with one less term than original, and so on, until results are found. This mode is subject to Match at least and Omit at most.
  • MatchBoolean
    Allows users to specify complex expressions.


Query parameter to specify match mode e..g Ntx=mode+matchall

Query parameter to use in dimension search


Black Friday is the day following Thanksgiving Day in the United States (the fourth Thursday of November). Since the early 2000s, it has been regarded as the beginning of the Christmas shopping season in the US, and most major retailers open very early (and more recently during overnight hours) and offer promotional sales. Black Friday is not an official holiday, but California and some other states observe “The Day After Thanksgiving” as a holiday for state government employees, sometimes in lieu of another federal holiday such as Columbus Day. Many non-retail employees and schools have both Thanksgiving and the following Friday off, which, along with the following regular weekend, makes it a four-day weekend, thereby increasing the number of potential shoppers. It has routinely been the busiest shopping day of the year since 2005, although news reports, which at that time were inaccurate, have described it as the busiest shopping day of the year for a much longer period of time. Similar stories resurface year upon year at this time, portraying hysteria and shortage of stock, creating a state of positive feedback.

Where the mind is without fear and the head is held high,
Where knowledge is free,
Where the world has not been broken up into fragments,
by narrow domestic walls,
Where words come out from the depth of truth,
Where tireless striving stretches its arms towards perfection,
Where the clear stream of reason has not lost its way,
Into the dreary desert sand of dead habit,
Where the mind is led forward by thee,
Into ever-widening thought and action,
Into that heaven of freedom, my father, let my country awake.

This post was created before elections (April 2014), but was left unfinished. With all the hustle & bustle, it is probably worth putting below views in the open.

This is my take on pros and cons of AAP contesting on a large number of LS seats. Please note that the views expressed are my own. I am not affiliated to any political party (but I remain optimistic about AAP as a force for change).


Exposure to maximum voter base

By contesting on a large number of seats, AAP has ensured that it gets as much exposure and visibility as possible. Had it contested on a smaller number of seats, the exposure would have been lesser.

It can be argued, that had it contested on smaller number of seats, they could have been more effective.

However, contesting on a large number of seats is probably very much in rhythm with AAP’s philosophy of “This is YOUR election, not MINE”. Also, contesting on a large number of seats has tested waters at all levels. e.g. in Punjab, where AAP is seeing a vast amount of support. Had it picked a few seats to contest e.g. say 100, Punjab may or may not have figured in that list.

Each LS seat has the same value

The seat of Varanasi carries the same weight as Amritsar in LS, whereas in reality it may be much easier to contest and win Amritsar than Varanasi.

Fast track to becoming a ‘national’ party



Less control

Difficulty in identifying like-minded personnel


March 04, 2015

Corruption in community centres:

AAP MLA, Alka Lamba exposes the scandal in running the Community Centres. Good work!


Corruption in MCD & PWD

AAP MLA, Alka Lamba exposes the ‘open’ corruption in MCD & PWD.


Corruption in Housing societies

Housing societies to be brought under teh preview of RTIs


The below gamification problem was provided as part of Gamification Course conducted by very honourable Mr. Kevin Werbach. Many thanks for conducting the course. It was thoroughly enjoyable.

Gamification Problem

You are approached by Rashmi Horenstein, the CEO of ShareAll, a prominent company in the hot collaborative consumption space. (If you aren’t familiar with the concept, some good resources are and the March 9, 2013 cover story in the Economist.) She knows you are one of the top experts on gamification, which she has heard can revolutionize business. She asks you to present a proposal for a gamified system to take her business to the next level.

ShareAll’s mission is to make shared use of products and services as common as individual purchases. It follows the path of companies such as AirBnB, Buzzcar, and Uber, which allow sharing of particular products (cars, housing, etc). ShareAll’s patented technology makes it easy for consumers and business to share any product or service. ShareAll has also developed a global virtual currency, called Shares, which can be used to purchase access to any asset in the system. Shares can be exchanged for real money, and users can generate more Shares by sharing items or volunteering their time to complete tasks for others.

ShareAll charges a small transaction fee whenever Shares are generated, traded, or spent. Therefore, the more activity, the more money ShareAll makes. Horenstein tells you that she cares about the social benefits of sustainability. However, ShareAll is a for-profit company, with investments and partnerships from some of the world’s largest corporations, so profits matter. Horenstein believes gamification could significantly help ShareAll’s business. She is eager to read your ideas.

Gamification Solution Ideas

Please note that below ideas are my own & should not be copied without due permission.

Business objectives

  • Build a user base 
    As the company wants to become a household name, it is essential that the company builds up a BIG user base. In addition, the business model of the company necessitates that the company has as big a user base as possible. Therefore it should be the first big item on the list of business objectives.
  • Establish credibility 
    In addition to establishing user base, the company needs to ensure that it is seen as a credible company. And, does not have trust issues. Trust and increasing user base should complement each other, wherein the more trusted the brand becomes, the more people use it, and vice versa.
  • Social sharing
    Since the company wants to become a household name, it is imperative that is gets in front of as many ‘eyeballs’ as possible. Therefore, encouraging social behaviour should be one of the business objectives.

Target behaviors

  • Share on social networks i.e. facebook, twitter et al
    We want customers to share as much of their “ShareAll activity” on social networks as possible. This is one of the key behaviour that is expected of our Players.
  • Reasoning for not using sharing for a specific product type or service type
    As sharing products/services (not facebook sharing) is the key underlying factor, we want Players to reveal their reasons for not sharing certain items/services. This will help us to spot a pattern for a certain product/service, if one exists.
  • Inventory building
    We expect our Players to put up products/services for sharing, thus building up the inventory for the ShareAll system. This behaviour should be encouraged as much as possible, as the inventory is the heart & soul of the system. 

Player descriptions

  • The Owner/Sharer
    This player type represents the section of players, who own items, and put them up for sharing with others. In terms of services, these are Players who seek services from others. 
  • The User
    This player type represents the section of players who will be users of the products, and not necessarily the owners. Also, they will be keen to offer services to others.
  • The Money maker
    This category represents Players whose objective is to make money out of the system i.e. exchange virtual Shares with real money. Among others, some House wives/husbands can probably fall in this category.
  • The Ethical sharer
    This category represents Players who share because of ethical reasons i.e. help others save money, if possible etc.
  • The compulsive sharer/user
    This category represents people who use the system because of their compulsions to do the activity itself. They are not necessarily interested in the money aspect or the ethical aspect, but purely the game.

Activity loops

  • Shares – Global currency
    A user would be able to earn shares by using the system i.e. when the user puts a product up for sharing with others, he will get certain shares. He also earns shares every time his service/product is ‘consumed’ by others.
  • Product / service quality
    Each share will contribute towards the overall quality of the product / service being offered. i.e. a 5-star system can be devised to help users gauge the relative quality of the item (product/service) vis-a-vis other competing items. When the person using the product/service has availed the benefit, he would have to provide 1-5 stars, depending upon his experience. Based on this, the overall quality of the product/service can be derived.
  • Product/service use feedback
    Every time a product / service is used, the owner of the item would also provide feedback to establish the quality of returned items / services. e.g. if the user damaged the product, then that should be factored in the feedback.
    For this purpose, a user should have a feedback rating assigned as well. This will be similar in concept to eBay seller rating.
  • Encouraging site visits
    In order to encourage site visits and make the users stick around, we should also think about giving some shares to the ‘browsers’. This is similar in concept to the points that Samsung gives to users for staying on the site. The longer & more frequent the visits, the better the business.
  • Encouraging sharing
    Users can earn badges et al by using ShareAll at certain levels. This will appeal to those people, who are badge-lovers. At every X level, you will get a badge. i.e. after your item has been shared 10 times, or you have used the ShareAll service 10 times, you accumulate the badges etc. Also, the real value of badges would be that, with every badge, the number of Virtual Shares you get for sharing/using an item/service will increase (may be marginally, but nonetheless).

In order to make this process fun, we should think about utilising the intrinsic as well as extrinsic motivations. e.g. If a certain individual is an expert in a service, and other users need that service, then that should be portrayed as helping others, not just earning Virtual Shares. In addition, user’s preference upfront, and his activity on the site, should be used to target activities for individuals.

  • Share your experience
    Since you are the expert, help those who need this service. If a person is a real expert (and likes helping people), then he/she should get satisfaction out of this.
  • Sharing to maximise Virtual Shares
    People who get motivated by money, should be targeted in that way e.g. Get 10 more Virtual Shares to go to the next level.
  • Connecters
    One of the fun items which can be introduced is a connecting game, where in a third person is asked to connect the buyer & seller, and he can earn points based on that. This would cater to the situation, wherein the seller has the product, and the buyer wants the product, but none of them have the time to browse and connect the dots.


  • Web / Mobile App 
    The website / mobile app will allow the user to do the following
    – Register for the ShareAll system
    – View your status i.e. the number of shares you hold, and your sell/purchase history
    – View the current items/services available
    – Register interest in a service/product
    – Be able to bid below the item/service’s prescribed ‘share value’
    The company should look at streamlining the process workflows and systems, so the user can interact with the ShareAll system, irrespective of the platform i.e. desktop, mobile, Smartphone, etc i.e. a truly cross-platform system.
  • Videos
    In order to make users familiar with the workflow, short videos describing the workflow of sharing products and services should be utilised. The videos can revolve around the target player personas, wherein each video is focussed on specific persona. 
  • Insurance
    For products with some value, the company should look to get insurance. This will alleviate the fears of those individuals who would otherwise not go for sharing those products/services

If ShareAll follows the above mentioned steps, then it will not only help them become a household name in collaboration space, but also create a valuable company which will be the envy of all.

Programming, in my opinion, is not a difficult thing. The problem lies in approach that many beginners take to learn Programming. I would like to approach the posed question from a different perspective. In my opinion, the question assumes that programming is “difficult”. Difficulty, however is a very relative term.

In this essay, I would like to list down the characteristics, which, in my opinion, are essential to being a successful programmer/developer. Since, thinking is an essential characteristic for a developer, a “thinking” theme is adopted for the points listed below:

Think analytically
As a programmer, whenever you are given a problem, think analytically. Establish the input & output. Each program has an input and an output. Establish those first. Once they are establish, the approach you take can be finalised.

Think solution
Bear in mind, that an approach to a programming program can *always* be improved. So, a bad solution is better than no solution. Your first objective, especially, as a beginner, should be a solution, not the “best” solution. Solve first, improve later.

Think small (sub-programs)
A programming problem is inevitable made up of small sub-programs. Before you start coding, write a high level (in English) approach to solving the problem. This should be 8-10 lines in english (depending upon the problem), which can inform a layman, the intent of the program.

Think Divide and rule
A programming problem can intimidate, especially if you are a beginner. I would say that, no matter how experienced you become, a good programming problem, will always be intimidating. A thumb rule to solving a big programming problem is to cut it into smaller pieces, and tackle those individually.

Think more, write less.
Always think through your programs & sub-programs, before you start writing them. As a beginner, the tendency is to start coding, without giving enough thought to the solution. If there is one thing, that experience has taught me, it is that your programming solutions become smaller (and more elegant) as your experience grows.

We live in a time, when there is an API or solution available for most programming problems. Before you write your own, always explore. There is no need to re-invent the wheel. It is not smart, and it will not make you any more intelligent.

A well written program is a joy. Savour it, enjoy it & have fun.

#programming #india #divideandrule