Monday, February 9, 2009

The Beauty Of ITIL

There is always a gap in what the customers want and what IT Managers think they want. It is like one party look at IT services as providing values to their core business and the other party looking at IT services as providing values to the services within the context of the market it support. Most would not be concerned with this difference, or to consider it as any difference in the first place. But if given deeper thoughts, we will realize they are totally different animal. That is why there is always a difference in opinion between Marketing Managers and IT Managers. However, ITIL is one of the most effective framework to bring to light these differences and hopefully the start of a new IT paradigm.

Because of such a exciting potential of ITIL, I will like to focus, in the next few articles to discuss on ITIL. Some portion of the articles may be a direct replica of what is found in the official book, to avoid misinterpretation.

ITIL stands for Information Technology Infrastructure Library. It is a framework for good practice in service management. In the new version, v3, it have be refined and taken the Life cycle approach. It consists of 2 components, namely, ITIL Core and ITIL Complementary. ITIL Complementary are complementary set of publications specific to certain environment (such as industry sector). The Core is concerned with best practice guidance applicable to all types of industry which we will be focusing. It consists of 5 volumes, namely:

 * Service Strategy
 * Service Design
 * Service Transition
 * Service Operation
 * Continual Service Improvement

ITIL define service as:

A service is a means of delivering value to customers by facilitating outcomes customers want to achieve without the ownership of specific costs and risks.

Today rapid changing market landscape, brings with it the need for companies to be flexible and agile to meet these changes. Yesterday rigid business model where companies own every business function with well governed processes that tightly couple all these functions have today give way loosely coupled business model, that can support in-sourcing, out-sourcing and co-sourcing. Suddenly, services becomes the 'in thing' in the business arena. Hence the exponential growth in the adaptation of ITIL all over the world.

The Service Strategy provides guidance on design, develop, and implement service management not only as an organizational capability but also as a strategic asset. Strategic assets are the values of IT in business sense. Service Strategy is the hub of 5 services. Only with IT decision are based on a sound strategy can everything be fall in the right places. Else, organization capabilities, feedback, resources, opportunities, business plan, etc, will just be pieces of information lying around unable to assert their full values. 

The Service Design provides guidance for the design and development of services and service management processes. It includes the changes and improvements necessary to increase or maintain value to customers over the life cycle of services, the continuity of services, achievement of service levels, and conformance to standards and regulations

The Service Transition provides guidance for the development and improvement of capabilities for transitioning new and changed services into operations. At the same time controlling the risk of failure. It combines practices in Release Management, Programme Management, and Risk Management and places them in the practical context of service management. 

The Service Operation includes guidance on achieving effectiveness and efficiency in the delivery and support of services so as to ensure value for the customer and the service provider. Strategic objectives are ultimately realized through service operations, therefore making it a critical capability. Guidance is provided on ways to maintain stability in service operations, allowing for changes in design, scale scope and service levels. 

The Continual Service Improvement provides guidance in  creating and maintaining value for customer through better design, introduction , and operation of services. It combines principles, practices, and methods from quality management, Change Management and capability improvement. Organizations learn to realize incremental and large-scale improvements in service quality, operational efficiency and business continuity.

These 5 volumes official bring to light the problems organizations are facing in relation to IT in today's service orientated market, and layout the complete framework in term of best practices in order to handle them. 

     

Wednesday, February 4, 2009

7 Sins of Software Development

Software has a personality that attracts the classical love-hate relationship. We love the efficiency and convenience of software, excitement of creating a new software, anticipation of exploring and using a new software. Yet we hate the complexity in the development, management and maintenance of software. Software is known for running over schedule, over budget, over buggy, overly slow. Those who have experienced the development of major software project understand this delimma. So is it possible to increase the love facter and lower the hate factor in software development? Well, let us look at the main causes of a software development failure.

Developing a software is similar to building an integrated resort on an open piece of land; the outcome of the software is restricted only by our imagination. There is no rules to say the screen need to be rectangle, or how to save and present data, or how flexible it has to be, etc. There is not limit to the options and choices. In addition, there are many phases to a software development, as there are many different people with different interest in the projects. On top of that, there is always hidden users requirements that will be left hidden until parallel testing, and there is always a need for many change requests after the system have gone live. If that is not complicated enough, any wrong decision made at any one stage or action or no action taken by certain group will have multiplication effect on the subsequent stages of the project.

So how do we deal with them. Fortunately, software have matured through the years, and have numerous practices that are support to address most of the above mentioned issues. However, today we are still encounter and even higher degree of the above mentioned problems. So this blog we will list out some of the common causes of software project failure, identify their root causes and how to prevent them...enjoy!

