The paper discusses methods and strategies for designing software systems for modern observatories. The development
of software continues to be a challenge for new projects, in areas ranging from budget and schedule to design and
operations. Software systems can be challenging areas to plan and manage if effective methods are not undertaken early
in a project.
Software is itself a system, developed similarly to other, more classical systems. It may be distributed across many other
systems, but it must function as a single, coordinated entity. It is process-oriented, executing a behavior consistent with
its input parameters and delivering a desired outcome. It is based upon a unifying architectural concept and built around
a common infrastructure. Understanding and implementing these characteristics early in the design stage allows
software to develop efficiently, rather than evolving toward them in a semi-random walk.