Take a pack of cards, shuffle them well, and place them on the desk in front of you. Could you accurately tell me what the order of the cards would be, without looking?
Now spend 2 weeks in a software development team, writing code & using services, and deploy that code to your cloud server environments.
Could you tell me where the bugs would be, before looking?
In both cases we have a rough idea of what’s in the product at the end. But the detail, how its actually going to play out? we have no realistic idea.
Take the playing cards…
If we lay the cards out one card at a time. Then the order in which they are laid out, has probably never been seen before. Ever.The number of permutations of the well-known 52 playing card pack is 80,658,175,170,943,878,571,660,636,856,403,766,975,289,505,440,883,277,824,000,000,000,000.
OK, now let’s get back to our code.
Even trivial apps, include dozens of code libraries, and are built on a myriad of operating systems calls. These in-turn process a huge number of potential inputs, and distribute them across an complicated series of devices each with own their configurations etc. You get the picture. There are many combinations of code, inputs and tools involved.
So, as with the playing cards, we might know at a high level what is coming... But we won't know for sure until we play it out.
If we play the cards out, one by one, we learn about their ordering. We know what 'works', and can better judge the nature of the unseen cards.
Remember that, next time someone asks you to write your tests before the app is developed.