SIN #1: BAD ARCHITECTURE
The internal of a software system is like a human body. For example there is functions(organ) to handle receiving information from user(eyes, ears, nose, tongue, etc), process that piece of information(mind) and save permenantly in a database (mind). Software architecture controls how every part of a software should communicate with one another, how they should process information and how they should present those information. Any new or changes to an existing software will have to be developed on top of the architecture. So if the software architecture is not well design or development, this flaw will be pass on to all software that develop on it.

When we have a well design and developed software architecture, complexity in developing a software will be substantialy reduced. Imagine if we have a flexible, robust and efficient artchitecture that handles:
* Creating an entry form that allow user to create, edit, view, delete
* List the data with filtering options, and multiple selection options
* Creating complicated reports
* Audit
* Data Processing

With a clear programmers' guide, a software can be developed with minimum hustle.

However, because of complicated user requirements and demand to have the software completed at a minimum budget and at a shortest timeframe, many companies are not able to achieve the desired outcome in their software project. To build a flexible, robust and efficient architecture requires time, and usually do not reap immediate reward. The rewards comes when it is being used to build more software or when handling change requests. But because of the pressure from every angle, we take shortcut in the area. Hence we commit SIN #1.



SIN #2: INCOMPLETE ARCHITECTURE AND FRAMEWORK
If Software Architechs stopped improving the architecure and framework after some time. However, this is inviting duplicated coding (sin #3). Because it is incomplete, programmers may be able to find an architecture suitable for certain design. As Architechs do not have the resources to make the enhancements or changes, they often recommend workaround to solve the problem. As this workaround are not part of the architecture, it become a one-off thing. So when another programmers need the same thing, will again develop their own code to handle the workaround.

So it is critical that Software Architechs are given ample resources and they should also expect to handle any changes or enhancement to the architecture and framework for every new projects or change requests.



SIN #3: DUPLICATE CODING

If we have the best Software Architecture, and Framework, but programmers do not know about it, it will still be of no use. When programmers are not aware of the Architecture and Framework, they will usually develop their own. Beside being duplicate work, it will become maintenance nightmare when left unchecked. But this is very oftern the case. Hence, our SIN #3.

So there should be a clear and up-to-date programmers' guide and training provided to programmers to ensure they are aware of the software architecture and framework. On top of that, there should be code reviews to ensure there is not duplicate work. Finally, processes should be in place to ensure up-to-date programmers' guide are always available, training are given to every programmers and code reviewing steps will not be side stepped.


SIN #4: UNCONTROLLED CHANGES
Often we do not raise and eyelid when there is a request for changes to software. But that should not be the case. Because changes could affect the pillar of the system and we may not be aware of it. How do Building Architecture take requests for moving the pillar of a building, they will not agree to it. Though in software arena there is more flexibility, however, we should see be able to understand clearly, not at high level, the degree the changes have on the software. Especially when sin #1 and #2 are there, changes will always prove more complicated than expected.

There should be a standard process to handle change requests, so that the requests, discussions and solutions suggested are fully documented. The requested personnels are present during the discussion. Changes are thoroughly examined before providing a solutions. All possible options are considered. Work to make the software changes are started at the right time (not before approval from customers and not to long after approval either). Testing and reviews are done using the correct requests and solutions.

Often changes requested more then resources then initially expected. In such cases, the actual figure should be present. Else it may become the start of decay in the software system. If the changes causes increase degree in the complication of the software, we should be firm against the changes, especially when the software is used for multiple companies or when the changes is useful to a limited number of clients.



SIN #5: NOT FLEXIBLE
Changes is an inherit nature of software. Since changes is so common in software, every changes will be a challange if the software is not flexible. Programmers will generally create their own way of implimenting the changes. Hence inviting sin #2 and sin #3.

Hence a flexible framework is critical to a stable system; the higher the degree of flexibility the less the amount of programming changes, which leads to less bugs.



SIN #6: UNCOMPROMISING USERS
As competition heats up, customers have the advantage of demanding more and paying less. But is it really an advantage. When a customer is too uncompromising to their requirements and not willing to pay, software house may have to make unconventional changes to the software which is like a time bomb waiting to explode. However, if a customer is too compromising, they may not be able to receive the best value for their money. So the best is a balance relationship. To achieve that, there must be trust between the vendors and customers. Then everyone work for the common interest.



SIN #7: WEAK MANAGEMENT
Developing a software involve many groups of people, even for small changes. However, if the people are not able to work together for ensure a successful delivery, the final delivery will often break. Because changes today is to rapid and to such high degree that previous thought out processes and deliveries did conside some of the new changes. Together with the usual short time frame, teams often have to have the initiative and the capability to handle unexpected events.

Here is where management team are critical. They are required to lay done clear and effective processes and ensure everyone followed. Clear and effective job scopes so that problem will not slip in between teams. And an environment that pro creativity, quality and taking ownership. For this to happen, management have to play the leadership role on top of a managerial role. Only then can they propel a movement that ultimately become an effective culture in the department and company.