The Software Testing Club recently put out an eBook called "99 Things You Can Do to Become a Better Tester". Some of them are really general and vague. Some of them are remarkably specific.
My goal for the next few weeks is to take the "99 Things" book and see if I can put my own personal spin on each of them, and make a personal workshop out of each of the suggestions.
Suggestion #15: Get an Understanding of Systems Thinking - Martin Huckle
Most large scale problems in the world do not exist in isolation. When a solution is applied to one area, it may have an averse effect somewhere else. Understanding how problems have ripple effects in other areas is the basis for systems thinking, and the ability to look at issues as they relate to broader areas.
Systems thinking, in its simplest sense, it trying to look at issues and situations as part of an interconnected group. A "simple" example would be to consider traffic patterns in a city. How could the traffic patterns in a city be improved? Applying isolated solutions to individual areas (providing more buses on city streets, increase the number of trans that run into the city) may yield a benefit for those specific instances, but have spill-over and cause problems in other areas, potentially making those areas worse. Only by thinking of all the aspects that affect traffic can solutions that will have a cumulative effect be considered, studied and applied.
Workshop #15: Examine Systems in Software And Outside of Software
To make matters simple, and something that can help get you into the mood of thinking about systems:
1. Look up the classic board game "Mouse Trap". Sit down and consider all the parts of the game, and the variety of systems that connect together to make viable solutions.
2. Consider a web application. Based on what you can see from just the user interface, try to think about all of the moving parts that make the application work. Create a state diagram that can show how the various systems (pages, screen, buttons, navigation links, etc.) fit together. See how complete you can make the map just based on the visible elements.
3. Using the same application, view the page source, and see if you can determine libraries and attributes that help make the pages appear the way that they do. Make a diagram as to what the system could be (some areas such as back end scripts and database topology may not be accessible, but do the best you can to identify all of the underlying systems that make the application work.
4. Taking the software example above, if you have access to the application and code base, try to complete the exercise and diagram. See which areas interconnect, which scripts call other scripts, which database elements are inserted, updated and deleted, etc. Try to make as complete a diagram as possible of the entire application and all elements that make it work (include machines, disks, networks, etc.).
5. To go into bigger systems, and broader ideas, Gerald Weinberg has written a book about General Systems Thinking that would be a wonderful addition to this group, specifically because Weinberg's writing style helps make a lot of these ideas more fun than they would be if you were to tackle them from other examples (seriously, this is a topic where a light touch and some humor help considerably :) ).
Systems thinking is a whole discipline and covers some interesting problems, not just in the software world, but in areas such as ecology, economics, politics, demographics, population, ethics, etc. Seeing issues as interconnected, and having effects on other components helps to shift the way that we think about problems.
In the software world, few applications have issues that are independent and isolated (beyond cosmetic to spelling/typos). Getting in the habit of considering the components that make up software systems. From the code at the functional and class level, up to the services and network dependencies, issues can be seen in the context of the overall systems where they reside. By seeing these inter-relationships and dependencies, the trade offs for solutions can be examined with regards to their effect on each other.