Writing as a tool for problem solving in Software Development — Part 1
Writing or the process of writing can be used as an excellent problem solving tool for programmers, as it requires clear thinking, correct understanding of a problem domain and dealing with daily complexities.
We can understand a problem well with writing, by breaking it down and thinking about it. As programmers often do, rushing to implement solutions without clearly understanding the context and expected outcome, results in waste.
Thinking VS Writing
Why take addition time and effort writing down a problem definition when you can simply think about it? Why bother with more work load?
“Your mind is for having ideas, not holding them.”
― David Allen
Nonetheless, our brains are better equipped for thinking and less for remembering things. By reducing information in your head, you can focus on understanding and analysing the problem at hand.
A cup filled with water overflows — when more water is added.
Similarly, you feel overwhelmed when you try to concentrate on many things. Instead, a better approach is to write down — everything you think of about a problem — to keep your mind empty for solving it.
With thinking alone, you are limited in tracking down every possibility. You cannot track CONS VS PROS of an element for instance, as your brain can hold one thought or type of thought at a time. Writing provides you a way of usefully understanding, structuring, analysing and presenting your thoughts emanating from complex problems.
When you break down an issue, you gain clarity helping you to isolate specific parts, causes or solutions. Furthermore, writing down by hands also helps in retention — useful when you have plenty of elements to cater for.
User / Actor perspective
This process enables you to define a problem or situation in terms of action — usually a person, the Actor who wants to do something — for instance going from Point A to Point B. You can describe the flow as a change of state or in terms of a transaction(s).
With the User / Actor perspective, you define scenarios that are either goal or task based. The biggest advantage with this approach is that you don’t confine yourself to details, at the initial stage of problem understanding. As you get more insight and information on the subject, you may get better solutions.
For example, imagine a user who wants to export in a spreadsheet, a series of products that are almost out of stock. You can start describing the outcome. You know exactly what you are aiming for. From this step, you can identify potential obstacles, such as user authorisation, or limiting technology.
You are not tied down by irrelevant details that will most probably change later — such as the colour of the button.
You can also use Full Scale Task scenarios by writing down every step done by the user to attain a goal. You gain even better clarity of the problem and the potential roadblocks that you can address first without getting stuck on implementing any solution.
An example of such scenario, the User :
- first logins on the system as an admin
- navigates to the list of articles page
- applies predefined filters such as the products nearly out of stock
In terms of Creativity, Brainstorming is the act of generating ideas without filtering (skipping judgement). This process helps you think of ideas, alternatives and solutions that you would otherwise not think about.
With brainstorming, you get a broader image of a particular idea or solution such as understanding required dependencies or side effects.
For example, when working on legacy projects using an ancient version of NodeJS — a popular framework for building network applications, my project failed to build, as I had a recent version. Once I understood the potential cause, before directly looking for solutions, I brainstormed key words that crossed my mind — words like ‘compile issue NodeJS’, ‘gulp node version issue’ and so on so forth. I noted down the first few solutions I got and the second one worked.
Another benefit of brainstorming, is that it allows you to focus on the process instead of the outcome. You have several solutions you can use and you don’t get attached when things don’t go as you expected. You don’t feel irritated because you don’t put all your eggs in the same basket. Imagine in the above scenario if I had only one solution that did not solve the issue. I would get bogged down to unnecessary details.
In short, you don’t rely exclusively on your first idea — instead with more information, you can think of better ideas and be more effective in your decision making.
And by writing them down, you can visually see everything in front of you. You can see inconsistencies, abstract ideas or logical issues before attempting anything.
To be continued.