The authors, working with civil engineers, have developed multiple software systems for different areas of civil infrastructure maintenance management. Over the last decade, those systems have evolved from stand-alone applications towards a loosely-coupled federation of collaborating systems. In this paper we outline the lessons learned from our experience with this evolution. Based on these lessons we present five general principles for constructing knowledge-rich systems that can collaborate with one another. These principles have two complementary themes: fostering emergence/evolution while capturing common structure. These themes form the basis of our approach to building loosely-coupled collaborative systems.