Friday, June 5, 2009

On Favoring ‘Why’

I assume most of you, as a student, studied the 7 Ws – when, what, why, who, where, whom, and how (funny, the last one does not start with W). We have been using all these question formatters all our lives – but, have you ever favored one over the other?

Last August, I went to Ethiopia (I am originally from there) and did get a chance to catch up with my friends and relatives. I was out of the country for close to two decades. Eager to know about my life in the US, they have asked me different kinds of questions such as how is life in the US? How I overcame homesickness? But, one of my friends that I grew-up with asked me why I chose to live in the US. Why I did not come back to Ethiopia after my studies in the UK? This question took me off-guard.

‘Why’ is always fascinating to me and also, I assume, to other people especially kids. If you have kids, you know what I am talking about. Let’s see some scenarios on where we use ‘why’ and how crucial it is. Suppose, at work, some kind of change is to be implemented that may impact many people. If you are the leader of change, you should have a conceptual clarity on the need for the specific change and be able to communicate the reasons to those people affected by the change. When you are communicating the need for change, start with the ‘why’ of the change. People more often start with the ‘what’ of the change and get directly to how the change is going to be implemented. People, especially professionals, crave to know the impetus for change. Once they understand the reason, it will be easier for them to go along with the change or even to participate in implementing the change. If they are part of the change process, that means they owned the change. Remember, people support and stand by a solution that they have contributed to or helped create. For this to happen, it all starts with understanding the ‘why’ of the change.

Toyota uses the ‘Five Whys’ (5 Whys - Wikipedia, the free encyclopedia) approach to get to the bottom of a problem – root cause analysis (RCA). I found this excellent example involving Jeff Bezos of Amazon finding a root cause of an accident. He only asked few questions (whys) to get to the bottom of the incident and of course to the solution - see Jeff Bezos and Root Cause Analysis.

There are many cases and scenarios where we can discuss the benefit of answering ‘why’ – but, I hope you get the idea. The point is - in order to answer the ‘why’ of something, you need conceptual clarity. Answering ‘why’ needs thorough thinking and clarity in your reasoning. If you do not have any clarity in your answers, you should expect more questions to follow. Watch out of people that provide a quick and closed answer for a ‘why’ question. Such answers as – ‘Because I want to’; “It is not a democracy’; ‘Because I saw it in my dream’; and so on are very shallow. If you have a boss that is not capable of answering your why questions – run away from him/her.

I threw or blabbered some ‘wording’ to my dear friend to the question that he asked me - why I chose to live in the US. I realized how difficult is to answer the ‘why’ question without conceptual clarity. I also wonder how good all the answers were to the other questions from my family and friends - thinking that I might not answer the 'why' question.

Why do not you try to ask yourself some kind of why question – like, why do you choose to work for the company you are working for now? Are you sure of your answers?

Currently Reading: Pragmatic Thinking and Learning: Refactor Your Wetware (Pragmatic Programmers) by Andy Hunt.

Sunday, May 24, 2009

On Incredible India

I just finished my second visit to India – we have two teams in Kochi (Cochin) and Bangalore. Even though the second time, some of the things that surprised me last time did surprise me again. I do not think seeing the whole family (up to four), including kids as young as months old, being on the same motor bike in the crowded streets pushing and shoving with all kinds of vehicles is a sight that one can get used to.

The streets are as crowded (may be worse) as before - pedestrian, autos (three wheelers), scooter, small cars and big cars still walk or drive aggressively. I do not understand why people are not driving orderly – even on a single lane people seem to enjoy crossing lanes in and out. I plan to watch my Indian colleagues how they walk – in a straight line or in a ziz zag. I might get the answer from there. I believe most of them are driving fast because they are in a hurry – if that is the case, their sense of urgency is understandable. There is also the noise factor – ‘driving by ears’ seems to be the necessary skill by drivers to be on the street. Drivers continuously use their horn to signal each other.

It seems everybody thinks that traffic accidents are to be seen as a risk of doing business. Accidents do happen - last time I visited, I witnessed an accident between a motor bike and a car. I did not stay long to learn about the consequence. Even in my current stay, in one of the offices I visited people were wearing the black band on their shirts. I learned later, one of their colleague’s spouse was killed in a car accident.

