<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Basil Vandegriend: Professional Software Development &#187; IT industry</title>
	<atom:link href="http://www.basilv.com/psd/blog/tag/it-industry/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.basilv.com/psd</link>
	<description></description>
	<lastBuildDate>Wed, 25 Jan 2012 13:23:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>The Importance of Defining Success</title>
		<link>http://www.basilv.com/psd/blog/2010/the-importance-of-defining-success</link>
		<comments>http://www.basilv.com/psd/blog/2010/the-importance-of-defining-success#comments</comments>
		<pubDate>Mon, 25 Jan 2010 14:00:08 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=482</guid>
		<description><![CDATA[Can you define what makes a successful software development project or product? Do you know the criteria by which your current assignment will be judged a success? Does everyone associated with the project or product share the same definition? Defining what it means to be successful may seem obvious or trivial, but I expect that [...]]]></description>
			<content:encoded><![CDATA[<p>Can you define what makes a successful software development project or product? Do you know the criteria by which your current assignment will be judged a success? Does everyone associated with the project or product share the same definition? Defining what it means to be successful may seem obvious or trivial, but I expect that many people will answer “No” to at least one of the above questions.</p>
<p>Defining what makes for a successful project / product is critically important at every level: the individual, the team, the organization, and even the entire I.T. industry. (In the remainder of this article I will refer solely to projects with the understanding that the material applies as well to ongoing work on software products.) </p>
<h3>Individual</h3>
<p>Individual performance is often evaluated at least in part by the success or failure of the projects you work on, more so if you are in a leadership or management role. This can impact your compensation (raises, bonuses), future assignments and promotions, and even your job (if the project is a bad failure). </p>
<p>Being clear about the project’s definition of success should help guide you in the day-to-day decisions you make and actions you take on the project. This provides two benefits: you are more likely to be personally judged a success (even if the project fails), and the project is more likely to be successful.</p>
<h3>Team</h3>
<p>The choices to make in assembling a team – how many people will be on it, and what skill levels &#038; abilities will they have – are significantly influenced by the project’s definition of success. For example, if minimal budget expenditure is a critical success factor then a small team should be used. </p>
<p>Once the team is assembled having a clear definition of success shared by the team members helps provide coordination of activity rather than disjointed efforts. </p>
<p>The practices &#038; methods used by the team should be selected and tailored to maximize the likelihood and magnitude of success. </p>
<h3>Organization</h3>
<p>Within an organization that produces software decisions must be made regarding what projects to proceed or continue with and what level of funding and people to allocate to these projects. In a rational organization these decisions should be based on a cost-benefit analysis which should, in turn, be linked to the project’s definition of success. For example, if a project is conceived of to produce software targeted to hit the market in time for the Christmas selling season then hitting the delivery date becomes a significant factor of project success. </p>
<h3>I.T. Industry</h3>
<p>Our favorite pastime within the I.T. industry may well be promoting or debating the merits of various programming languages, environments, tools, practices, and methods. But what is the basis for making these evaluations? Presumably this is based on the likelihood of the tool, practice, or method making the project more successful (or less likely to fail). This evaluation should depend, therefore, on the definition of success being used, but this is seldom defined explicitly as part of the promotion / evaluation being done. (I am as guilty of this as everyone else.) </p>
<p>One notable exception is the book <a href="http://www.amazon.ca/gp/product/1556159005?ie=UTF8&#038;tag=basilvandegri-20&#038;linkCode=as2&#038;camp=15121&#038;creative=330641&#038;creativeASIN=1556159005">Rapid Development</a><img src="http://www.assoc-amazon.ca/e/ir?t=basilvandegri-20&#038;l=as2&#038;o=15&#038;a=1556159005" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Steve McConnell. Part III of the book lists 27 ‘best’ practices. For each practice a section on efficacy is provided that evaluates the practice based on three separate factors: potential reduction from nominal schedule, improvement in progress visibility, and effect on schedule risk. (Other project success factors such as quality or cost were omitted because the book focuses on minimizing schedule – thus the name Rapid Development.) McConnell explicitly advocates “selecting rapid-development practices that meet the needs of your specific project” (page 396). </p>
<p>Some might argue that virtually all projects share the same definition of success (usually along the lines of delivering required functionality with sufficient quality on time and on budget), and this then allows for meaningful discussion of 'best' practices independent of the definition of project success. I disagree with this position, but will save further discussion for a subsequent article: <a href="http://www.basilv.com/psd/blog/2010/problems-with-typical-definitions-of-project-success">Problems with Typical Definitions of Project Success</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2010/the-importance-of-defining-success/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Rotations to Develop Expertise</title>
		<link>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise</link>
		<comments>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise#comments</comments>
		<pubDate>Fri, 17 Apr 2009 08:39:55 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[learning]]></category>
		<category><![CDATA[IT careers]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[personal development]]></category>
		<category><![CDATA[professional]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=358</guid>
		<description><![CDATA[This article continues on from my prior article Improving Computer Science Degrees for Software Developers on the topic of better methods of developing expertise as software developers in the work place. The original inspiration for these articles is the post Master Craftsman Teams by Robert C. Martin in which he proposed a formalized development path [...]]]></description>
			<content:encoded><![CDATA[<p>This article continues on from my prior article <a href="http://www.basilv.com/psd/blog/2009/improving-computer-science-degrees-for-software-developers">Improving Computer Science Degrees for Software Developers</a> on the topic of better methods of developing expertise as software developers in the work place. The original inspiration for these articles is the post <a href="http://blog.objectmentor.com/articles/2009/04/01/master-craftsman-teams">Master Craftsman Teams</a> by Robert C. Martin in which he proposed a formalized development path based on the apprentice – journeyman – master craftsman model used by the trades. The specific inspiration for this article is use of rotations in the field of medicine in training medical students, interns, and residents. Trainees spend a fixed period of time working in a particular specialization (e.g. neurology) or unit (e.g. intensive care), after which they rotate into a new assignment. </p>
<h3>Benefits of Rotations</h3>
<p>The use of rotations provides two key benefits:</p>
<ol>
</li>
<li><em>Rapid learning</em>: People learn most rapidly when placed into new, unfamiliar situations, as opposed to being in the same environment year after year. The initial ramp-up period for new team members often corresponds to the period of increased learning, after which it tapers down. The use of rotations essentially maintains this ramp-up state to realize this enhanced learning on a more ongoing basis.
</li>
<li><em>Breadth of experience</em>: Rotation assignments are specifically selected to provide a broad range of experience in the field. This helps trainees determine what they would like to specialize in, and once specialized helps them work more effectively with other specializations. Breadth of experience helps develop that "big picture" understanding of the field and provides better appreciation for how each specialization contributes to it.
</li>
</ol>
<p>While software development is quite a different field from medicine, I believe that the use of rotations is just as beneficial to developing expertise as developers. One example is spending time maintaining or enhancing a preexisting code base tends to teach the importance of having cleanly design and easily understood code – in other words maintainability. Another more general example is developing that breadth of experience tends to provide a better appreciation of the importance of context in determining what development technologies, practices, and methodologies to apply.</p>
<h3>Required Rotations</h3>
<p>What kinds of rotations would be beneficial for developers? Listed below are the key assignments that I feel every developer should experience:</p>
<ul>
<li><em>Production Support</em>: Keep an operational system running. This develops your ability to diagnose and fix problems. It teaches you about all the bizarre events that can happen in a real system that never seem to happen in testing. I personally found it humbling to watch systems I thought were solid get hammered and fail in ways I never expected. You will learn the value of many non-functional requirements such as reliability, performance, scalability, manageability, and supportability (e.g. good logging).</li>
<li><em>Maintenance</em>: Make enhancements and fixes to an existing code base in active use. You should do this both for a system you originally developed and one you have not. This teaches the importance of good design and readable code – i.e. maintainability.</li>
<li><em>End-User Support</em>: Directly dealing with user inquiries and problems. This is enlightening in numerous ways: it provides you with a better understanding of what users value, how they react, their level of understanding of I.T., and what they like and do not like in the software they are using.</li>
<li><em>New Development</em>: Develop a piece of software going through all the stages of the software development life cycle: inception, requirements, design, coding, testing, release, and maintenance. Going through the entire cycle gives you a deeper understanding of the big picture. More importantly, you will have the opportunity to benefit from feedback in later stages regarding earlier stages: e.g. coding indicates requirements were poorly understood by all, or testing reveals a design defect.</li>
</ul>
<h3>Optional Rotations</h3>
<p>There are many other possible rotations across the full breadth of the field of software development. A large (but not complete) list of these assignments is provided below, organized into categories.</p>
<ul>
<li>Assignments in different types of software development organizations:
<ul>
<li>Product-focused</li>
<li>Service-focused (e.g. consulting)</li>
<li>Internal I.T.</li>
</ul>
</li>
<li>Assignments in different organizational cultures:
<ul>
<li>Bureaucratic</li>
<li>Entrepreneurial (e.g. a start-up)</li>
<li>Lean</li>
</ul>
</li>
<li>Assignments using different development methodologies:
<ul>
<li>Agile (process-light)</li>
<li>RUP (process-heavy)</li>
<li>Waterfall</li>
<li>Chaotic</li>
</ul>
</li>
<li>Assignments working on different types of software systems:
<ul>
<li>Web applications</li>
<li>Enterprise systems (e.g. messaging, batch processing, integration of systems)</li>
<li>Desktop</li>
<li>Mobile</li>
<li>Games</li>
<li>Software development tools (e.g. compilers, IDEs)</li>
<li>Software infrastructure (e.g. operating systems, databases, networking)</li>
<li>Scientific (e.g. simulations)</li>
<li>Mission critical (e.g. medical, aviation)</li>
</ul>
</li>
<li>Assignments involving different software development skills:
<ul>
<li>Web design (html, CSS)</li>
<li>User interface design</li>
<li>Database design</li>
<li>Database administration</li>
<li>Data conversion</li>
<li>Web services</li>
<li>Batch processing</li>
</ul>
</li>
</ul>
<p>Obviously you cannot gain experience in all of the items listed above. The point is to think about where you want to take your career as a software developer and then choose assignments that provide sufficient breadth while avoiding irrelevant assignments.</p>
<h3>Adopting Rotations</h3>
<p>How can rotations for software developers be adopted? As much as I think it makes sense, I do not see the I.T. industry as a whole formally adopting rotations in a fashion similar to medicine. So what about at the level of an individual organization? Even fairly small companies usually have different teams or products for which rotations could be formally set up. I have seen companies doing this for undesirable work such as customer support or production support. Developers are rotated into such roles either for an entire iteration or for a certain percentage of days each month. But the focus of these rotations is typically on getting the undesirable work done rather than the increased learning. </p>
<p>In many companies I have seen a tendency for developers to get stuck into a particular role or team. Supervisors are reluctant to give up a trained, skilled resource to another team, even in a trade. Temporary assignments on another team are also fairly rare for the same reasons plus the common fear by the supervisor that the temporary situation ends up becoming permanent. So a developer who wants a change often needs to initiate it by changing jobs.</p>
<p>Since the industry as a whole as well as individual organizations cannot be relied upon to provide for rotations, I believe it becomes the responsibility of each individual software developer to seek out that breadth of experience. Formal rotations may be beyond our control, but we can explicitly seek out different assignments to provide that breadth of experience and accelerated learning.</p>
<p>I'm interested in hearing what you think. Do you agree with my list of required rotations? Are there any you would add or remove? Do you have examples of where you actually used rotations? Let me know by leaving a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2009/using-rotations-to-develop-expertise/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Improving Computer Science Degrees for Software Developers</title>
		<link>http://www.basilv.com/psd/blog/2009/improving-computer-science-degrees-for-software-developers</link>
		<comments>http://www.basilv.com/psd/blog/2009/improving-computer-science-degrees-for-software-developers#comments</comments>
		<pubDate>Mon, 06 Apr 2009 22:01:06 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[learning]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/?p=336</guid>
		<description><![CDATA[Two recent experiences prompted me to think deeply about how software developers start out in the field and develop their expertise. The first experience was reading an article by Uncle Bob titled Master Craftsman Teams. Bob's main point is that the current model of developing expertise based on entering the field with a four year [...]]]></description>
			<content:encoded><![CDATA[<p>Two recent experiences prompted me to think deeply about how software developers start out in the field and develop their expertise. </p>
<p>The first experience was reading an article by <a href="http://objectmentor.com/omTeam/martin_r.html">Uncle Bob</a> titled <a href="http://blog.objectmentor.com/articles/2009/04/01/master-craftsman-teams">Master Craftsman Teams</a>. Bob's main point is that the current model of developing expertise based on entering the field with a four year computer science degree and then haphazardly gaining experience is broken – dysfunctional and ineffective in both cost and time. The alternative Bob suggests is a formalized path of learning based on the apprentice – journeyman – master craftsman model used by the trades, but without starting with the degree. </p>
<p>The second experience was the recent birth of my second son which involved interacting with a variety of medical staff at the hospital. Like previous hospital visits, the staff included nurses and doctors in a variety of training roles – student nurses, interns, and residents – as well as the experienced staff in charge – running the ward or performing the surgery. These training roles are clearly defined with careful supervision. One student nurse we dealt with was under the direct, one-on-one supervision of an experienced nurse who was constantly teaching, training, and assessing the student. Medical interns are supervised by junior residents who are in turn supervised by senior residents with a full staff doctor ultimately responsible. Unlike the trades, medical professions do require a university degree. Practical experience, however, is heavily integrated into the degree program. After the degree formalized training is heavily integrated into the work: residents rotate between roles within their area of specialization and still have exams to take.</p>
<p>So how have these experiences influenced my thoughts? I agree with Uncle Bob that the current model of developing expertise is grossly deficient. Far too many times I have witnessed novice or junior developers being thrown onto a team and expected to churn out production code with limited (if any) supervision or review. I have also suffered multiple times through the experience of having a team member who made a negative contribution to the team: we would have been more productive without them.</p>
<p>Is there a better way? Definitely! I'll start with the university degree. I disagree with Uncle Bob in that I do feel that a university degree can be a useful foundation for a career as a software developer. I think that the classic computer science curriculum is not the best approach: I would rather see a stronger emphasis on practical software development topics and a corresponding reduction in highly theoretical courses. In other words, take more of an applied science or engineering approach rather than a pure / theoretical science stance. Course work should include programming assignments. This may sound funny to say, but from personal experience in school I know individuals that did not have to write any code until their third year of school. There should be at least a few project courses that focus on having small teams of students develop a piece of software end-to-end, starting with gathering requirements and culminating in a tested, working version. The undergraduate program I went through offered one such course (called Software Engineering) that I found beneficial. It would have been much more effective, however, with an experienced software developer to act as a mentor throughout the course.</p>
<p>More important than the curriculum, however, is the need to integrate actual work experience into the degree program. I am familiar with computer science degrees that offer an optional 16-month internship. This is better than nothing, but a single big work block is, I believe, the least effective way to integrate work with school. In my undergraduate degree in computer engineering I went through a <a href="http://www.engineering.ualberta.ca/coop/nav02.cfm?nav02=83707&#038;nav01=23943">co-op program</a> that after the second year alternated one to two terms (four-month blocks) of school with one to two terms of work, including summers. I purposely changed employers each work term to maximize the variety of experiences that I encountered which I believe this greatly enhanced my learning. </p>
<p>As beneficial as I found the co-op program, I know that it could be made far more effective. Work terms are actual paid job placements so the employers are motivated to get their money's worth from the co-op students rather than provide formalized instruction &#038; mentoring. In some cases students are dumped into a team that is too busy as it is to provide effective guidance to the student. In other cases students end up doing activities unrelated to software development. Let's compare this to the medical model where students go through rotations that explicitly target different areas of medicine with much tighter integration between practical experience and classroom training. </p>
<p>I think computer science degrees would benefit from providing structured, part-time work experience concurrent with part-time classes – perhaps working  three days a week and in classes two days a week. In order for structured mentoring / training to be provided within the work setting, the only viable solution I see is for the student to work for free and have the university pay the supervisors an instructor fee. Four-month paid work terms, most commonly over the summer, could still be included in the program. </p>
<p>The following table outlines a sample degree program incorporating the suggestions I have made above:</p>
<table class="fancy" cellspacing="0">
<tr>
<th>Year</th>
<th>Fall Term</th>
<th>Winter Term</th>
<th>Summer</th>
</tr>
<tr>
<td>One</td>
<td>Introductory classes with programming assignments</td>
<td>Introductory classes with programming assignments and one project course</td>
<td>Summer break (first and last :)</td>
</tr>
<tr>
<td>Two</td>
<td>Classes with programming assignments and one project course</td>
<td>Classes with programming assignments and one project course</td>
<td>Part-time classes (3 days / week) and part-time structured work experience (2 days / week)</td>
</tr>
<tr>
<td>Three</td>
<td>Part-time classes (3 days / week) and part-time structured work experience (2 days / week)</td>
<td>Part-time classes (2 days / week) and part-time structured work experience (3 days / week)</td>
<td>Paid work term (unstructured)</td>
</td>
<tr>
<td>Four</td>
<td>Part-time classes (2 days / week) and one project course and part-time structured work experience (3 days / week)</td>
<td>Part-time classes (2 days / week) and one project course and part-time structured work experience (3 days / week)</td>
<td>Graduation!</td>
</tr>
</table>
<p>I haven't discussed the topic of developing expertise in the work place after university – this post is long enough and I'll save it for later – but I will say that I do like Uncle Bob's craftsman-based model.</p>
<p>What changes do you think should be made to computer science degree programs? Let me know via a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2009/improving-computer-science-degrees-for-software-developers/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are You Silver Bullet Proof?</title>
		<link>http://www.basilv.com/psd/blog/2007/are-you-silver-bullet-proof</link>
		<comments>http://www.basilv.com/psd/blog/2007/are-you-silver-bullet-proof#comments</comments>
		<pubDate>Sun, 18 Nov 2007 22:14:40 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[business management]]></category>
		<category><![CDATA[IT industry]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/are-you-silver-bullet-proof</guid>
		<description><![CDATA[I recently attended a presentation titled "Are You Silver Bullet Proof?" at the ICE Technology Conference by Sharon Stanbury and Joni Mines of the City of Edmonton. As non-I.T. people, they revealed an interesting perspective on how enterprise I.T. departments and the business should work together. They started by introducing two myths concerning I.T.: Myth [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended a presentation titled "Are You Silver Bullet Proof?" at the <a href="http://www.iceconference.com/">ICE Technology Conference</a> by Sharon Stanbury and Joni Mines of the City of Edmonton. As non-I.T. people, they revealed an interesting perspective on how enterprise I.T. departments and the business should  work together. They started by introducing two myths concerning I.T.:</p>
<ul>
<li>Myth #1: There is a 'magic' solution or technology that will solve all our problems.  Sharon &#038; Joni called this silver bullet thinking, which is a nod to the classic article "No Silver Bullets" by Fred Brooks, who argued that much of software developer involves essential complexity that no tool or practice can magically simplify or eliminate. Both technical and non-technical people can subscribe to this myth. Technical people should know better, but the optimists and early adopters are often suckers for the next new technology that comes along, believing that it will solve all the problems with the current approach. Good examples of this were Ruby on Rails for developing web applications, and now currently Erlang for doing concurrent processing. It is easier for non-technical business people and managers to buy into this myth because of their lack of technical knowledge, especially if the I.T. department or sales people are eagerly pitching a solution that they claim is the solution. Recently I helped out a software development team struggling with multiple parallel development activities on the same code base. They were already using branches and merging within their version control tool, so I was surprised to discover that the non-technical lead of this team was convinced that there was some feature or approach to using the version control tool that would magically make all their problems go away.
</li>
<li>Myth #2: If an I.T. project is properly managed and is successful – on time and budget – then the benefits will occur automatically. In order to be funded, most I.T. projects require a business case with a cost-benefit analysis that specifies the expected benefits from the project. Once the project is approved the business case is often forgotten about, especially by the I.T. team. The assumption is made that the benefits will occur automatically.
</li>
</ul>
<p>The typical result of believing these myths is that the I.T. project team celebrates their successful project, but the client is left unhappy or angry since the original expected benefits are not realized. To protect themselves, I.T. has adopted various practices such as expectation management, contracts, and audit trails. These help protect the I.T. team, but do not improve the customer's happiness.</p>
<p>This is a problem for the business. The solution is for the business – not I.T. - to ensure that business value is realized. I considered this a key insight of the presentation. The business owner must manage a business initiative potentially spanning multiple I.T. projects to ensure that the desired outcomes are achieved. Sharon and Joni stated that in their experience it usually takes up to five years after the completion of the first I.T. project before the appropriate level of benefits are realized. This seemed like an overly long period of time to me, and I wonder if their experience being with the government rather than corporations was a factor. </p>
<p>Sharon and Joni outlined a management framework called Value Management that helps business managers determine, evaluate, and finally achieve business value for an initiative. They called it a formal discipline similar to project management. The main insights behind this process are that expected business value must be defined up front along with measurable metrics as to whether it has been achieved, and then the initiative must be regularly evaluated and adjustments made as necessary to ensure that this value is realized. Sharon and Joni presented a number of examples within the City of Edmonton where the use of Value Management resulted in positive outcomes. </p>
<p>Sharon and Joni pointed out that organizations and business managers that use this type of process are silver bullet proof: rather than believing that technology will magically solve their problems, they should instead perform a disciplined evaluation of what they want to achieve and then manage to this outcome. </p>
<p>I think this is an important lesson for those of us in I.T. Not only should we be wary of silver-bullet thinking within ourselves, but we should also be aware that delivering business value is the ultimate goal of every I.T. project. Losing sight of that risks losing happy clients.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/are-you-silver-bullet-proof/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>What is ITIL Service Management?</title>
		<link>http://www.basilv.com/psd/blog/2007/what-is-itil-service-management</link>
		<comments>http://www.basilv.com/psd/blog/2007/what-is-itil-service-management#comments</comments>
		<pubDate>Sat, 24 Feb 2007 18:41:50 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[management]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[ITIL]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2007/what-is-itil-service-management</guid>
		<description><![CDATA[I recently attended a three day course on ITIL Service Management and wanted to share what I learned and what my impressions of ITIL were. ITIL - Information Technology Infrastructure Library - is a library of books that defines a framework of processes for IT and provides guidance regarding their implementation. ITIL was created by [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended a three day course on ITIL Service Management and wanted to share what I learned and what my impressions of ITIL were.</p>
<p><a href="http://www.itil.co.uk/">ITIL</a> - Information Technology Infrastructure Library - is a library of books that defines a framework of processes for IT and provides guidance regarding their implementation. ITIL was created by the British government in the 1980's to help manage the IT organizations of its agencies. ITIL has continued to be maintained and updated by the British agency <a href="http://www.ogc.gov.uk">Office of Government Commerce (OGC)</a>, and the use of ITIL has spread across Europe and more recently North America. ITIL has also expanded beyond a set of books. ITIL was used as the basis for the recently-created ISO 20000 standard. ITIL also provides three levels of training and certification: Foundations, Practitioner, and Service Manager. The course I took was at the introductory Foundations level which focuses on concepts and terminology, leaving the details concerning each practice to be covered at the Practitioner level.</p>
<p>ITIL views IT as a collection of services. The provision of each service includes the necessary hardware, software, documentation, support, and management. This is a holistic viewpoint that aligns with the needs of the business, rather than organizing by technology which tends to result in separate silos that have difficulty coordinating. <a href="http://www.itsmf.org/">IT Service Management</a> comprises the core of ITIL, focusing on the provision of high-quality IT services to the business in a cost-effective manner. Service Management is divided into two core areas, each consisting of a set of related processes: Service Support and Service Delivery.</p>
<p>Service Support focuses on the daily operation and support of IT services and consists of: </p>
<ul>
<li><em>Service Desk</em>: Formerly known as the help desk, the service desk functions as the single point of contact for users.
</li>
<li><em>Incident Management</em>: Handles incidents - interruptions to a service - with the goal of restoring normal operation as quickly as possible.
</li>
<li><em>Problem Management</em>: Focuses on long-term improvements to reliability by <a href="http://www.basilv.com/psd/blog/2006/how-to-do-root-cause-analysis">determining the root cause</a> of incidents and proactively preventing problems.
</li>
<li><em>Configuration Management</em>: Provides a logical model of the IT infrastructure by tracking the status of all significant configuration items such as hardware and software. This model not only lists individual components, but also relationships between them. This is not the same as version control for application development (i.e. with version control software such as Subversion), but is at a higher level and is much broader in scope, which confused me initially. As an example, consider several applications deployed to several clusters of production servers. Configuration Management might decide to track each physical server and each application. For each application, the version deployed in production is identified. The list of servers that each application is deployed to could also be tracked.
</li>
<li><em>Change Management</em>: Controls changes to the production environment by reviewing and approving or rejecting all changes and coordinating the implementation of the change.
</li>
<li><em>Release Management</em>: Responsible for the building, packaging, testing, and deployment of a release - a collection of authorized changes. This can include deploying new software, new hardware, or both. I and others in the course were confused at the distinction between Change Management and Release Management.  My impression is that Release Management is better named <em>Release Packaging and Deployment</em> because the role has very little to do with actual management and is subordinate to the Change Management role.
</li>
</ul>
<p>Service Delivery performs the long-term planning and improvement of IT services, operating at a tactical level rather than the daily operational level of the Service Support processes. Service Delivery consists of:</p>
<ul>
<li><em>Service Level Management</em>: Primary point of contact with the customer - the payer of the bills - to ensure business needs are being met by agreeing to service level agreements (SLAs) and monitoring and reviewing the actual service levels achieved.
</li>
<li><em>Availability Management</em>: Ensures the availability of the service according to the agreed service levels. This includes reliability, maintainability, serviceability, and security.
</li>
<li><em>Capacity Management</em>: Ensures that both current and future capacity needs are provided cost effectively. Capacity includes both storage and performance requirements.
</li>
<li><em>Financial Management</em>: Performs budgeting and accounting to explain the cost of providing each service to ensure that services are run cost effectively.
</li>
<li><em>Continuity Management</em>: Ensures that IT services can be recovered within agreed time spans after a disaster, euphemistically called an "interruption to the business" by ITIL.
</li>
</ul>
<p>I found the Service Support area more relevant than Service Delivery given my time spent on application maintenance and support. The Service Support processes were an unexpected hybrid of practical, common-sense processes and theoretical or idealistic approaches. The essence of the Service Desk, Incident Management, and Problem Management are all common-sense and implemented in to some degree in many IT organizations, although I think more emphasis needs to be placed on Problem Management - both the root cause analysis and the proactive prevention of problems. Configuration Management was the most theoretical of the approaches. ITIL showed almost every other process workflow updating the database of configuration items maintained by Configuration Management. This may be valid at an abstract, conceptual level, but does not correspond at all to anything I have seen in practice. This made it hard to understand how Configuration Management would be applied. This was actually my biggest disappointment with the course - it did not cover the details on how to set up and execute each of the processes. As a result, I finished the course feeling that I had nothing concrete to apply to my day-to-day activities. When I talked to the instructor about this, he explained that process details are not covered in the introductory Foundations course I took, but they are addressed in the Practitioner level courses.</p>
<p>ITIL needs to be approached from a pragmatic viewpoint. The ITIL materials acknowledge that you do not need to implement all the processes immediately, and should only apply them to the extent that they add value versus imposing unnecessary overhead. There is a definite risk with ITIL that <a href="http://www.basilv.com/psd/blog/2006/are-you-a-rule-maker-or-a-rule-breaker">rule makers</a> will want to rigorously implement all the processes beyond what is reasonable.</p>
<p>Should you pursue ITIL Service Management training or certification? For the typical software developer, I think the benefits are low. Certification only matters if clients or employers are asking for it. From what I have heard ITIL is growing in popularity within large organizations, so ITIL certification may grow in importance for consultants. The ISO 20000 standard that is based on ITIL is too new yet to determine if organizations in North America will adopt it. Ignoring certifications and standards, the ITIL Service Management Foundations material does provide some value. For those new to IT - whether they are managers or support staff, the material provides a good overview of IT as a whole. The most significant benefit of ITIL is that it provides a common language with which to discuss IT.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2007/what-is-itil-service-management/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Producing Good Software is Hard</title>
		<link>http://www.basilv.com/psd/blog/2006/producing-good-software-is-hard</link>
		<comments>http://www.basilv.com/psd/blog/2006/producing-good-software-is-hard#comments</comments>
		<pubDate>Thu, 07 Dec 2006 15:00:34 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[software development]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2006/producing-good-software-is-hard</guid>
		<description><![CDATA[This is a public service announcement to all project managers, business analysts, others working in the I.T. industry, and the general public: producing good software is hard. The next time you wonder why the software you are using crashed, or why your software development project is behind schedule, or why your software doesn't meet the [...]]]></description>
			<content:encoded><![CDATA[<p>This is a public service announcement to all project managers, business analysts, others working in the I.T. industry, and the general public: producing good software is hard. The next time you wonder why the software you are using crashed, or why your software development project is behind schedule, or why your software doesn't meet the users needs, remember this point.</p>
<p>People I have dealt with professionally who are not software developers occasionally make comments that imply that writing enterprise business software is a fairly straight-forward task, easily handled by the average developer. I have challenged these statements by pointing out that reality disagrees. The majority of software development projects are overrun or canceled. Software that does make it into production often has serious operational failures, performance issues, or fails to meet users' requirements, and much of it is poorly designed, making it difficult to correct these issues and implement enhancements. These problems cannot be blamed solely upon weak developers. Across the industry, the typical software development team will be staffed by average developers (by definition), which means that the problems I just described affecting a majority of projects result from the efforts of average developers.</p>
<p>In defense of software developers, the leading causes of project failure or overrun are actually in the areas of project management (i.e. overly aggressive schedules) and requirements gathering. Problems in these areas cause much more serious impacts, and this is perhaps why project managers and business analysts sometimes feel that writing the code is the easy part. But it is not. Even assuming sufficient time, clear requirements, and a decent solution architecture (which are big assumptions), producing working, high-quality code is hard. </p>
<p>Why is this? I'll first look at meeting the functional requirements. For a typical enterprise business application many of the functional requirements are admittedly simple, and can be summarized as creating data entry screens for a particular set of data. Many of the enterprise business applications I have been involved with, however, also have more complex functional requirements such as complex business rules, batch processing, web services, or data conversion. These more challenging requirements are the ones most likely to cause problems for the development team.</p>
<p>Software must also meet non-functional requirements in areas such as performance, usability, and <a href="http://www.basilv.com/psd/blog/2006/the-importance-of-maintainable-software">maintainability</a>, and I believe that most enterprise software does poorly in these areas. It is simple to explain why: everyone is focused on meeting the functional requirements - clients, testers, and project managers as well as developers - so the non-functional requirements are neglected. Even when someone - most often the architect - considers the non-functional requirements, it is difficult to address them all at the same time. Typically multiple iterations are necessary. For example, a developer first writes code that meets the functional requirements, then tries out the user interface and make improvements to address usability issues, then tests and addresses performance issues, and finally cleans up the code  to ensure the design is maintainable - easy to understand and modify. These multiple iterations take time, skill and dedication, and if a developer is lacking in one of these areas, the non-functional requirements will likely be neglected.</p>
<p>Combine the challenges in both the functional and non-functional requirements, and the result is that the typical software application will fall short in at least one area. Add in other common challenges like a compressed schedule and unclear or changing requirements, and the chance of success plummets even lower. In other words, producing good software is hard.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2006/producing-good-software-is-hard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Vision for IT</title>
		<link>http://www.basilv.com/psd/blog/2006/my-vision-for-it</link>
		<comments>http://www.basilv.com/psd/blog/2006/my-vision-for-it#comments</comments>
		<pubDate>Thu, 10 Aug 2006 15:00:21 +0000</pubDate>
		<dc:creator>Basil Vandegriend</dc:creator>
				<category><![CDATA[professional]]></category>
		<category><![CDATA[IT industry]]></category>
		<category><![CDATA[mission]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://www.basilv.com/psd/blog/2006/my-vision-for-it</guid>
		<description><![CDATA[I've recently updated my vision for this website, which I'll restate here: Help software developers learn and grow as professionals. Increase the level of professionalism in the IT industry. Make the IT industry a more enjoyable and rewarding field to work in. Why did I create a vision statement for my website? When I started [...]]]></description>
			<content:encoded><![CDATA[<p>I've recently updated my <a href="http://www.basilv.com/psd/about#website-vision">vision for this website</a>, which I'll restate here:</p>
<ul>
<li>Help software developers learn and grow as professionals.</li>
<li>Increase the level of professionalism in the IT industry.</li>
<li>Make the IT industry a more enjoyable and rewarding field to work in.</li>
</ul>
<p>Why did I create a vision statement for my website? When I started my website I created a list of goals, most of which haven't actually changed. As I worked on this site, I came to realize that my motivation and passion for it are based on something more fundamental than what was expressed by these goals. After reflecting on this, I developed the three statements in my vision above. Looking at my past articles, I see that many if not all of them do speak directly to my vision, so I know is an accurate reflection of myself. </p>
<p>It was a surprisingly difficult process to write this vision statement.  It may appear simple to you, but I put a lot of thought into those three sentences above. I wanted to truly capture my passion and motivation and express it in as succinct a form as possible. I had originally aimed for a single sentence, but I had to settle for three. As I came to the end of this process, I realized that while my vision was very meaningful to myself, it may not be as meaningful to others. So part of the purpose of this article is to more fully explain my vision.</p>
<p>My vision as stated above isn't actually limited just to this website but applies to everything I do related to IT: specifically, my full-time job as a software developer. Only a few of you reading my website have worked with me, but I hope that those of you who have will agree that my daily activities and attitude have reflected my vision. This vision of mine is in large part a vision of what software development and the IT industry in general has the potential to be. Some specific examples of my vision for IT are:</p>
<ul>
<li>Producing software that works, meets users' requirements, and is usable - software that delights the users and that is actually used.</li>
<li>Carefully designed and coded software that is properly evolved over time, instead of the typical <a href="http://www.laputan.org/mud/">big ball of mud</a>.
<li>Realistic schedules and meaningful deadlines.</li>
<li>A professional work environment. No more extended, unpaid (and unproductive) <a href="http://www.basilv.com/psd/blog/2006/overtime-considered-harmful">overtime</a>.</li>
</ul>
<p>I know what I describe is an ideal far removed from current reality. But if you just accept the status-quo, then you have doomed yourself to remaining in it. Envisioning small improvements might be more realistic, but isn't very inspiring. My vision for IT motivates me and reflects my passion because it does aim so high. I can accept falling short of my vision due to reality, but I can't accept not trying to achieve it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.basilv.com/psd/blog/2006/my-vision-for-it/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

