Every software asset in your application, product line, or codebase isn’t going to be reusable. In fact if you are trying to make everything reusable there is a good chance that you are introducing needless complexity into the design. Recognize that there are areas where reusable assets are going to be a natural fit and areas where they won’t be. You might be tempted to make things reusable just in case you need them in another project or application. Pause and reflect at such points because hindsight is 20-20 and you might get better at discerning what is and isn’t reusable over several iterations of a system. There are always going to be assets that don’t fit well together or have neatly packaged interfaces and that is okay!
There are areas where it makes sense to build, adapt/refactor, and maintain reusable assets. For instance – connectivity components, domain specific data and business logic such as data services, business services, model classes/repositories, infrastructural components and utilities are all classic areas for reuse.
Ask hard questions if you are unable to make up your mind. If nothing else always ask if there is business relevance to the asset and if the asset’s functionality varies based on sales channel/user/time/business policies/rules etc. If the answer is no, you probably don’t need to invest efforts in making the asset reusable. At least not right away.