Skip to main content


Showing posts from September, 2006

The big three: Flexibility Extensibility Maintainability

[Time: 1 min 45 secs] As we have said earlier, software is rarely ever made and forgotten. After the release, there will be change requests, there will be requests for new features, and bugs to be fixed. And why after the release, even when we are in the process of making software we have to interact with code that has already been written. It is with the goal of easing all of these, that we design software. The design should enable flexibility, extensibility, and maintainability. [Time: 9 mins] FLEXIBILITY What is flexibility? Actions for change Identify, Change, Test Detractors of flexibility Complex code Lack of clear responsibilities for classes and methods Unreadable code Repetitions in code Uncontained functionality Design decisions that promote flexibility DRY (Don't repeat yourself) KISS (Keep it simple) No tricks Loose coupling Encapsulation Not

Goals Of Good Software Design

What is object oriented design? What is it all about? What are it's benefits? What are it's costs? It may seem silly to ask these questions in a day and age when virtually every software developer is using an object oriented language of some kind. Yet the question is important because, it seems to me, that most of us use those languages without knowing why, and without knowing how to get the the most benefit out of them. -- Uncle Bob It's time we asked these questions. Let us start with the most basic of them all: What are the goals of software design?  In this section we will discuss the goals of software design and how object orientation helps us achieve those goals.  Note: This post was originally posted on my blog at

Goals of good software design

I have started publishing the section on Object Oriented design, and this has led me to ask some very basic questions of myself: What are the goals of good software design? Here are some points that come to mind: 1. Flexibility: We may have to change the way in which certain things work. The design must be able to accomodate these changes with minimum effort. 2. Extensibility: The software will need new features. The design must be able to accomodate them easily. Ideally we must be able to add new stuff by adding code and not by modifying existing code, because modifying existing code may break stuff that was already working. 3. Maintainability: maintainability = Flexibility + Extensibility ? Perhaps, but also important for maintainability is being able to understand the code. Which can be achieved by assigning appropriate responsibilities to classes, and not abusing inheritance. These are common, but are there oher goals? I came accross an article on the net that sug

Networked Reciprocal Learning

Sometime back I read an interesting article which says that the half life of technical knowledge (period after which knowledge becomes obsolete) is reducing. A few decades back it was perhaps 10 years which has now come down to 18 months. This has significant implications for training and learning. The most important implication is "no one knows it all". It is just impossible for a person to know everything in their field. Taking an example from the software industry, in 1996 when people first started working in Java, there were developers who knew all of Java, but as the platform started bulging it became increasingly difficult. Now it is possible to know only a part of the platform really well, and as the platform grows, keeping up with the latest information is even more difficult. Maybe we need to change the learning and training paradigm. Instead of trainers, we need facilitators who are part of a reciprocating learning network. No one is only a learner or only a tr

Personal Learning Environment

We're living in times where our knowledge and learning demands are growing at a rapid (sometimes ridiculously rapid) rate. I often find myself overwhelmed with the things that I have to learn to get my work done. The time has come, where we must take charge of our learning requirements. The traditional one size fits all approach just will not work in the current environment. Every person needs to specialize and generalize their skills in different areas. The one size fits all approach assumes everyone has the similar learning goals. The need of the hour is a personal learning process. This image from Harold Jarche's website shows it very well. Many thanks to Harold Jarche for the image. Each one of us can customize this process and the tools to suit our individual requirements. Quality control guru, Edward Demming, said "learning is optional, so is survival."