1

I am building a web app in PHP and Symfony.

Basically if we search there are plugins / extensions / bundles for almost 60% of stuff.

The advantage of using them is that you can easily get your functionality and it will be maintained by the author and we don't need to worry about compatibility.

But their downside is

  1. Sometimes it's hard to do little bit customization if we want some extra behavior. In past I used some extension it work ok to start with.
    Then I wanted to do something else which i was not able to figure out and in the end i had to code my own. It was not as efficient but I had full control.

  2. Also if we depend on extension then we don't learn much as everything is done by the extension. Then if I need to switch the language or framework and that extension is not available in that environment then again I had to scratch my head and start from scratch.

But if I don't use them then I am thinking that I am wasting my time. I am confused what should be done?

0

2 Answers 2

4

Another answer already listed a good pros/cons list, and comparatively my answer will probably seem a bit simplistic, but in my mind, the choice is really simple.

If it is a simple extension with almost no time investment, do it yourself. If it is a big extension that will take one or more days to complete, then only build it yourself IF your requirements justify the expense of time. I don't believe in pushing square plugins into a round-requirement :-p, so if the requirements of the project merit it...go custom.

Often existing plugins try to be everything to everyone and add a lot of bloat, complexity, and confusion...or it functions but is a mess programmatically and difficult to maintain, so I avoid them for anything simple. However, in the JavaScript world, something like a datetimepicker is a complex plugin that I'm not going to do myself unless requirements mandate that the existing ones don't work for some reason, because that's too high of a time-investment to justify the cost. Writing my own wouldn't produce a drastically different picker, so the only point in that case would be for the experience itself.

However, it's not always either/or. You can also have the best of both worlds for any project that is on github or similar distributed repository. Simply fork the project, configure it to meet your needs, and then pull updates from the main project into your fork when you can and your project can be dependent on the fork. As long as you don't completely rewrite it, merges shouldn't be too hard.

1
  • 1
    I don't believe in trying to fit squares into circles as well, but I do believe in approximating a circle with a bunch of smaller squares and then filling in the gaps myself!
    – MxLDevs
    Feb 25, 2014 at 18:57
3

Some of the pros of using existing components/plugins/extensions/frameworks:

  • You don't have to re-invent the wheel. This can save you time and money.
  • Popular components are probably well-tested, well-supported, and well-documented (in theory... hopefully)
  • Consistent behaviour across all your applications that use these components, as well as behaviour that's consistent with other systems that use them. That could make for a better UX.
  • New developers who are familiar with a popular framework don't have to learn your home-brewed stuff.

Some of the cons of using existing components/plugins/extensions/frameworks:

  • Existing components might not do exactly what you need or want, and customizing to get exactly what you want might be very difficult, if it's even possible.
  • You're not always in control of updates and dependencies. Sometimes this is a problem.
  • Exploits in popular components could expose vulnerabilities in your application.
  • If you become heavily dependent on something that is only available to one platform/language/OS/whatever, switching to something else will be difficult.

Overall, I find the pros usually outweigh the cons. I suspect many people agree, considering how popular plug-in frameworks are.

Not the answer you're looking for? Browse other questions tagged or ask your own question.