No doubt it is possible to produce software without performing an initial software design. The "from the brain into the terminal" approach is maybe still the most widely used "design method". If you are lucky to use an object oriented language such as JAVA or C++ this may even compensate some of the problems of such an ad hoc approach.
However, you will find that what you believed to save by skipping the design phase, you have to spend on higher testing efforts and bugfixes later on. Worst case these bug-fixes happen after your product has been shipped to the customer. Further, without a proper design you have to expect higher maintenance costs. Any addition of features may destabilize your software and bring contained faults to "the front". Sleeping bugs which were contained in your software and did not bother so far, now lead to failures in your system.
A proper design will definitely minimize these problems and eventually save you a lot of money. There is no substitute for a good design. Exhaustive testing may enable you to ship a software which is giving the expected results, but at a too high price.
On these pages we want to give you a few suggestions for a possible design for microcontroller software.