Let me tell you about two developers who worked for the same company:
Both were talented, gifted software developers and had many years of experience under their belt. Each one of them was the technical lead of his team.
One day the first developer needed to convert all of the project’s old HTTP calls with HTTPS calls, this is usually an easy (while frustrating) thing to do – some configuration changes, minor code tweaks, insert a credentials file and you’re done.
There was one bump in that road – the credentials were given to him in .crt and .key files used in Linux, while the project run on Windows machines.
the first developer then implemented his own OpenSSL’ish solution using .NET code and managed to use the files that were supplied by the IT department. it was amazing and worked flawlessly, in fact later he had to update his code and to fix a small bug that existed at the time in the original library and caused problems when using his implementation.
A few weeks later the 2nd developer had the same problem, first he looked at the other’s team solution, considered using it and then using his command line, converted the keys to a format that could be used in Windows, installed them on his machine, wrote an email to the integration department and proceeded to work on the next task.
Which of them did the “right” thing?
I know which of them solved a bigger problem, tackled many existing and challenging issues and came up with an amazing solution, I also believe that that developer had much more fun. Who of us does not like to write code that manipulates the bits and bytes to achieve greatness?
Would you like to work with the first developer who wrote a library from scratch or the other one who did not?
I was reminded of this story earlier this week after reading an article about Microsoft losing the “browser wars”.
In case you did not know, Microsoft has a released a new Edge browser which was built on top of the Chromium (open source Chrome). It seems that after a lot of failed attempt Microsoft has scraped their browser(s) engines and replaced it with a de-facto standard that is Chrome.
In the article I have read, the author explained that using chrome under the hood (or part of it) is in fact admitting defeat and recognizing that Chrome it a much better browser than IE and later Edge could ever be. While I agree with the facts I think that Microsoft has won, instead of developing yet another engine that would only be supported by some websites they choose the one that is already supported and saved themselves a lot of development time. On top of that since Edge will be installed at least in some versions of windows, including the one your parents use – they might finally gain the upper hand on Chrome.
My second thought is that it is always better to use something that already proven to work, instead of trying to reinvent the wheel. I have been working with teams for the last eight years on solving their legacy code issues, more often than not there are some home brew “framework” some talented (and bored) developer has created that cause a lot of pain, it’s inconsistent, doesn’t play well with exiting frameworks and usually not updated as fast as needed. I’ve seen developer create new unit testing frameworks, dependency injection monstrosities and networking libraries than I care to remember.
I don’t think you should never write new and existing code, but unless it’s your company main business or you have a really, really (really) good reason to – don’t try and create alternatives to well used, production grade frameworks, it would only interfere with you writing the code that could make an impact – the one your client wants.