Iterate versus Copy in Software

Recently I posted an article on when it is OK to reinvent the wheel.  During the article I made a reference to automobile industry.  I mentioned how nobody has been able to invent a replacement for the original automobile. However every year dozens of major companies release new iterations of their products, all based off the original concept of the automobile.

Are these companies simply copying each other?  Some might argue that most of the time they are.  Does the fact that one car has a cup holder inside mean that other cars cannot.  Well – I don’t believe that.  Rather I believe that the combined companies together push the boundaries of the industry as a whole.

What then is the difference between iteration and copy.  Particularly in software engineering.  Let’s assume one company (ABC Widgets) makes a piece of software that poll’s their user base and asks them to choose a favorite selection among four different choices.  Let’s assume another company (XYZ Frollics) then decides to write a similar software program but decides to let their users choose all of the answers from the list that they like as well as provide a few of their own answers.  Did this company copy the first?

The answer to that question lies within a gray area that we all must be able to answer on our own.  What are our ethics?  What rules do we as software engineers adhere to.  What rules do we abide by.

People will be able to argue both sides of this coin.  Many people will argue that XYZ Frollics copies ABC Widgets, simply because ABC Widgets had the idea out first.  Others however will say that they didn’t copy them because they wrote it from scratch and iterated upon it to make it better.  We see this every day.  Sometimes these disagreements even lead to costly litigation.

When a product manager or boss comes to you and says we need a feature like XYZ has.  Use caution.  You don’t have to go all righteous and stand up on your pedestal exclaiming that you will not copy software, etc, etc.  Rather strive to understand the reasoning for the action.  When you understand the reasoning you can then provide a better solution.

It is driven out of fear?  Did the new feature give your competitors an edge?  If so – maybe developing a different solution, a better solution may give your company an even greater edge.

Is it driven out of usefulness?  Did the feature provide some new advantage that could really benefit your users?  Your goal is to do what is best for your users.  Strive to understand the pieces that will benefit them in particular.  You may find that some of the features benefit your users, while others do not.

So what then is the difference between iterating and copying.  In my opinion it is in understanding the goals of the solution and how they will benefit your user base.  Be inspired by what your competitors are doing.  Congratulate them for coming out with an idea that improves your industry.  Strive to understand it so that one day you can release a solution that improves upon it and makes the industry as a whole better.

If you find that you released a competitor to an existing software solution, ask yourself how you improved the industry.  If you find that your new solution offers no benefit, then all you have accomplished is the ability to copy your competitors.  If however you will able to provide additional breakthroughs then you have given the industry something in return.

Trust your conscience.  If you feel like your solution offers no benefit, then it is probably just a copy.  Strive for greatness through iteration and pushing the boundaries of your industry.  The industry will reward you in return.

Posted in , and tagged , .