<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1304627738871610514</id><updated>2011-04-22T10:06:59.037+08:00</updated><category term='sins'/><title type='text'>Taming of Software</title><subtitle type='html'>This blog is dedicated to ITIL as well as identifying some of the common problems and the effective solutions in software developments. What are some of the best practises in software development business processes. What are some simple yet effective design pattern to use to make our program flexible. How to design and build a Software Architecture and Framework from the ground up.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tamingofsoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1304627738871610514/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tamingofsoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Charles Lim</name><uri>http://www.blogger.com/profile/14243458962429208520</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1304627738871610514.post-7008590250905476907</id><published>2009-02-09T13:28:00.003+08:00</published><updated>2009-02-09T15:48:44.707+08:00</updated><title type='text'>The Beauty Of ITIL</title><content type='html'>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, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;ITIL&lt;/span&gt; is one of the most effective framework to bring to light these differences and hopefully the start of a new IT paradigm.&lt;br /&gt;&lt;br /&gt;Because of such a exciting potential of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;ITIL&lt;/span&gt;, I will like to focus, in the next few articles to discuss on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;ITIL&lt;/span&gt;. Some portion of the articles may be a direct replica of what is found in the official book, to &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_3"&gt;avoid&lt;/span&gt; misinterpretation.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;ITIL&lt;/span&gt; stands for &lt;span class="Apple-style-span" style="font-style: italic;"&gt;Information Technology Infrastructure Library&lt;/span&gt;. It is a framework for good practice in service management. In the new version, v3, it have be refined and taken the &lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_6"&gt;Life cycle&lt;/span&gt; &lt;/span&gt;approach&lt;span class="Apple-style-span" style="font-style: italic;"&gt;. &lt;/span&gt;It consists of 2 components, namely, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ITIL&lt;/span&gt; Core and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;ITIL&lt;/span&gt; Complementary. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;ITIL&lt;/span&gt; Complementary are complementary set of publications specific to certain environment (such as &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_10"&gt;industry&lt;/span&gt; sector). The Core is &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_11"&gt;concerned&lt;/span&gt; with best practice guidance applicable to all types of industry which we will be focusing. It consists of 5 volumes, namely:&lt;span style="font-style:italic;"&gt;&lt;/span&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; * Service Strategy&lt;/div&gt;&lt;div&gt; * Service Design&lt;/div&gt;&lt;div&gt; * Service Transition&lt;/div&gt;&lt;div&gt; * Service Operation&lt;/div&gt;&lt;div&gt; * Continual Service Improvement&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;ITIL&lt;/span&gt; define service as:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153);"&gt;A service is a means of delivering value to customers by facilitating outcomes customers want to achieve without the ownership &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_13"&gt;of&lt;/span&gt; specific costs and risks.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 153); font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;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-&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_14"&gt;sourcing&lt;/span&gt;, out-sourcing and co-sourcing. Suddenly, services becomes the 'in thing' in the business arena. Hence the exponential growth in the adaptation of &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;ITIL&lt;/span&gt; all over the world.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_16"&gt;service&lt;/span&gt; levels, and conformance to standards and &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_17"&gt;regulations&lt;/span&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_18"&gt;therefore&lt;/span&gt; making it a critical capability. Guidance is provided on ways to maintain stability in service operations, allowing for changes in &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_19"&gt;design&lt;/span&gt;, scale scope and service levels. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Continual Service Improvement provides guidance in  creating and maintaining value for customer through better design, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_20"&gt;introduction&lt;/span&gt; , and operation of services. It combines principles, practices, and methods from quality management, Change Management and capability improvement. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;Organizations&lt;/span&gt; learn to realize incremental and large-scale improvements in service &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;quality&lt;/span&gt;, operational efficiency and business continuity.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;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. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;     &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1304627738871610514-7008590250905476907?l=tamingofsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tamingofsoftware.blogspot.com/feeds/7008590250905476907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tamingofsoftware.blogspot.com/2009/02/beauty-of-itil.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1304627738871610514/posts/default/7008590250905476907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1304627738871610514/posts/default/7008590250905476907'/><link rel='alternate' type='text/html' href='http://tamingofsoftware.blogspot.com/2009/02/beauty-of-itil.html' title='The Beauty Of ITIL'/><author><name>Charles Lim</name><uri>http://www.blogger.com/profile/14243458962429208520</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1304627738871610514.post-7055829571859496211</id><published>2009-02-04T16:31:00.000+08:00</published><updated>2009-02-04T19:25:17.234+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sins'/><title type='text'>7 Sins of Software Development</title><content type='html'>&lt;div align="justify"&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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! &lt;hr /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;SIN #1: BAD ARCHITECTURE &lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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:&lt;/div&gt;&lt;div align="justify"&gt;* Creating an entry form that allow user to create, edit, view, delete&lt;/div&gt;&lt;div align="justify"&gt;* List the data with filtering options, and multiple selection options&lt;/div&gt;&lt;div align="justify"&gt;* Creating complicated reports&lt;/div&gt;&lt;div align="justify"&gt;* Audit&lt;/div&gt;&lt;div align="justify"&gt;* Data Processing&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;With a clear programmers' guide, a software can be developed with minimum hustle. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;SIN #2: INCOMPLETE ARCHITECTURE AND FRAMEWORK&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;strong&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;SIN #3: DUPLICATE CODING &lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt; &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;strong&gt;SIN #4: UNCONTROLLED CHANGES&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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. &lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;strong&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;SIN #5: NOT FLEXIBLE&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;strong&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;SIN #6: UNCOMPROMISING USERS&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;strong&gt;&lt;div align="justify"&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div align="justify"&gt;SIN #7: WEAK MANAGEMENT&lt;/strong&gt;&lt;/div&gt;&lt;div align="justify"&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;br /&gt;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.&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div align="justify"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1304627738871610514-7055829571859496211?l=tamingofsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tamingofsoftware.blogspot.com/feeds/7055829571859496211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tamingofsoftware.blogspot.com/2009/02/software-has-personality-that-attracts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1304627738871610514/posts/default/7055829571859496211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1304627738871610514/posts/default/7055829571859496211'/><link rel='alternate' type='text/html' href='http://tamingofsoftware.blogspot.com/2009/02/software-has-personality-that-attracts.html' title='7 Sins of Software Development'/><author><name>Charles Lim</name><uri>http://www.blogger.com/profile/14243458962429208520</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
