Flexibility and pragmatism
Something that we're yet to discuss in detail is how a design can change over time. We're setting out our thoughts on what we think our application should look like, but until we write it, we won't know all of the ins-and-outs of the exact implementation.
It's important to undertake a constant re-evaluation of the work that's taking place to ensure that the quality of what's being written remains high. We've documented our design earlier, but in one key place, we've also had the realization that subpages will be very similar to each other.
Depending on how these similarities are fleshed out in code, there could be scope for refactoring and reusing in a way that isn't immediately clear when drawing up the design document. However, if the implementation does turn out to be sufficiently similar with only minor variations between each subpage, then we need to look at extracting this code into a reusable class.
Code duplication—and even worse, copying and pasting code...