Each year thousands of newly graduated students from fields of Software Engineering or IT related fields seek for jobs. A great number either fascinated by the wealth and power of previous renowned companies or looking for the answer “How did they create such software”, follow those company's path and try to reinvent the wheel without presenting anything new; Well most of which fails.
As a motto a software engineer should burn this phrase into his or her brain, “Don’t reinvent the Wheel”. You never want to build something without at least a partial novelty. One important reason is that you have powerful companies ahead of you to compete with and without at least some parts new your chance to succeed is very low since your competitors have already the product you just decide to produce and they are going to add more features in future. Thus at the time you enter the market they have something newer, better and robuster. Those companies also already have their clients and popularity and the market does not give credit to start-up companies for the same product. Moreover since they have all the resources – knowledge and experience specially—they need, the cost of their ownership is much less than you and they probably present a cheaper product.
Marketing reasons play an important role but it is not the one and only reason why you shouldn't reinvent the wheel especially when you are in the development phase! As a rule of thumb you always start your development by searching for a library or package to provide the functionality you want. This dramatically reduces from your time of development and testing. Sometimes packages meet some of your needs and that’s OK because you can still invest your time just to expand those packages and this is exactly in accord with the essence of open source development in case you use and expand an open source library. After all debugging and troubleshooting is more convenient in this way since you have some sources to rely on their assistance.
Do not develop something already existing unless you just want to gain experience. Your development is valuable for market – either ordinary users or other developer – only when there is some novelty. Without novelty your cost of development is extraordinary high and charged with a market not wanting your product your invention just leaves you cost.