So you're building a Drupal Feature! Woohoo! Okay, so…. What to include? What to leave out? How to structure the thing so it doesn't conflict with other Features? How to avoid known issues? Where to start?
When, in theory at least, you can make an entire site into one big Feature, these questions become extremely important.
If you're using Features simply to help facilitate your own site-building workflows, this may be something you can pretty much ignore. When dealing with Features you've made for yourself, you may remember your thinking, you may follow your own logic, you may be using Features as a blobby deployment system for all kinds of stuff glommed together. Whatever works. It's all good.
But that approach won't fly with publicly shared Features. In fact, it won't work too well for teams either, probably. Without best practices, clearly laid out and understood by all, Features can trend towards amorphous nightmares. Features might conflict with each other, undoing each other. Improperly utilized, Features can easily become a nightmare that slows you down, undoes your hard work, and leaves you ready to scream and throw your computer out the window.
Enter KIT
The KIT Specification clearly lays out requirements for building clean, discrete Features.
This document provides recommendations and requirements for Drupal features to ensure the interoperability of features between different distributions and prevent conflicts between features themselves and between a compliant feature and a distribution….
–KIT Feature Specification 1.0-draft
The specification goes through terminology, namespaces, inclusion of user roles and permissions (and what not to include), working with variables, paths and menu items, blocks and dependencies.
Not all Features have to be KIT compliant, of course. But having a good, clear specification for self-contained Features that mostly likely will not break other things in your site is a great thing.
If this topic interests you, be sure to visit the KIT issue queue, where there are several discussions on clarifying, adjusting and improving the KIT spec. Good stuff is happening.