Aspects such as programming language and persistence should be open to change within a [sub]system every few years, whereas more fundamental design decisions such as data formats and [sub]system responsibilities should be designed for a longer lifetime.