I love prototyping, testing concepts and ideas, and simply putting them into practice to validate them or explore technologies I like. I think this is one of many developers’ vices: the healthy urge to learn how a particular framework works, how to deploy with Heroku, or how the plugin mechanism of any piece of software works, to name a few examples.
However, if we want to test an idea, we can’t get lost in the details and lose sight of what we’re actually trying to achieve. Still, I see how easy it is to get caught up in those details instead of focusing on what really matters—what adds value to the project, product, or idea we’re testing.
That’s where the familiar mantra in our profession comes from: focus entirely on a project’s specific functionality, and let the environment we use provide the general functionality through reusable libraries, plugins, extensions, templates, and so on—in short, anything reusable.
Imagine being asked to build an enterprise-management platform and deciding to create everything from scratch, without using any of the products already available as a foundation in the market. That would be, at the very least, unfeasible in terms of time and effort.
And yet, we don’t always think about buying an existing commercial solution and building on top of it. Once again, we fall into the trap of reinventing the wheel without really evaluating the cost. Researching and implementing something for fun or curiosity in your spare time is one thing; justifying decisions at your company that incur avoidable extra costs is something else entirely.
Whether it’s a vice, a bad practice, or sheer ignorance, this is one of the common shortcomings among developers—and it cuts both ways: not knowing how to select market or open-source components, and not knowing how to decouple your own work enough to reuse it in the future.
I’m not only thinking about large commercial products that need to be configured and adapted to specific needs, but also small components such as graphical plugins, templates, search engines, and so on.
Today there’s a real market where you can buy components for a price that’s negligible compared with the effort it would take us to build something similar (and probably not at the same quality, since we aren’t experts in that particular area).
Yes, there are excellent open-source options for almost everything, so they’re certainly worth considering. But we shouldn’t shut every other door and use something free and open source just because we can, when we could get something better for a few euros. What are a few euros if they save you dozens of hours of work?
We recently bought a theme for the landing page of a new product we launched. We needed a very attractive, simple homepage with little content that looked modern, so we decided to use parallax, which has been everywhere for the past two years. You can find some good examples of these effects here.
Whether it’s a trend or not, the fact is that building a homepage like that—and making it responsive—takes a lot of work. You need to be an expert in HTML5 and CSS3 to implement it well, not to mention the aesthetic and design considerations. And I don’t even want to imagine the effort involved in making sure it works well in all (or most) browsers and devices… That’s impossible to guarantee unless you have an enormous amount of time to test it.
Why focus on that development (which isn’t your system’s core) when you can buy a professional, ready-made solution for very little money, one that’s been used by hundreds of people and thoroughly polished? Isn’t that like hiring someone who’s very good in their niche for very little and having them at your disposal? Many of us fail on some projects because we can’t overcome the (slightly egocentric) urge to do everything ourselves, don’t know how to delegate (buying external components is one form of delegation), and fail to focus on what really matters to the project.
We decided to use a package from Envato Market that cost us… $8. That price also gave us the chance to ask the author questions and see lots of examples. In other words, the price of a few coffees for something that would have taken me weeks to implement—and nowhere near as well as an expert in these techniques.
Isn’t that a sign of productivity? Of course, you’ll still want to customize the component enough so that all your work doesn’t look the same.
For $8, you get access to a developer who has put a lot of work into the package you’re buying and who, precisely because they specialize in that area, will probably do a better job than you. The developer benefits because their component sells hundreds or thousands of times.
Reuse is in software’s DNA, but we don’t always keep it fully in mind.
I’ve encountered a certain amount of disdain when someone says they use Bootstrap or something similar, as if that were unprofessional. The professional thing to do is use your resources (your time) as productively as possible. The client always has the final say—they decide whether they like it or not. What’s really unprofessional is charging your company for a month’s work when that month could be reduced to a few hours by spending a few euros on an existing component.
There’s now a huge ecosystem of components. Many developers working on projects spend most of their time not developing software, but integrating different reusable pieces of software to deliver the specific functionality the client asked for. That’s an interesting aspect of our profession.
I don’t think this is a bad thing at all. It’s a wonderful way to avoid doing the same work twice. What’s more, you can easily participate in this market for components and libraries by offering your own work—plugins, themes, and so on—which can also earn you a certain amount of professional recognition.