  At our behest or otherwise, while our software is being executed, a huge
variety of design assumptions is continuously matched with the truth of the
current condition. While standards and tools exist to express and verify some
of these assumptions, in practice most of them end up being either sifted off
or hidden between the lines of our codes. Across the system layers, a complex
and at times obscure web of assumptions determines the quality of the match of
our software with its deployment platforms and run-time environments. Our
position is that it becomes increasingly important being able to design
software systems with architectural and structuring techniques that allow
software to be decomposed to reduce its complexity, but without hiding in the
process vital hypotheses and assumptions. In this paper we discuss this
problem, introduce three potentially dangerous consequences of its denial, and
propose three strategies to facilitate their treatment. Finally we propose our
vision towards a new holistic approach to software development to overcome the
shortcomings offered by fragmented views to the problem of assumption failures.
