Application Engineering and Troublehooting with Mind Mapping
The work I do on legacy applications tends to fall into two major areas; the server side with things such as metrics logging, verbose garbage collection logging and the use of SeeFusion and, of course, the code side. It is the last part, the code, that I will discuss in this blog piece.
Since working at Allaire back in the late 90's I have encountered literally 100's of ColdFusion applications some using formal frameworks such as mach-ii, ModelGlue FuseBox, ColdSpring, Transfer and Reactor, some using internally created frameworks. I have worked on MVC frameworks, front controller, page controller, valueobject and many with no framework at all. In all of those the hardest thing to deal with is deep nesting of one kind or another, be it includes of includes of includes, multiple nested calls of cf custom tags or inappropriately extended cfc's and it gets even hairier when we throw in conditionals.
One tool-method that has come to my rescue and of course more importantly to the benefit of my clients, is mind-mapping. I use a tool called FreeMind, not because it is free but because it has all I need to create a visual map of the application code and I have used this both for "OO" centric and procedural applications. These are the main things I look for in a mind-mapping tool:
- Operating system neutrality
- Easy toggling of nodes (opening and closing branches).
- Internal and external hyperlinking.
- Color coding and formatting of nodes.
- Notation capabilities.
- Export to different file formats.
If you have not used a mind-mapping tool I realize some of these needs may be sound unfamiliar, the best way I can describe this is by citing an example. In the event of extreme nesting with layers of includes with conditionals along the way using a mind-map gives a visual way to see all possible directions and events the code could take in all the different permutations possible because of the different conditionals. Each twist and turn is represented by a node which can have multiple branches and nodes, each node can be toggled (collapsed or opened). It can be arresting to see that and if only we could use mind-mapping at the application design stage I really believe we could avoid some of the situations I have to deal in my work on legacy applications in trouble.
If any of you have other methodologies, by all means feel free to comment here.