Apart from the ‘usual’ still India amazes me – the potential the country holds seems to be immense. Cities are full of people – all these people, what can they achieve? I believe, the current trend of utilizing the knowledge workers in the IT industry is not going to be enough to lift India to a different level. I am no economist but seeing the excesses and the poverty level tells you that India needs to do more – a lot more.

So, where to India? How fast can you move?

Are your people only aggressive on the streets? Will they take you ahead to the future the way they drive on the streets?

Do your children work to bring you to the next level with the same kind of sense of urgency they show on the streets?

The future is to be seen – I wish this country to be prosperous and lifting the beautiful, the modest yet poverty stricken lot with her. I love the people, the culture, the food, the music, and a lot more. Both of my visits were enjoyable – I continue to admire the beauty of this country.

Good Luck India!

Currently Reading: Made to Stick: Why Some Ideas Survive and Others Die by Chip Heath and Dan Heath.

Saturday, May 16, 2009

On Component Interface, Specification, and Contract

Component Interface is a collection of operations that are used to specify services of a component. It is an abstraction of the behavior of a component that consists of a subset of the interactions of that component together with a set of constraints describing when they may occur. The interface describes the behavior of a component that is obtained by considering only the interactions of that interface and by hiding all other interactions. The description of a component interface consists of a signature part, describing the services provided by a component, and a behavior part, describing the component’s external behavior. Each operation has zero or more input and output parameters and a syntactic specification associates a type with each of the parameters including a return type.

The specification of a component is different and composed of many parts. Defining which interfaces the component will offer is just part of the whole component specification. Components can implement (export) one or more interfaces, called provided interfaces, and they can also use (import) interfaces, called required interfaces, from other components. The component interface is used both to implement the services and to describe the services so that to allow clients to find suitable services and to understand their purpose, functionality, usage and restrictions. In short, the interface defines every thing the client needs to know. An interface does not specify how implementations of this interface must interact with other components to fulfill their responsibilities; that is defined in the component specification.

While an interface defines a set of behavior, a component specification defines an implementation and deployment boundary. By specifying a set of interfaces that must be supported, a component specification defines the total sum of capabilities of any component created at run time from the implementation. This component specification can also define how the implementation must interact with other components. Knowledge of such interactions does not form part of the interface specification and so cannot be known directly by the client. We define these interaction constraints somehow in the component specification. Behavior is defined as a set of interfaces and a component specification is realized as a component implementation. The basic goal of component specification is to create a set of models that collectively describe externally visible properties of the component and constraint that are applicable to the proper implementation of the component. This goal makes component specification the ultimate guide for use of the component by clients, and for proper implementation of the component by implementers. Clients will pick and choose components based on the component interface. Component implemented based on a specific component specification should exhibit the same behavior regardless of who implemented it, what language is used to implement it, and in what environment it is installed.

Since components can implement (export) one or more interfaces and they can also use (import) interfaces from other components, at a minimum, component specification should provide a contract that states both the services a component offers and the services that it requires in fulfilling its commitments. Contract is mainly composed of three aspects: pre-condition, post-condition and invariant. Pre-condition is a condition that a client must be sure is true; otherwise, it is not legal for the client to use the service. Post-condition is a condition that should become true when the service is executed. Invariant is an observable property that does not change throughout the component’s life-time. Precisely, an invariant property is a property that always has the same value whenever the property is inspected.


Related Blog: On Software Component

Currently Reading: Confessions of an Economic Hitman by Perkins John

Thursday, May 7, 2009

On Software Component

The early promises of object-oriented technology to provide reusable software elements did not bear fruit as expected. One of the main reasons for the failure is that objects are too fine grained for large-scale reuse efforts. In order to be reusable optimally, objects need to be coarse-grained in the services they provide and should have a published interface of what services they provide. One of the practices that gained wide spread acceptance in the software development industry through object technology is the practice of reuse using design patterns. Patterns embody accumulated knowledge about proven reusable design elements for software development. The use of design patterns has improved the quality of software and reduced the cost of developing software in object oriented technology for more than a decade.

