Over a million developers have joined DZone.

Get Started with the Outputs!

DZone 's Guide to

Get Started with the Outputs!

Instead of slicing the future system by inputs, slice it by outputs, and then build up the capability to produce these outputs incrementally.

· Agile Zone ·
Free Resource

A major rewrite of a legacy system is arguably the most difficult situation for slicing deliverables into small valuable pieces with user stories. Big legacy rewrites are often a solution of last resort when so many problems have built that to go on maintaining and adding to the old system is no longer viable. Such projects often have many ambitious goals, such as to speed up future delivery, unlock critical business oppurtunities, adopt a different architecture that allows for growth and reduces costs by consolidating component.

Chris Matts popularized the idea that the value of an IT system is mostly in the outputs it produces, and that the inputs are just means to an end. Instead of thinking about the log-in screen, think about the reports. Instead of writing a user story from development perspective, write from the end users view.

Instead of slicing the future system by inputs, slice it by outputs, and then build up the capability to produce these outputs incrementally.

This strategy is especially successful if there is some critical output that the legacy system cannot produce neatly — aim to deliver it first. People who would benefit from the output are more likely to turn a blind eye on performance problems, an incomplete user interface, or temporary workflow issues. Image title

The key benefits of thinking about outputs first is that it becomes much easier to create a sensible incremental delivery plan. Usability testing is given a thought at the time of slicing and at the very beginning of the development. Outputs are much easier to slice than inputs because they enable users to achieve something concrete, and people can have fruitful discussions on them. The outputs are tested and begins during the unit testing for units of code. The defects discovered at the unit test level are the least costly to resolve. During iterative development, users test iteratively with the programmers. This is ideal for discovering and resolving usability issues early in the development cycle.

Ideally it is more difficult to get a positive answer to "Can we let people register without entering an address?" than to "Is an exception report that shows only a country of registration and not the street name and number useful?" And even if registration without an address is approved, the change is unlikely to reach production and real users. A half complete exception report that flags serious business issues early will quickly be embraced even if its not the most secure.

The key benefits of delivering a valuable output quickly also prevents the mercy bullet approach later on; a system that serves valuable data in production is not as easy to kill as a system that after six months of build-up has great registration forms but does not provide useful outputs.

Agile ,input ,output ,end user ,legacy rejuvenation

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}