In software design the use of interfaces to give a level of abstraction can be very tricky.

Consider we have an interface that has many methods, and a set of classes implementing that interface. Now if we want to create a new class that is interested only in a few methods of that interface, we will have to implement all the interface methods, even the ones we wouldn’t want to put in the new class. Now, one may leave the undesired methods bodies empty and another may throw a method not implemented exception, and that will cause an inconsistent and unexpected behavior at runtime.

In software design, that interface is called polluted or fat interface; because it has too many methods that not all of its implementing classes would want to know about. See the following diagram:

Interface segregation principle has solved this issue by dividing the polluted interface into smaller ones, and each class will decide which interface to implement according to its needs. See the following diagram:

Description: C:\Documents and Settings\Administrator\Desktop\blog\week 7\why-hire-us.jpg

In the software development planet, it’s common to get a client request asking something like: “please change the module behavior and make it do so and so”. Five years ago, I would have implemented such requests. But now I would ask: why do you want to do so? What are you trying to achieve with the new behavior. Knowing the reason helps not only understanding the business behind the request, but also brainstorming and getting even better solutions.

Let me give you a simple – but real – example of how searching for the “why” resulted in a better solution and getting more client satisfaction.

We were responsible for building a website for one of the NGOs, which contains different fund raising programs through offline and online donations. Each program page consists of a program description part at the top of the page (rich text content describing the program, history and ways to give), followed by an online donation form.

Two months after launching the website we got a client request: “please move the donation form to the very top of the page and make the description goes below”. Such a request would have been implemented in 30 minutes easily, but we stopped for a moment and asked ourselves: “why would the client want this?”

After a phone call we figured out that there is an online campaign on a specific program focusing on online donations, and the client wanted to make sure the form is the first thing the users will see when they land to the program page.

When we knew that, we simply created anchor tags and gave the client an anchor link asking them to use it for the marketing of this online campaign. This anchor link simply lands to the program page and directly jumping to the donation form at the bottom achieving the client need, and at the same time keeping the normal flow for the site users – who want to get information about the site. And I bet that the client would have reverted to the old way of displaying a program once the campaign is over.

There are a lot of creative solutions that emerge when the client and the developer know why a request is requested. Trust me, a lot of alternatives will appear at this point, and you can choose one solution that satisfies the client needs as well as the development needs. So don’t ever claim that “the client wants it that way!”


Time management is the art of how to control spending your time doing different activities. Some people  relate time management to work tasks only, but I truly believe that if you want to be successful you have to  relatetime management to all your life activities especially personal ones.

Time management is very important because available time is limited, everyone has many tasks to be done at the same time but not all tasks have equal priority, without time management concept you will spend most of your day running after  undone tasks.

So either you manage your time or your time will manage you ;)

I decided to manage my time and I succeeded in doing so using Eisenhower method (a well-known method) so I want to share it with you:

  1. Define tasks list: define your tasks in a clear way and  assign an urgency factor to each oneso you can determine if it’s something that needs you to take some kind of immediate action or not.
  2. Define each task importance: This will help you determine if it’s something you need to do yourself or if it’s something that you can delegate.
  3. Then you can assign your tasks in Eisenhower guidance table easily.

So you will get 4 categories of tasks that needs to be implemented.

Category 1 are tasks that are both urgent and important. These tasks need to be done by yourself immediately. So it is better that you plan for it immediately and schedule the start and end of each task. However, spending most of your time doing these tasks, may  get you stuck in firefighting mode all the time,  what might steal the time to take a deep breath and plan for your future. Be careful!

Category 2 tasks are tasks that are important but not urgent. These tasks need to be done by yourself but not immediately so they need to move to your tasks plan in order to take its turn.

Category 3 tasks are tasks that are urgent but not important, so they require immediate attention, but not necessarily by you. Try to delegate these tasks to others to keep yourself focused.

Category 4 tasks are tasks that are neither urgent nor important, so they are mostly a waste of time. These tasks should be dropped.

This method is easy and organized one, you can use any other method you feel comfortable with but don’t ever forget to track your progress so you get motivated to implement your schedule.

Also you have to make plan and re-plan periodically to keep your daily schedule updated.

REMMEMBER! Either you manage your time or your time will manage you ;)