The biggest part of producing software is understanding the underlying problem which the software is solving. This sounds simple enough, right? You have a problem you want to solve and you can easily describe your problem to someone who can then build software to solve your problem.
The problem context
Let's say you want to have a software which always tells you the exact weather outside based on your location. For a human, this is a very simple tasks since humans understand the context of the requirement for extracting information about the current weather. A human can simply walk outside, observe the weather and report it back to you. Easy! A human knows what to do without you explicitly instructing the human to first walk to the door, then to open the door and so on.
When a human looks up the weather outside the problem is very simple to solve:
Look at the weather
Share your findings
Now, when we want to do the same with computers and software, the simple real world task becomes, not so simple. A computer does not understand the context of your request for looking up the weather. A computer can't (or does not know) how to open the door and go outside to look up the weather. A computer does not know where to go to get the right information about the current weather without a human explicitly instructing it!
When we're telling a computer to look up the current local weather we are breaking a simple real life problem into multiple computational problems and requirements which are necessary to solve a problem in the real world. Often we disregard the importance of computational thinking in problem solving which is an essential part of understanding and breaking down real world problems into pieces which can be then implemented on software.
Breaking the problem down into requirements
When we want a computer to fetch and report the current local weather we have to break the problem into multiple steps in the analogy below:
Which door should we go to?
How to get to that door?
How to open the door?
How to observe the weather outside?
How to store the data for reporting?
How to get back to you?
How to report the weather data as information for humans requesting it?
When to look up the weather?
What to do when the weather has been successfully looked up?
What do do in the case if the computer trips on the way to look up the weather and has to return with no weather data?
What to do when the mission to observe the weather fails?
Even on a very abstract level computers have to do so much more to solve problems which are simple for humans but hard for computers. In the end it is worth it since once we've given the computer the instructions once, we don't have to instruct the computer ever again. Unless we renovate our imaginary house that is.
Breaking down problems
By breaking down problems into smaller pieces, we can easily form a model consisting of those pieces or requirements to solve that problem. Models are easy to implement with software and they help developers to resolve the initial business problem in the best possible way.
Breaking down business oriented problems into directions for a computer is essential for software development. Computers are not humans and they do not understand the problem, humans do. Humans are great at understanding and solving problems but not so great at doing them repeatedly and fast. This is why humans program computers to do repetitive and tedious problem solving for them based on the requirements defined by humans.
Ultimately computers are nothing more than dumb machines which obey what humans are instructing them to do. This is why we believe that the most important aspect of software development is to truly understand the problem we're solving.
Filling the gap
As a consultancy agency our job is to ensure your business problem is understood by computers and humans. We're translating your vision, business goals and problems into pieces and requirements which computers can understand. We're also translating computer problems into words humans can understand since it's not always obvious what is required to solve a simple real world problem with computers.
If you're unsure what is the best way to approach a business oriented problem with technology, drop us a line and together, we can find the best solution for your problem.