Library Dependencies – reinvent the wheel

When you read news and tutorials about a technologie, it always seems easy to accomplish a hello world program. If not, that technologie doesn’t worth the try. Each technologie brings its own incredible features that will make you save a lot of times. Sometimes, by providing some good EDI features, sometimes the technologie came with some rich controls inside the box, sometimes the technologie will allow you to target a lot of platform with few efforts.

Starting from scratch

Being used to develop most of my application in C#, I like to start my projects from scratch without any dependencies : the empty type of project. From my experiences, having some library dependencies will make you dream with all the time saved. With dreams came nightmares. The library can be unusable : not compatible anymore, the library can have bugs or it can stop being updated, or even worst : the library isn’t free anymore. Libraries can sometimes walk all over each other : they may not work together. Sometimes several libraries will have the same features : it means you may have embedded duplicate code.

Sometimes, you miss out on learning new interesting things. There is a gap between those who think reinventing the wheel is a waste of time and those who do so. In my opinion, there is nothing bad in that. If I never tried to create my own Mvvm Framework, I would not learnt a lot of new things. If I never developed a website without JQuery, I wouldn’t feel confortable with Javascript and DOM at all. If I didn’t develop my own pie chart control for Xamarin Forms application, I would have had either to pay for it or to add several dependencies. I think you get my point.

Reinvent the wheel

Here is a list of what I tend to reinvent :
– basic functionality (parser, helper, converters etc.)
– user interface control
– project template and architecture

Which are the benefits to reinvent the wheel in such case :
– understand what is under the hood
– improve your ergonomic and designer skills
– learn how to manage different size project
– find some good ways to separate concerns with layer project to reduce dependencies
– discover/set up some good patterns

Which are the benefits to NOT reinvent the wheel in such case :
– save a lot of time so you can focus on other things
– learn how to work and integrate external library
– less code means less test, less code to maintain : less is more
– discover new frameworks

That’s why I always look what is shipped with a technology before starting working with it. I recommend you to try to reinvent the wheel for something that matter for you. As an example, I always loved our phone’s desktop with Widgets, shortcuts etc. That’s the reason why I’ve chosen to develop my own widget controller (the desktop where you can drag and drop widgets) and some widgets. It was a very good experiences because it leads me to think how to make my widget controller usable by another developer. How to separate the code to make developer able to create a widget that can be used ? Asking yourself those questions is a thing. It’s another one to make your best to answer those questions yourself.