Job of a software developer is to solve problems. On a daily basis we confront us with different problems and seek solutions. Sometimes we have some very good ideas about solving those problems.
But, it’s not all about good ideas! If you are not able to successfully realize your idea, then the idea itself is worth nothing.
Thanks to globalism, information flow today is getting bigger and faster. Different people in different parts of the world are faced with similar problems. All of them are using Internet or some other media to get answers and solutions to these problems.
World has became such a small village that it’s no wonder that people often have some idea how to solve a similar problem. It’s like neighbors looking over each others fences.
“Look Marge, our neighbor Neil bought fountain. Why don’t we buy one, but only bigger and fancier?”
This effect of “global idea” had happened to me too often. I had a problem, I found a solution to the problem, I started implementing it, and somewhere in the middle of the implementation I found out that there is some Chen Lee Wong from China or Douglas Whitehorse from California who had same problem and made exactly the same thing as I did!
The only catchy thing is that Chen and Douglas have potential to push their solution and me, myself and I usually end up in abandoning our solution.
It wouldn’t bother me if I came to the idea much later then Chen or Douglas. What bothers me is that at the time I had idea, nothing similar was on the market! So, idea was original.
Here is a list of products for which I believe I had idea before well-known implementations of it appeared on the market:
1. BugBase – this was distributed bug tracking system. Like CVS/SVN but unlike them, there was a local copy of entire project on each developer’s machine. By entire project I mean all revisions, tags and branches of every file.
I could make some changes while being offline. Next time I go online, I could synchronize my local repository with centralized repository on the server. The advantage is that you don’t need to be connected to source control server in order to work. You can delete files locally, rename them, move, change etc. All these changes would be remembered and next time you go online these changes would be synchronized with centralized server. That means, merges would be done on files that were changed by different developers etc.
BugBase was my graduation project at University of Electrical Engineering in Belgrade, 8 years ago. Guess what? There is Mercurial project, which came up 2 years ago. It is still not very mature, but uses exactly the same logic.
2. AspectCMS – for more then 5 years I’ve been working with content management systems – Web Content Management Systems, Digital Assets Management Systems and Document Management Systems. What I have noticed is that a lot of common CMS operations are repetitive. There is always a storage of content, search, versioning, categorization, user management and a whole bunch of modules (custom applications) that are build around these basic building blocks. Also, I’ve noticed that the biggest problem with CMS’s is their proprietary nature. They do well what they are designed to do, but as soon as you want them to do something else – not possible without serious redesign.
Therefore I made AspectCMS. It is a CMS system that stores all data in hierarchical structure. Something like file system organization. AspectCMS doesn’t know anything about content nature. Every content is described with meta-data and that allows AspectCMS to perform different operation on them. Part “Aspect” in the name comes from using Aspect Oriented Programming methodology in implementation of CMS. Aspects were deep in core of CMS, not used just for trivial logging and transaction handling. But used for modifying execution paths, depending on set of modules that were installed in the system.
I wrote AspectCMS about 4 years ago. Guess what? Content Repository from Day Software (JSR170) does the same thing and came also about 4 years ago.
3. WebAspect – Web CMS based on AspectCMS. Logic is that every piece of web site is one aspect. Guess what? Rikard Oberg (famous AOP guru) created SiteVision WebCMS with the same logic. Again, date of creation was almost the same.
4. PeopleCapsule – Social networking system that creates connection paths between people. It is based on “6 degree of separation” theory and shows how completely unrelated people can be connected over the people they know. Guess what? Xing is doing exactly the same. PeopleCapsule idea was way before Xing (formerly OpenBC) ever existed.
5. Avalanche – coding-by-convention web framework. I made it one year ago.
Guess what? There is RIFE. The same concept, but I must admit it is couple of years older. I didn’t know about RIFE, but it is interesting to see how these two projects were very similar.
6. Cyclone – search engine middleware. Came 2 years ago as an idea. In the same time, Google Search Appliance and Apache Solr appear.
Conclusion: if you have a good idea, go for it! And do it fast! Because if you don’t, there is a well chance someone will come up to the same idea soon.