A business software component is a self-contained and self-deployable (could be third-party composable) software element providing a set of inter-related services described in well-defined and published interfaces. As the natural successor of objects, components are being utilized in small and large scale software developments. Developing software from components promises benefits such as reuse, complexity management, change management, and time-to-market. The idea of approaching software development using components to imitate its hardware counterpart has been around for a while. But what makes the use of components for software development more feasible at this time is the use of objects and design patterns for component development.

Component Based Software Development (CBSD) focuses on development and composition of components through their interfaces. Composition or integration of components to form a functioning system requires designing collaborative behavior of multiple components to form a system based on a specific component model and component model framework. The current component based development is different from previous approaches, even with object-oriented technology, in its separation of component specification from implementation.

I would like to further write some notes on using components. The above paragraphs can be assumed as simple definition/explanation of components and the need to use them.

Thursday, April 30, 2009

On Taking Charge

It was a one summer day in 1990 and I was taking driving lesson to take a test for driving in town. The Learner VW has two breaks, one on the driver side and the other on the passenger side where the instructor sits. On most previous occasions driving around in town, whenever I need to break the instructor already applied the break and my attempt to break would be in vain. I did not like his actions and I made it clear to him as such. Anyways that summer day, we completed our driving around and we were about to park the car. On the parking spot we were about to use, people were sitting - most of them friends of the instructor probably in the same business as the driving lesson teachers. When we approached the parking spot, I started slowing down but not applied the break to a stop. Of course, the instructor applied the break and angrily looked at me. Even though I do not remember how I felt at that time, my response was like - so what you always applied the break with out waiting for me and what is different today?

After a while, thinking back on this incident, I felt awful. I could have run over those people and maimed them or even worse. I asked my self, why did not I apply the break on my own instead of waiting for the teacher? I was in charge - but, not acting as such. On the good side of it, I had taken the lesson to heart. That lesson changed me for good. What I have learned then made me independent - probably too independent.

Now after two decades, I have young kids and assumed a leadership position at work. At work, I am responsible for a team of engineers engaged in software development. The lesson I took to heart in 1990 came to question again. Is it really always good to take charge? Taking charge or being responsible is good and there is no argument here - let's see the flip side of it.

When you are in a leadership position, how do you grow team members you are supposed to lead? Do you think making all the decision by yourself is the right way? When you have kids of your own, how do you allow them to experiment with the world? Do you allow them to figure out things on their own? The 'crime' the driving lesson instructor committed in the above story was to not give me a chance to make decisions on my own. As a leader, you should allow your teams to take charge on their work making most of the decisions. Your task is to help them or facilitating the environment for them to make good decisions. First hand experience in making decisions is the best way to learn.

So, there are times to take charge and know when to back-off from overly being in charge to allow others to grow. This is the leadership challenge - to balance your actions. Encourage your team members to make their own decisions as much as possible - reward them for making an appropriate decision (at least provide a simple Thank You note) or provide a constructive feedback on the decision that did not go well.

Happy Leading!

P.S. Currently, I am reading a book titled

Friday, April 24, 2009

On Board for Learning

Recently, I was on the morning express train going to work and wondering what values I espouse in life. This is not the first time I mused on this thought - it always comes to my mind whenever I read leadership books. Actually, when I was reading the book titled 'The Leadership Challenge', I almost put pen to paper to document my top five values. It did not happen but I still have a plan to do that - one day, that is.

This time the taught was not going away so easily - as it happened many times before. So, after back and forth, much of it negating and commending myself, I arrived to one of my cherished values - it is learning or to be specific continuous learning. Hopefully, I will share my other values in due time.

Now thinking back, it was very apparent - not sure why it took me so long to say it out loud. All along, my subconscious mind knew this but it was in the 'locked door' for my conscious mind. Just to give you one obvious fact - I have been going to school for a long time; I have done under-graduate and graduate studies; recently, I finished my Ph.D. while working full-time and raising a beautiful family. What drove me so hard to go through the gruling process of conducting a Ph. D. research? Now it is clear, right? It is the quest for learning. Learning as in preparing myself for the future!

So, my plan it to continously prepare for the future - continous learning. Hence, starting this blog. I am not sure how often I will blog but I will try it out to enhance the learning process.

Happy Learning!