Become Effective with Reuse

From Programmer 97-things

Jump to: navigation, search

When I started programming, I wrote most of the code while implementing new features or fixing defects. I had trouble structuring the problem the right way and I wasn't always sure how to organize code effectively. With experience, I started to write less code, while simultaneously searching for ways to reuse the work of other developers. This is when I encountered the next challenge: How do I pursue reuse in a systematic way? How do I decide when it is useful to invest in building reusable assets? I was fortunate to work with effective software developers who stood out in their ability to systematically reuse software assets. The adage that "good developers code, great ones reuse" is very true. These developers continuously learn, employ their domain knowledge, and get a holistic perspective of software applications.

Continuous Learning

The most effective developers constantly improve their knowledge of software architecture and design. They are admired for their technical skills and yet never miss an opportunity to learn something new, be it a new way to solve a problem, a better algorithm, or a more scalable design. Dissatisfied with incomplete understanding, they dig deeper into concepts that will make them more effective, productive, and earn the respect of peers and superiors.

Domain Relevance

They also have a knack for selecting appropriate reusable assets that solve specific problems. Instead of reusing frameworks arbitrarily, they pick and choose software assets that are relevant to the problems at hand and the problems they can foresee. Additionally, they can recognize opportunities where a new reusable asset can add value. These developers have a solid understanding of how one asset fits with another in their problem domain. This helps them pick not just one but a whole family of related components in the domain. For instance, their insights and background help them determine whether a business entity is going to need a certain abstraction or what aspect of your design needs additional variability. Too often, in pursuit of reuse, a developer can end up adding needless design complexity. This is typically reflected in the code via meaningless abstractions and tedious configuration. Without a solid understanding of the domain, it is all too easy to add flexibility, cost, and complexity in the wrong areas.

Holistic Understanding

Having a handle on only a few components is an easy place to start but, if this remains the extent of a developer's knowledge of a system, it will inhibit scalability of systematic reuse efforts. The saying "the whole is greater than the sum of parts" is very relevant here. Software assets need to fulfill their functional and non-functional obligations, integrate well with other assets, and enable realization of new and innovative business capabilities. Recognizing this, these developers increase their understanding of the overall architecture. The architecture view will help them see both the functional and nonfunctional aspects of applications. Their ability to spot code smells and needless repetition helps them continuously refactor existing code, simplify design, and increase reusability. Similarly, they are realistic about the limitations of reusable assets and don't attempt to overdo it. Finally, they are good mentors and guide junior developers and peers. This is useful when deciding on new reusable assets or leveraging existing ones.

by Vijay Narayanan

This work is licensed under a Creative Commons Attribution 3

Personal tools