While technical practices such as refactoring, design, and testing are essential to a successful agile project, avoid having purely technical tasks on the product backlog. Rather, consider how doing these tasks furthers the progress of the project. When working on backlog items, always consider effort required to refactor, design, and so forth as part of the estimate, since delivering code that can sustain change is essential to agile success.
Delivery and Deployment
Working software is the measure of progress in an agile project, but “working” means more than just “can demo” or even “compiles and passes automated tests.” Software isn’t useful and stakeholders cannot provide useful feedback on it until it can run on the target environment. Also, to be “done,” you need to address differences between a development system and a production-like one. There are two steps to building code in a way that supports an agile approach: developing in vertical slices and deploying early and often to a target environment.
The vertical slices approach is to develop end-to end features, from the user interface (UI) through whatever backend systems are involved. Rather than focusing on the data model or the UI or application tier, building end-to end (though less rich) solutions has advantages. Users can see the application do something. A “data model,” while important, is not easy to demonstrate. The team can validate the interactions between layers and make changes to make work at other layers easier, thus minimizing unnecessary rework. UI implementation can be influenced by decisions made at the data layer, for example, and vice versa. The team and product owners can understand what feature are truly necessary and have a better sense of what to defer if something is late.
Make your application available on a target system early and verify the deployment and installation process often. This will give you an early opportunity to identify decisions that will simplify the deployment and configuration process.