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.

Build
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.

Rent
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.

Buy
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.

Software
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.

References

[1] http://www.agilemodeling.com/essays/costOfChange.htm
[2] http://martinfowler.com/bliki/MonolithFirst.html

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:

https://github.com/GovernmentCommunicationsHeadquarters/Gaffer/

 

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.

    ——————————————————————-

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

Dx
Query parameter to use in dimension search

——————————————————————-

Types of dimension search

  • Default dimension search
  • Compound dimension search

What is compound dimension search ?
Compound dimension search enables MDEX engine to return combinations of dimension values, i.e. dimension states, that match a search query.

This search reduces to a default dimension search for single-term searches i.e. it is only relevant for multi-term searches.Compound dimension search results must satisfy following

  • Validity – Must have records
  • Coverage – Each dimension value MUST match at least 1 record
  • Minimalism – Removing one should remove results.

By default all dimensions are enabled for dimension search.

—compoundDimSearch
Use thisDgidx flag to enable dimensions for compound dimension search.

Use ENEQuery.setDimSearchCompound() to enable compound dimension search on a search request.

Dimension values within a dimension are ordered based on

  • Static dimension value ranks, OR
  • Relevance ranking

Ordering of compound dimension search results is based upon

  • No of dimensions within each result set
  • Secondary sort which is lexicographical
  • Values are sorted as per the static value ranks or relevancy ranking.

By default, dimension search returns dimensions with no records. To avoid this, use one of the below:

  • Dn=0 (Query param)
  • ENEQuery.setDimSearchNavDescriptors(DimValIdList(0))

 

Di
This query param can be used to limit default dimension search to a single dimension.

D=*
This query param can be used to return all possible dimension values across all dimensions.

Drc=id+11+numresults+1
When numresults is used in conjunction with Drc, it limits the number of dimension values to return.

Do
o for Offset. Use for paginating through Dimension search results.

Dk
Ranking for dimension values. Dk=0 or Dk=1. Not applicable to compound dimension search.Dn
Dimension search scope parameter. This searches within the results for dimension search.

Accessing dimension search results

[code language=”java”]ENEQueryResults.containsDimensionSearch
ENEQueryResults.DimenionSearch
[/code]


Enable Refinement counts for dimension search
This is done on a per query basis. Use showcounts with Drc query parameter.

Retrieving refinement counts
Inside PropertyMap on DimVal object, the value is stored against key ‘Dgraph.Bins’ (or ‘Dgraph.AggrBins’).

Performance impact of refinement count
Adding refinement count for dimension search adds an overhead, especially for rapidly executing typeahead searches. Be careful.

Apple has bought Faceshift, a Swiss company for an undisclosed sum.

“Apple buys smaller technology companies from time to time, and we generally do not discuss our purpose or plans,” Apple said, on being asked for a comment.

Good times.

Now, when can I wink at my phone to unlock it ? ;

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.

Update: March 23, 2015

  1. Pollution checks for vehicles soon
    http://auto.ndtv.com/news/pollution-checks-for-vehicles-will-become-mandatory-soon-748865


  2. Delhi government to build 27000 LIG flats.
    http://economictimes.indiatimes.com/wealth/real-estate/news/delhi-government-to-build-27000-flats-for-ews-lig/articleshow/46667468.cms