As a software engineer I usually find myself deciding whether to use existing tools or develop them on my own and to what extent. I have made my own checklist in order to help me to take those decisions.


Best option: use an existing tool. These are some of the benefits versus developing your own tool

Re-writing code that exists is wasted effort and makes the project takes longer than is necessary.

Your code is more likely to have more bugs/unforeseen issues than general widely used tools because those tools have been tested and patched multiple times. It's hard and time-consuming encountering the corner-cases by yourself.

Your code is more likely to miss features.

Your code has probably worse documentation.

Your code probably will not have community support (e.g. on stackoverflow, github, linkedin, ...).

Your code has to be maintained even when no new features are added (e.g. upgrading and adapting to a new version of a library).

If you use a well known tool, you may hire developers that had already used it.

Studying and truly understanding good existing solutions is a great way to learn from others and become a better developer.


Second best option: extend an existing tool

You could choose a widely used tool and extend it for adapting to your requirements.

You may share your extension (e.g. creating a pull request) and take advantage of the community (e.g. through bug reporting and bug fixing ).

You could be benefiting from the eventual improvements of the tool.


Third option: rethink your requirements

Perhaps you have the same issue than others but you intend to solve it in a weird way. Try to rethink your requirements in a more standard manner.

Software world is subject to trends. If you follow them you will have the software community with you: "Never be wrong alone, if you are to be wrong, better be wrong with most everyone else"

Nevertheless create your own software if ...

It's a part of the core business: "It's ok to reinvent the wheel when you're a wheel manufacturer".

Your requirements are specific and inflexible, hence you need to have a complete control with your own solution.

There is no tool that fits the requirements or that can be extended (with a proportional cost)
in order to satisfy them.

Existing tools are black boxes, are bad documented, expensive or with a poor community support.

So after all, is your company a wheel factory?

We reinvent the wheel