Most of us make a variety of assumptions during our working day. If we didn’t we’d have to assess every problem from every possible angle in a logical way, which I think we’d all agree would become very tiresome quickly.
Most of the time we make partial assumptions based on pieces of the whole picture; this includes either information we’ve observed first hand or collected by others. Sometimes we even make a priori assumptions based on no first-hand observation at all.
Software Engineers are very good at identifying patterns but I think an unfortunate trap we often fall into is linking disparate ideas, especially in the absence of a complete picture. Often I hear engineers say that because they’ve found a bug today, the bug has existed since the feature was created. It’s an easy (and quite egotistical) assumption but invariably a flawed one.
How can we know whether an assumption is right if we’re acting on incomplete information? All correct assumptions (that we may not discover were right until some time has passed) have a clear, reproducible line of reasoning. While there might be huge gaps in the breadcrumb trail between two seemingly unrelated ideas, bread fragments will always line the path between logical assumptions.