Libraries, Gems, Jars, Modules, Eggs, and Packages
Good developers avoid reinventing the wheel, and that’s where software libraries are important.
Virtually every programming language has a system for libraries (also known as “modules” or “packages”). These libraries are building blocks of code for reuse. Just as a general contractor does not usually cut down trees to saw custom-fitting lumber, but rather uses pre-cut, standard lumber sizes, so the software developer uses libraries as building blocks in applications. A good example is the common login system: many websites allow Facebook, Google, and other accounts for login as you’ve probably noticed. Rather than rebuild this function from scratch, the code to support this has been put into a library called OAuth that lets developers reuse the functionality.
From a client’s perspective, the main importance is to realize that often the difference between a good, intermediate programmer and a great, senior one is the knowledge of which libraries are the right ones to bring to a problem and which problems need to have a solution built from scratch.
So the next time your developers mention libraries (or gems for Ruby, jars for Java, eggs for Python — many languages have their own terms for libraries), ask them what problems the particular library solves. And when they mention that they are going to build a particular component “from scratch”, ask what is deficient about currently-available libraries that prevents them from reusing those. The discussion may help you see how your needs might be modified slightly and result in a more standard (and less expensive but more robust) solution.