Why this blog?

June 1, 2008

Over the past few years, 2005-2007 I have taken some Open University courses to do with Systems Practice. These were:

I started taking the courses because I thought it would help me in my work as a software developer. It has but not in the way I originally thought. Originally I thought the courses would be something like systems analysis and I would learn a new skill to use at work. From the first course I have been trying to apply what I have learned to my work. After the second course I started this blog I thought I would try to write down my thoughts but struggled with ideas on what to write. Having finished the third course and had some time off I thought I would give the blog another go.
The third course introduced the idea of the practitioner. The idea has stuck and this is why I have renamed the tag line of the blog “Thoughts on the practice of Software Development” as I would like to discuss what it is to be a Practitioner of Software Development.


Systems Thinking is a set of tools and concepts that allow one to think about and gain understanding of complex issues. Systems thinking takes a holistic approach using abstraction as a way to simplifying complexity.

Systems Thinking can be applied in any area. I have been finding useful to think through software design issues using Systems Thinking concepts. I have found it difficult to discuss design issues in an abstract sense without resorting to programming concepts such as class or object. Software developers are taught computer languages and possibly some analysis and design but I have not heard of any course that has a specific thinking skills part to it. Possibly systems thinking could be that thinking skills part.

The ability to look at the whole problem is a great advantage compared to a reductionist approach where things are divided up quite often allowing things to be overlooked.

A system is a collection of components organisied to fullfill a purpose. A system maybe part of a hierarchy of systems and it may contain sub-systems. A system is a transformational process that converts it's inputs to its outputs. A system has a boundary to distinguish it from its envirnoment.

Other concepts include: perspective, feedback, control, types of situations, modelling and connection.

I am interested in how I can apply Systems Thinking to Software Development. Originally I was expecting Systems Thinking to be similar to Systems Analysis in some way. Whilst taking the Open University Systems Thinking Principles and Practice I was initially surprised as what was being taught was based on Soft Systems Thinking.

The course looked at how human systems could be examined. What was taught I could see would be very useful in examining the issues in the software development process. I thought that the ideas would be inappropriate in the design of software. I have been revisiting my notes from last year as I am taking another course Experiencing Systems. I wondered whether the concepts I was taught last year could be used in software design and thought the idea worth pursuing. This is what I hope to do in subsequent posts.