<?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>Doing better &#187; Software CM</title>
	<atom:link href="http://www.longacre-scm.com/blog/index.php/category/software-cm/feed" rel="self" type="application/rss+xml" />
	<link>http://www.longacre-scm.com/blog</link>
	<description>Opinions on CM, software development, and process automation from Longacre.</description>
	<lastBuildDate>Sat, 28 Aug 2010 21:23:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Being a trust specialist</title>
		<link>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist#comments</comments>
		<pubDate>Mon, 27 Apr 2009 07:25:57 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[General CM]]></category>
		<category><![CDATA[Organizations]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist</guid>
		<description><![CDATA[Most of the readers of this blog are CM specialists. Whether you&#8217;re a corporate CM librarian, or a build manager, you are focused on what the industry now calls &#8220;Application Lifecycle Management.&#8221; That&#8217;s an attempt to give a name to the collection of roles and functions we perform. It isn&#8217;t so much that the people [...]]]></description>
			<content:encoded><![CDATA[<p>Most of the readers of this blog are CM specialists. Whether you&#8217;re a corporate CM librarian, or a build manager, you are focused on what the industry now calls &#8220;Application Lifecycle Management.&#8221; That&#8217;s an attempt to give a name to the collection of roles and functions we perform. It isn&#8217;t so much that the people are diversifying, as that the collection of tools that were all trying to fit under the &#8220;Configuration Management Tool&#8221; umbrella got too large. Change tracking? Sure, that&#8217;s a CM function. Version control? Yep. Requirements management? Well &#8230; okay. UML? Not so much. Trouble ticketing? Yeah, I guess. ITIL? Sure, why not?</p>
<p><a href="http://bradapp.blogspot.com/">Brad Appleton</a> is, in my opinion, one of the all-around smart guys in the CM space. His focus for the last few years has been on Agile CM, but his writings are applicable to anybody doing software development, for a <i>very </i>broad definition of software &#8211; most of what he writes is applicable to almost any kind of intellectual property. And recently Brad has been doing some blogging about books on various flavors of &#8216;trust. &#8216;</p>
<p>Trust, to me, is one of those core values for most CM specialists. The fact is that CM is a simple job. There are certain requirements, and once you meet them you get to go home. In that way it&#8217;s a lot like being a system administrator: is the system up, is everything working? Okay, go home. Now admittedly it can be pretty hard to meet some of those requirements. That&#8217;s why I didn&#8217;t say it was an easy job &#8211; just a simple one. But that&#8217;s where trust comes in. Because whether your shop is an agile shop or not, the CM guys are more affected by trust than any single other thing.<br />
<span id="more-65"></span></p>
<p>Let me repeat that: CM guys are more affected by trust than any single other thing.</p>
<p>I&#8217;m a CM consultant. I get called in by shops that either don&#8217;t have CM and want to build a team, or by shops that already HAVE a CM team but have experienced enough CM failures that they don&#8217;t trust them any more. Since most companies obtain headcount by calling up a body shop and ordering it by the pound (kilos for the EU, I guess), I don&#8217;t usually get called <i>first</i> for CM team setups. It&#8217;s usually only after there are some bodies on site, when it turns out that CM specialists that are great at keeping an existing system going don&#8217;t have so much experience in starting a new system up from scratch. So there&#8217;s usually some kind of mess on the floor when I show up.</p>
<p>What does that mean for you? Well, it means that if you see me at your shop, you should make sure your resume is up to date. (Sorry, but it&#8217;s true.) It also means that you can keep me, or somebody like me, from showing up if you concentrate on building trust with your customers.</p>
<p>Brad&#8217;s first blog post about trust was on Covey&#8217;s &#8220;The Speed of Trust,&#8221; and in that book there are five &#8220;rings of trust&#8221; outlined. The second and third rings, or types, are interpersonal trust and organizational trust. That&#8217;s where I live, and if you&#8217;re smart it&#8217;s where you spend time each day maintaining your relationships with your customers.</p>
<p>It&#8217;s a pretty simple set of questions, but it makes all the difference. </p>
<ol>
<li>Do the people you interact with understand what you need from them, and understand how to deliver it?</li>
<li>Do they understand what services you can provide to them, and how to request them? </li>
<li>Are all of these things practicable?</li>
<li>Do they perceive you as doing what is needed, on time, and without unnecessary oversight?</li>
<li>Do they perceive you as requesting things that are objective, and consistent, and in keeping with your and their function?</li>
<li>Do they believe the estimates and the explanations you give them?</li>
</ol>
<p>If you can answer yes to all of those, you&#8217;ll never work with me. That&#8217;s because your customers trust you. If you can&#8217;t &#8211; if your customers distrust you &#8211; then as the level of trust decreases, the likelihood of a &#8220;fixer&#8221; being called in for your team goes up. In the credit card business, your interest rate goes up. In the CM business, the level of interest in working with you goes down.</p>
<p>If you&#8217;re a CM manager for a military systems contractor, then you&#8217;ve got a CM plan. And you&#8217;ve got a set of prescribed deliverables. And if the developers &#8211; software, firmware, systems engineers, whatever &#8211; know how to deliver each release to you, and it&#8217;s an automated, mechanical, simple chore, then you&#8217;re halfway there. If your other customers &#8211; the clients, and the development team that need to roll back to an earlier release &#8211; can submit a request and quickly get some kind of link, or bundle, or set of typing instructions, then you&#8217;re all the way done.</p>
<p>If you&#8217;re a build guy, or a release guy, or a deployment guy for a software team &#8211; agile or not &#8211; then the activities might be different but the questions aren&#8217;t. Does the team know how to get you to do a build, or cut a release, or deploy a package? Are there any bogus hoops they have to jump through? Have you built any passive-aggressive walls, saying &#8220;we want the development team to do this thing which they really ought to trust us to do but they overrode us that one time and now we&#8217;re bitter and whiny and nobody loves us&#8221;? Can a developer quickly get to the codeface of some old branch from six months ago?</p>
<p>I guess the short form is this. Are you doing your job? Are you making it as easy as possible for your customers to ask you to do your job for them? Because in my experience &#8211; and I&#8217;ll admit my experiences are all negative &#8211; if you aren&#8217;t doing your job, or if you&#8217;re making your customers pay some kind of &#8220;tax&#8221; (time, whining, paperwork, hoop-jumping, sloth, inefficiency) then you&#8217;re going to lose trust. And once you lose trust, you&#8217;ll see a little bureaucracy get started. And when that doesn&#8217;t work (and it rarely does) you&#8217;ll get to meet me. I&#8217;ll be the guy &#8220;we brought in to help gets things caught up.&#8221;</p>
<p>This isn&#8217;t a threat, quite. Because I don&#8217;t know you. It&#8217;s a reflection of the world as I see it, because I&#8217;m like a specialist doctor &#8211; nobody makes an appointment with a gastroenterologist to talk about how healthy they are. In my case, nobody calls me up and says, &#8220;We&#8217;d like to pay you to fly out here and sit in a conference room and live in a hotel for two weeks so that we can tell you how smoothly our build and deployment works!&#8221; (Man, I would LOVE that.) But what I get instead is, &#8220;We need you to come and fix our build and deployment procedures. Our developers don&#8217;t trust the CM team, and we&#8217;ve had a couple of blown deployments in the last few months.&#8221;</p>
<p>So anyway, I guess the upshot of this blog post &#8211; and this is much too depressing to be a CM Journal article, so it&#8217;ll stay a blog post &#8211; is that you need to make sure your house is in order, trust-wise. Go read one or more of the books on Brad&#8217;s list. Because CM teams seem far more Boolean than development teams. Developers can say &#8220;It&#8217;ll be done soon,&#8221; while CM&#8217;ers have to say &#8220;it&#8217;s not done.&#8221; And saying &#8220;it&#8217;s not done&#8221; leads pretty directly to &#8220;you&#8217;re not hired.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2009/04/being-a-trust-specialist/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit tests for MySQL scripts</title>
		<link>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts#comments</comments>
		<pubDate>Sun, 26 Apr 2009 01:07:09 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2009/04/58</guid>
		<description><![CDATA[Recently I had the opportunity to develop a unit testing framework for MySQL scripts in mostly-pure SQL. While I can&#8217;t share the code, I can certainly describe what we did, and why we did it. Hopefully it will be useful to you.

My client was reorganizing a development team into an agile mode in order to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had the opportunity to develop a unit testing framework for MySQL scripts in mostly-pure SQL. While I can&#8217;t share the code, I can certainly describe what we did, and why we did it. Hopefully it will be useful to you.<br />
<span id="more-58"></span></p>
<p>My client was reorganizing a development team into an agile mode in order to deal with an outsourcing disaster. It was one of those horror stories that starts out like &#8220;We were 3 years in to a 10 month project, when &#8230;&#8221; I was brought on to help ramp up their build and deployment processes, to get continuous integration and testing systems up, and to help mechanize their deployments.</p>
<p>The impetus for the MySQL unit test framework came from a short term contractor. The one &#8220;constant&#8221; in the otherwise highly-variable environment had been that the team wasn&#8217;t changing. Suddenly, that stopped being true. We had a handful of contractors in for a short term surge, and none of them were familiar with the application, or with SQL (it seemed). The offender was using the CI server as his syntax checker for database scripts. Yikes!</p>
<p>Luckily, the garbage he delivered was syntactically invalid. The mysql command-line client rejected the script and exited with an error status, which caused the CI script to log a failure, and &#8230; voila! Everyone credited me with doing a great job of implementing CI, because it was even checking the database stuff. Like a good consultant, I said &#8220;Yes. Of course.&#8221; Then I ran back to my desk, thinking &#8220;Oh, no! I&#8217;ve got to come up with a unit test framework for the MySQL stuff, pronto!&#8221; And I did.</p>
<p><strong>Solutions</strong></p>
<p>The software was a pretty complex web app, and the target environment was a mixture of Linux and Windows. As a result, when I looked at existing SQL unit test frameworks (<a href="http://www.dbunit.org/">dbUnit</a> and <a href="http://sqlunit.sourceforge.net/">sqlUnit,</a> respectively) I had to reject them. They are decent products &#8211; and free &#8211; but the fact is that they expect certain things about their runtime environment that we couldn&#8217;t deliver. We had to build our own MySQL unit test framework, ideally in &#8220;pure&#8221; MySQL.</p>
<p>Fortunately for me, a nice guy named Giuseppe Maxia maintains a web site at <a href="http://www.datacharmer.org">datacharmer.org,</a> and he has written a library of general-purpose MySQL code. (Called the General Purpose Stored Routine library, or gp_sr_lib.) Among the all this well-written, free, already debugged code was a set of testing routines. Thirty minutes into my development effort, I was already 80% done. Woo-hoo!</p>
<p>The GP library test routines are a good start on a mysqlUnit library, and I strongly recommend that if you need such a library you stop reading here and go download the code. Right now. </p>
<p><strong>Rolling (y)our Own</strong></p>
<p>There are a couple of gotchas that you&#8217;ll want to watch out for in your own unit testing library. First, the tests should be able to integrate into your CI engine. In particular, you need to decide on and implement some kind of failure mode &#8211; either fail when the first problem occurs, or fail after running all test cases. If you&#8217;re running the mysql client via some kind of exec call, be aware that while syntax errors will cause the client to exit with a failure code, other errors will not cause a failure. Instead, the client prints a diagnostic and returns zero. What&#8217;s more, the syntax does not support a deliberate abort from within the SQL engine.</p>
<p>In my own case, I chose to follow the model that Maxia has provided, and NOT fail as soon as a test fails. Rather, my code collected the results of all the tests that were run, and summarized them. In order to get &#8220;fail on error&#8221; behavior out of the mysql command line client, I coded a routine that would perform a &#8220;SELECT force_mysql_client_abort FROM no_such_table&#8221;. This definitely does cause the client to abort, at least until some developer creates a table called &#8220;no_such_table.&#8221; Then I wrapped the test cases in an &#8220;ignore failure&#8221; script that called the summarizer after all the cases had run, which in turn would call the abort routine if the error count was non-zero.</p>
<p>Another thing I chose to &#8220;fix&#8221; was the routine names. Maxia&#8217;s code includes both functions and procedures, but the names are not really in keeping with the style used in the various xUnit test frameworks. The library contains a procedure for asserting the existence of a database table. It is called as:</p>
<p><code>CALL check_table('db name', 'table name');<br />
</code></p>
<p>I opted to &#8220;embrace and extend&#8221; the library. I wrapped these types of checks into functions, like this:</p>
<p><code><br />
set_database('db name');<br />
assert_table_exists('table name');<br />
assert_table_exists_in_db('other table', 'other db');<br />
</code></p>
<p>And in general, wherever there is a straight-ahead assert, I also added an &#8220;assert_not&#8221;. In terms of effect, there is no real difference in behavior between Maxia&#8217;s naming and my own. But I felt that the developers, who were using jUnit and nUnit, would be more comfortable learning a set of routines that had a similar structure and style.</p>
<p><strong>Going Most of the Way: DDL</strong></p>
<p>I tried to make a list of the various things that SQL scripts might do. The most obvious &#8212; and this probably accounted for two thirds or more of the scripts we had &#8212; is DDL statements. DDL (Data Definition Language) is that subset of SQL that relates to defining databases, tables, indexes, triggers, and the like. While the most frequently executed SQL statements are DML (Data Manipulation Language), DDL is where it&#8217;s at for most of the human-generated script files: CREATE TABLE, ADD INDEX, etc.</p>
<p>The great thing is that the assertions for these statements are trivial to write. Maxia&#8217;s library includes the CHECK_TABLE procedure, and some code for looking up procedures and functions. Adding other stuff, like keys and constraints, is pretty straightforward. By the end of the day you should have a long list of functions like assert_table_exists, assert_index_exists, assert_database_exists, and  assert_column_has_type.</p>
<p><strong>Deploy Early</strong></p>
<p>At this point, you&#8217;re ready to go live. Except that you need to build a framework to run these tests. That&#8217;s going to depend a lot on your deployment process, and on your particular CI environment. Sorry. The simplest idea would be to write a script that matches the file names of test files, and runs them one at a time. Call that script from CI, and make sure the exit status is meaningful.</p>
<p>Forget the next couple of sections, because most of the database changes you&#8217;re likely to see are DDL. Developers and DBAs do a lot of adding fields, adding indexes, and sometimes adding tables. If you have just the existence assertions for each kind of object, your library will cover two-thirds or more of the statements being delivered. That&#8217;s not a trivial amount of test coverage for a day or two of work. Ship it! Your developers will need some training, and you&#8217;ll need to beat on the thing once it&#8217;s deployed to your CI servers to make sure that the errors are coming out correctly. </p>
<p><strong>Sell to the Development Team</strong></p>
<p>I recommend that you write some simple tests of things you know to be true. Confirm the positive cases first. Then sit down with a smart, involved developer and pair develop some unit tests for code he hasn&#8217;t written yet. Do it the way you want the developers to do it, including deciding how to handle assertions that don&#8217;t exist yet. </p>
<p>In our case, the DBAs had already established a naming convention for database update files. I chose to duplicate the file names, which would look like ####_description.sql, changing the .sql extension to .test.sql. This let the testing framework associate the test with the delivered change. When running a &#8220;from zero&#8221; deployment, the test framework would then run TEST-CHANGE-TEST and expect the first test to fail and the second to pass. This demonstrated that the test was meaningful for the change (remember, the change is supposed to repair a shortcoming that is demonstrated by the test).</p>
<p>Once you&#8217;ve got buy-in from your chosen developer, sit down and develop a presentation that the two of you can give. Point to specific examples of blown deployments as reasons for unit testing the SQL. Then get the coder to explain the available test assertions. Then explain the framework you&#8217;ve developed to integrate the testing library with CI, and explain what failures are going to look like. And don&#8217;t forget to point them at the documentation you&#8217;ve written on the project wiki. This should get your team on board, and now you can start looking for other assertions to write. You can also start tightening the screws on your framework. Make it so that no change can be delivered without at least one test.</p>
<p><strong>Simple DML Checking</strong></p>
<p>The next obvious category of SQL statements to check is simple DML. These are the CRUD verbs: INSERT, SELECT, UPDATE and DELETE.  Except that SELECT can be pretty hard to check within SQL, so it&#8217;s best to ignore it for now in favor of the others. The problem with DML is knowing what to check for. If you insert a row, should you check that the ROW_COUNT() returns 1? Or should you query for the particular key of that row? </p>
<p>I&#8217;m pretty convinced that DML commands in scripts are going to be metadata related. That is, your application may be inserting customer records, or video titles, or whatever you track. But if a developer codes a DELETE, INSERT, or UPDATE into a deployable script, I think the intent is either to perform some kind of bulk fix (convert data fields, or eliminate nulls) or it is adjusting the &#8220;background&#8221; data &#8212; the list of postal codes, state and province names, etc. that your application relies on. In the case of the simple background data, if you added or updated it, you should check it explicitly: assert that for a specific key, the values are as expected. </p>
<p>Some examples of helpful functions would be <code>assert_statement_affects_rowcount(prepared_statement, num_rows), assert_table_column_matches_count('table name', 'column', value, count),</code> and their negatives. The way to do dynamic programming in MySQL is with prepared statements. You can construct a string containing a SQL statement, use PREPARE to assign it to an identifier, and then EXECUTE the identifier:</p>
<p><code><br />
PREPARE stmt<br />
    FROM<br />
        CONCAT("SELECT COUNT(*) FROM ", table_name, " WHERE ", field_name, " = ?");<br />
</code></p>
<p><code><br />
EXECUTE stmt USING value;<br />
</code></p>
<p>In the more complex case of a data format or type update, the update should be encoded in a stored procedure. This way you can unit test the stored procedure with sample data. Once the procedure is ready to go, write a script that calls the procedure &#8211; confident already that the procedure will work &#8211; and test the invocation by confirming random elements of the data have converted correctly.</p>
<p><strong>Testing Result Sets</strong></p>
<p>As mentioned, testing SELECT can be a real challenge. While it is easy to create an assert_row_count(num) to confirm that your query returned the right number of values, it can be much harder to create a function to assert that a particular ordering exists, or that the results are truly grouped by postal code.</p>
<p>The first thing to do is go ahead and write the assertion functions for number of rows returned by the query. That&#8217;s simple, straightforward, and it can stand in place of more complex stuff for a long time. You may not ever get around to writing the more challenging assertions &#8212; if the tests are designed well enough, the number of results may be meaningful enough. If you do need to write more, especially if the query is complex, pass the query as a string to your assertion, prepare it as a statement, and make sure the results go into a temporary table. Then you can write whatever horribly complex code you need against the temporary table, without having to worry about losing context.</p>
<p><strong>Testing Triggers</strong></p>
<p>Triggers are going to be harder to test than other pieces of code because of the diverse ways you can invoke them. For example, a DELETE trigger may need to be checked with a simple delete statement as well as with a CASCADE from a foreign key relationship. Beyond creating assertions for the existence and type of triggers (BEFORE/AFTER, INSERT/UPDATE/DELETE, etc.) there isn&#8217;t really any obvious set of assertions to write. It&#8217;s more a question of deciding how to test the effects of the triggers, and of documenting the ways the trigger can be invoked.</p>
<p><strong>Conclusion</strong></p>
<p>Unit testing, and test-first development, are well established best practices. But it&#8217;s easy to overlook the &#8220;small stuff&#8221; when developers are setting up frameworks for testing their code. Database updates are small, but when they go wrong they can take out the rest of the system. It&#8217;s important to apply the same techniques, and get the same value, to this part of your development. Now you can.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2009/04/unit-tests-for-mysql-scripts/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Two Conferences</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences#comments</comments>
		<pubDate>Wed, 17 Sep 2008 02:15:52 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Industry]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences</guid>
		<description><![CDATA[Austin Hastings (that&#8217;s me) will be speaking at two conferences coming up in October. Both presentations will be focusing on LDM.
First, there&#8217;s the Telelogic User Group Conference 2008, in Austin, Texas. That&#8217;s obviously focused on Telelogic, and on CM Synergy and Telelogic Change, or whatever it&#8217;s called this week. Since I spent a fair amount [...]]]></description>
			<content:encoded><![CDATA[<p>Austin Hastings (that&#8217;s me) will be speaking at two conferences coming up in October. Both presentations will be focusing on LDM.</p>
<p>First, there&#8217;s the <a href="http://www.telelogic.com/campaigns/2008/ugc/americas/index.cfm">Telelogic User Group Conference 2008,</a> in Austin, Texas. That&#8217;s obviously focused on Telelogic, and on CM Synergy and Telelogic Change, or whatever it&#8217;s called this week. Since I spent a fair amount of time during the initial implementation of LDM wishing that I could use the kind of one-off ad hoc queries that Change is so good at, I suppose it&#8217;s appropriate.</p>
<p>The second conference is <a href="http://www.cmconf.de/agenda/">CMconf.DE,</a> in Munich, Germany. Sadly, it will be a few weeks after Oktoberfest &#8212; otherwise there would be no hope at all of getting hotel space, I suppose. I&#8217;ll just have to wander around looking for any leftover barrels of beer, slightly-used lederhosen, or oompa bands that I can scrounge up. The theme is the same &#8212; presenting LDM and some other approaches to database CM. </p>
<p>In both cases, the time constraints are really biting. LDM needs an understanding of the other ways to do (fail at) database CM before I can really talk about it, and I&#8217;m pretty sure that most people haven&#8217;t thought beyond one way, if that many. So I&#8217;ll be speaking really, really fast, and inviting attendees to stick around afterwards to talk about it.</p>
<p>Anyway, that&#8217;s two continents in a single month &#8212; not bad, if I do say so. If I could just find a conference in India, China, or Israel, I could sweep the northern hemisphere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/09/two-conferences/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MatchPoint &#8211; a first pass at deployment management?</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/03/matchpoint-a-first-pass-at-deployment-management</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/03/matchpoint-a-first-pass-at-deployment-management#comments</comments>
		<pubDate>Tue, 25 Mar 2008 15:10:27 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/03/matchpoint-a-first-pass-at-deployment-management</guid>
		<description><![CDATA[I was browsing some Spanish-language software development blogs, and came across a reference to MatchPoint, a mainframe-oriented product from a Swiss company called CM First AG. 
These guys don&#8217;t seem to have any more idea than most about how to manage database changes, but their product (or at least, the pdf of the glossy brochure) [...]]]></description>
			<content:encoded><![CDATA[<p>I was browsing some Spanish-language software development blogs, and came across a reference to MatchPoint, a mainframe-oriented product from a Swiss company called <a href="http://www.cmfirst.ch/cms/">CM First AG.</a> </p>
<p>These guys don&#8217;t seem to have any more idea than most about how to manage database changes, but their product (or at least, the pdf of the glossy brochure) looks to have some really good tracking built in for deployments in both i-space and Windows-space. They claim that (for a small additional fee) you can track deployments all the way to the customer. </p>
<p>This is typical of a mainframe approach. The mainframe guys don&#8217;t have bajillions of PC customers, they have tens, or hundreds, or thousands of mainframe customers. Those are small enough numbers that it makes sense to talk about tracking them individually. It isn&#8217;t surprising, therefore, that mainframers have a more pragmatic approach to tracking deployments.</p>
<p>Thinking about how I could get my hands on a copy of MatchPoint (when I don&#8217;t own an IBM i-series) has led me to think some more about how to review a CM tool. I want to be able to write CM tool reviews, but I don&#8217;t want to write the kind of bunkum that you get from most 1500-word specials.</p>
<p>If you have any hands-on experience with MatchPoint, I&#8217;d love to hear from you &mdash; to get some real world feedback on their glossy brochure, if nothing else. And if you have ideas on how to review a CM tool, well, I&#8217;ll write something up in a separate post. Hold that thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/03/matchpoint-a-first-pass-at-deployment-management/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dimension: Capability</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-capability</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-capability#comments</comments>
		<pubDate>Sun, 16 Mar 2008 17:57:08 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/03/dimension-capability</guid>
		<description><![CDATA[(Note: This is part of the “Dimensions of SCM Challenge” series.)
The simplest capability challenge from an SCM standpoint is SCM capability. Can you, or can your team, effectively manage the changes and/or configuration of your project? It’s hard to diagnose a lack of capability, because the team members are too busy dealing with the symptoms—each [...]]]></description>
			<content:encoded><![CDATA[<p><em>(Note: This is part of the <a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge">“Dimensions of SCM Challenge”</a> series.)</em></p>
<p>The simplest capability challenge from an SCM standpoint is SCM capability. Can you, or can your team, effectively manage the changes and/or configuration of your project? It’s hard to diagnose a lack of capability, because the team members are too busy dealing with the symptoms—each problem that comes up has a simple, direct solution. As the saying goes, “It’s hard to remember that you set out to drain the swamp when you’re neck deep in alligators.” But if you are struggling with failed builds or missing source code, or if the QA department is wondering why a bug they marked as ‘fixed’ has reappeared in the product, or if you are poring through someone’s email archive looking for information that should be available from the repository, then you have a capability problem. </p>
<p>More likely, though, is that you have some basic CM up and running, and you are being challenged by a new project. Maybe there is a new technology that needs to be integrated with your build system, or a new office that you have to support. These cases are easier to detect, since they occur as a result of a change to the project itself. The root cause of the capability challenge may come from another dimension listed in this series, such as geography, technology, or schedule, but if you cannot respond or don’t know how to respond, then part of the problem is capability. </p>
<p>A good technique for basic CM capability problems is Subject Matter Expert. (Note that the author is a CM consultant, and so benefits from giving this advice.) Hire or appoint someone to deal with CM issues, either to solve a particular problem or to provide ongoing expertise for your organization. </p>
<p>Beyond just CM capability, other capability challenges may impact your CM team. If management decides to outsource some or all of your next project, you will face capability issues—the new team may not know how to use your tool suite, or may not know the technologies your team uses. They certainly won’t know the internal details of your project. Depending on the structure of your project, you may find that you have hardware capability issues—not enough network bandwidth, not enough build capacity, not enough disk space. Knowledge acquisition is generally simple—spend money on training. Likewise, hardware capacity problems are solvable with cash. </p>
<p>Most other capability challenges are part of a larger problem, likely one that falls mostly along another dimension in the list. If executive management decides to enter a new market, you may face regulatory or human language issues. Restructuring, mergers, and joint development can lead to location of responsibility, culture, geography, and knowledge retention issues. Not all ‘can we?’ problems are capability problems. But nearly all problems will have a capability component. Geographically distributed development calls for networking multiple servers; adding a new technology requires training for the developers; and regulatory compliance requires updating or adding formal processes. If you don’t already have them, you have to acquire the resources to solve the problem.</p>
<p><em>(This was published as part of “Dimensions of SCM Challenge: Capability and Finances&#8221; in CM Journal, Vol. 6, No. 2, February 2008.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-capability/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dimension: Requirements or Business Demands</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-requirements-or-business-demands</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-requirements-or-business-demands#comments</comments>
		<pubDate>Sun, 16 Mar 2008 17:41:55 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/03/dimension-requirements-or-business-demands</guid>
		<description><![CDATA[(Note: This is part of the &#8220;Dimensions of SCM Challenge&#8221; series.)
Changing or unknown requirements can be a huge source of problems for a development team. Fortunately, configuration management is designed to support exactly this development problem. Books and tools abound that address the issues of managing changes, documenting and tracing requirements, and ensuring that the [...]]]></description>
			<content:encoded><![CDATA[<p><em>(Note: This is part of the <a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge">&#8220;Dimensions of SCM Challenge&#8221;</a> series.)</em></p>
<p>Changing or unknown requirements can be a huge source of problems for a development team. Fortunately, configuration management is designed to support exactly this development problem. Books and tools abound that address the issues of managing changes, documenting and tracing requirements, and ensuring that the true needs of the eventual customers are met by the project. Requirements elicitation and elucidation, change management, and traceability tools are all available in the commercial market, and Agile development methods can ensure that customer representatives are involved from the very beginning. Tracking changes to requirements is not the same as tracking changes to software, but nearly every CM tool vendor offers an extension or plug-in for requirements management. Similarly, the requirements management tool vendors offer change tracking systems, as well as integrations with CM tools.</p>
<p>The most basic requirements challenge is knowing that a requirement exists at all. When a project transitions from a “clever idea” to a formal product, or switches from development to maintenance, the developer(s) will begin to get change requests and feature suggestions from a multitude of new sources. Keeping track of the ideas, and which ones are approved, is an important first step. Frequently this is implemented using the team’s change tracking tool. As the difference between requirements and change requests becomes more clear, the team can move to Formal Requirements Management.</p>
<p>The next source of requirements challenge is simple: a requirement to do something really, really hard. There isn’t much that CM can do to help directly with this kind of requirement. A good requirements management tool will, however, be able to predict the impact of the requirement—which parts of the project are affected by the requirement, and so likely to change. In some cases a single difficult requirement is really a Technical Complexity challenge (solve the Traveling Salesman problem), or a Technological Diversity challenge (integrate with a decades-old legacy system), rather than a requirements challenge. Please refer to the appropriate article, when they come out.</p>
<p>One common form of the “hard to do” problem is a requirement that the development team has never faced before. If a team that is accustomed to performance requirements is suddenly faced with a peak power requirement, for example, the team may get “stuck” with little or no idea of how to proceed. This may genuinely be a hard problem, but more likely is that the solution already exists. The solution in this case may be a new technology, especially if the requirement is being driven by managerial enthusiasm. Beware of hearing “this is the new state of the art” in meetings, and expect to deal with Technological Diversity challenges. When a team is facing an entirely new category of requirement, Subject Matter Expert is a good bet for a solution.</p>
<p>Another source of heretofore-unseen requirements is organizational change. When an organization is being divided, or when two organizations are being merged, some new and strange requirements can appear. (“Integrate our product with that other product over there. Make it seamless!”) Beware of other Organizational Structure challenges, obviously. Sending an envoy from one team to another makes sense as a basic Subject Matter Expert approach, but identifying someone to be sent to another team can also identify them as a target for layoffs—there aren’t a lot of easy answers.</p>
<p>When the challenge stems from the number of requirements, the complexity of the requirements, or from the need to verify the requirements, the answer is going to be Requirements Management. (It seems a little shady to be classifying an entire discipline as a CM technique, but this isn’t a requirements management journal.) CM tool vendors have a variety of requirements management solutions already available, and the biggest tool vendors—Rational (now IBM) and Telelogic (now IBM)—offer requirements management tools that integrate with their CM tools. (DOORS famously integrates with nearly everything.) </p>
<p>The last source of requirements challenges, and the most common, is frequency of change. When requirements changes (including new requirements) occur too fast, the development team can’t keep up. Symptoms include the reappearance of defects or deviations that have been fixed, excessive trouble testing the product, problem reports citing recently-updated requirements, and customer complaints about unresponsive or inadequate development. If the requirements change cycle is significantly faster than the development cycle, the list of pending changes can grow ridiculous. When this happens, development may respond by asking for an incredibly long requirements change and review cycle, typically tied to the development cycle. This is a symptom, and the solution is to speed up the release cycle, not slow down everything else. Consider an Agile development approach, in order to tighten up the feedback from development to customers. </p>
<p>The organizational techniques can be tremendously valuable when dealing with requirements challenges. A Change Control Board is an excellent source of detailed analysis when composed correctly. If you already have a CCB that you fear might be wrongly constructed, consider creating an additional one within the development group(s) with the right make-up. The ‘correct’ composition will depend on the type of requirements that are presenting the challenge. Functional requirements will need a functional CCB, procedural requirements need an organizational or managerial CCB. The benefit here is that each member of the board is looking at changes from the point of view of their own area of expertise. Parochialism is a benefit, since proposed requirements and proposed implementations can be checked in some detail.</p>
<p>System Architect does not offer the same diversity of interests that a CCB does. However, a single person with the entire system in his head provides a different value. The System Architect is going to have a strong grasp of how the different parts of the system interact. In combination with a construction technique like Component-based Development or Service-oriented Architecture, the architect can review and analyze a larger volume of system changes than a CCB. When rate of change is the primary source of challenge, System Architect is a good technique for dealing with technical requirements.</p>
<p>In fact, a System Architect is essentially a specialized Subject Matter Expert in the context of requirements challenges. While a System Architect offers quick, informed understanding of technical requirements changes, a Subject Matter Expert can be created or hired for any kind of requirements challenge. This makes Subject Matter Expert the organizational technique of choice for rate-of-change challenges. Unfortunately, it can take months for a SME to get up to speed on a technical project. The particular nuances of a long-standing project take time to learn. Obviously the actual time required will be different for each separate aspect of the project. A  DBA may come along quickly for table &#038; index performance issues, but then take months to comprehend all the triggers and stored procedures that are used. Keep in mind that Subject Matter Experts are not strictly technical. There are plenty of experts available for process, management, and business requirements. (This is a shameless plug: the author is one of those available experts!)</p>
<p>The codevelopment techniques are useful to address rate-of-flow challenges. Simultaneous Development is an obvious requisite. There are occasionally situations (usually involving a common file or table) where serialized development is put forward as a solution to rate-of-flow challenges. It is better to make a simple process change to deal with this—choose one official maintainer of the file or table in question and assign all changes to that item to the designated victim. You may have to create “child” requests or tasks for this, but it is simpler and more effective to give all the funny stuff to one expert. </p>
<p>Of the ceremonious techniques, Automated Enforcement of Standards and Gated Workflow can help with requirements challenges when they are used in conjunction with other techniques. The object with these techniques is to devise a process that will help with requirements challenges, and then automate it. Obviously, Automated Enforcement of Standards is a win if the standard is one of the requirements. But it can also be used to execute test cases, which ties in nicely with Fast Feedback on Changes. Similarly, Gated Workflow can be used to involve a SME or CCB in the process, requiring sign-off before changes enter development. Gated Workflow can also help ensure that regression testing or impact analysis are done after a change is delivered. Finally, Requirements Management is a strong technique to use with rate-of-flow challenges. If a requirement is just unfamiliar, or merely incredibly difficult to implement, then requirements management may not offer much benefit. When a large number of requirements are changing, or when they are constraining the response to a smaller set of changing requirements, Requirements Management is the way to go.</p>
<p><em>(This was published as part of &#8220;Dimensions of SCM Challenge #2: Standards and Interfaces &#038; Requirements or Business Demands&#8221; in CM Journal, Vol. 6, No. 3, March 2008.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-requirements-or-business-demands/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dimension: Standards &amp; Interfaces</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-standards-interfaces</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-standards-interfaces#comments</comments>
		<pubDate>Sun, 16 Mar 2008 17:37:31 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/03/dimension-standards-interfaces</guid>
		<description><![CDATA[(Note: This is part of the &#8220;Dimensions of SCM Challenge&#8221; series.)
For our purposes, there is not much difference between a standard and an interface. Either one can be nearly trivial to support, or can impose enormous costs on the project. Complying with an internal coding standard, an ISO language standard, or a database vendor API [...]]]></description>
			<content:encoded><![CDATA[<p><em>(Note: This is part of the <a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge">&#8220;Dimensions of SCM Challenge&#8221;</a> series.)</em></p>
<p>For our purposes, there is not much difference between a standard and an interface. Either one can be nearly trivial to support, or can impose enormous costs on the project. Complying with an internal coding standard, an ISO language standard, or a database vendor API can be simplicity itself. Trying to conform to a certain process model, or interface with a complex file format or communications protocol can supply problems for years. Part of this stems from the amount of documentation available for the standard or interface. Abundant documentation usually correlates with a straightforward implementation, especially if the documentation comes from O’Reilly &#038; Associates. When the standard or interface is a moving target you can generally anticipate problems, but anticipating the problems usually helps mitigate them. </p>
<p>Sometimes the interface is all but undocumented. Every significant release of a major web browser is accompanied by a flurry of Internet activity dedicated to researching and understanding all the bugs and quirks in the rendering engine, and a parallel search for ways to uniquely identify the new version from within CSS, within HTML, and using Javascript. If you work for a popular web site or a maker of web design technology, or if your organization specializes in web design, then keeping abreast of these updates is crucial to your business. (If you’ve never dealt with the joys of browser detection, ask a co-worker or friend who has. Once you get them started, the stream of bile and frustration that emerges will curl your hair.) </p>
<p>Working with an undocumented interface that is crucial to your product but totally outside your control is one extreme form of challenge. That particular challenge is usually short-lived, since everyone else in the web industry begins exploring and documenting the browser quirks at the same time. Another kind of challenge happens when you are implementing a standard without any specification of the required outcome. While an open specification works well for requirements, it doesn’t work when different teams interpret the same prose to mean different things in the design. If each side of an interface expects the other side to handle object initialization, for instance, then the first integration test will be short, loud, and exciting. </p>
<p>One key ‘gotcha’ to beware of when dealing with a technical standard or interface is the need to explore these standards very early in the process. Even when you are ‘assured’ of documentation or technical details, there are often subtle dependencies on the ‘usual’ values or the order of certain items. For instance, a generic “set parameter” interface may actually require that parameter A always be set before parameter B. If your project doesn’t control both sides of the interface, you should allocate time early on to mapping out the context and expectations.</p>
<p>Interface Management is a defined part of configuration management. Sadly, few software shops have much (if any) experience formally managing interfaces. There is a technique, Formal Interfaces &#038; Standards, that uses the constraints and rigidity of interfaces as a strength rather than dealing with them as a challenge. This is a question of choice—the technique relies on using interfaces that you choose to put in place, rather than externally-imposed constraints. In fact, once you have agreed to use a standard, it doesn’t matter how it came to be. Having voluntarily agreed to the constraints may make the situation more palatable, but the concrete challenges will be the ones listed above.</p>
<p>The lifespan of a standard or interface is one of the most important factors in determining the inconvenience it will cause. A long-lasting standard or interface will generally be better documented, more flexible, and can be incorporated into the requirements, architecture, and design of the product. It is unlikely to change at all, but if it does change it will likely be a minor modification or update. A short-term interface or standard will generally be seen only at the design phase and after. It may be modified, updated, or it may disappear entirely between one release and the next.</p>
<p>For example, a “supported operating systems” list is a long term constraint, with updates as new OS versions are released, and a gradual phasing out of old versions. (Current-day Windows applications support surprisingly old versions of Windows, going as far back as 98 or ME.) </p>
<p>Another example: the decision to support a particular version or release of Oracle might qualify as either a long- or short-term constraint. If the Oracle software is being bundled with the product, or is expected to be installed on a dedicated server for the product, then the required Oracle version can be changed in lockstep with new product releases (usually with a small fudge-factor for upgrades). But if the Oracle installation is expected to be part of a customer’s existing infrastructure then the range of versions supported will be much wider, and testing will need to be much more thorough. </p>
<p>One last example: if an interface is completely internal to the product—a gateway between two modules, or a file format—it is likely to be entirely under control of the respective development groups, and so can be changed from version to version. In this case, the only limiting factor is the agreement of the various teams that use the interface. This is no small thing, since some of the other dimensions of challenge can rear their ugly heads at this point. Using Formal Interfaces &#038; Standards is a good way to isolate development teams that are divided by geography, language, culture, or politics. But using the technique transfers part of the challenge directly from those dimensions to this one—a geography or culture challenge is transformed into a standards conformance challenge.</p>
<p>Using interfaces is a boolean proposition: either the system correctly uses the interface, or it does not. (Which is not to suggest that all interfaces are simple!) This is normally determined as part of system testing.  Standards are less sanguine. Some standards, like programming language syntax, can be verified mechanically. Others have to be enforced or checked using a higher level process. In some cases, like with a process standard, the higher level process is necessary just to implement the standard, and so an even higher level process is required for checking. Checking for conformance can sometimes be implemented either manually or with an automated process. The choice between automation and manual effort may be a property of the standard, or it may be a cost-based or effort-based decision. Opting to spend thousands of man-hours a few at a time in a manual process over months or years instead of spending tens or hundreds of man-hours automating a process is a management decision—frequently a surprising one.</p>
<p>The decomposition-based construction techniques (Component-based Development, Service-oriented Architecture, and Software Assembly) are all potentially useful, provided that the decomposition aligns with the interfaces and that the interfaces are at roughly the same level as the granularity of the decompositions. It makes no sense to try to break up a complex library in order to align it with a special memory allocation package. When dealing with standards, rather than interfaces, decomposition won’t provide any direct benefits. In this case, Software Product Lines might be useful if the standard can be viewed as a feature—that is, if the standard is not an all-or-nothing proposition but instead constrains a subset of the product, or can be presented as an optional element. Many programs offer installation options to select one or more languages or character sets for the user interface or for program data. If conformance to an accessibility standard were an installation option, SPL would be a useful approach. Similarly, if the standard in question is a technical standard like support for a particular file format or graphics engine then SPL may be a good fit. The Microsoft Office™ suite installation process used to offer file format translators for a slew of competing products as optional packages. An organization converting from another word processor or spreadsheet package could install the readers for those file formats, while other customers could save the disk space.</p>
<p>Of the organizational techniques, System Architect has relatively little to offer. Using a Change Control Board can be an effective way to manage changes to an interface or standard, since the board will likely be small enough to work effectively together but diverse enough to consider all the likely impacts of a change. The makeup of the board will dictate its effectiveness dealing with interfaces or standards. A board that is represented along political/organizational lines (1 seat for QA, 1 seat for IT, 1 seat for Development, etc.) will handle process standards well, but will likely not do well for technical interfaces. Conversely, a board broken down along functional lines (1 seat for electrical, 1 seat for sensors, 1 seat for control systems) will do well managing technical interfaces but may not fully grasp the nuances of a process standard. Having a Subject Matter Expert can be an effective way to deal with a standard or interface, provided the SME is expert in the standard. When the interface or standard is key to the project, a SME is nearly always a good solution.</p>
<p>Technical standards and interfaces generally don’t interact with the work flow techniques. Process standards are another story. Project Baseline is likely to be the SCM technique envisioned by the authors, designers, and implementers of nearly all process standards. As a result, using Project Baseline is likely to minimize the problems encountered when first adopting a process standard. Problematically, not all projects can use Project Baseline, especially not with recent process standards like ITIL. Longacre Deployment Management™ bridges between the Project Baseline and ITIL styles, and can provide enough of an “adapter” to help complex projects conform to common, consistent standards.</p>
<p>The codevelopment techniques can be useful with technical standards (as opposed to process standards) and with most interfaces. Independent Development Paths created at the right level can permit a group of developers to make changes to an interface without blowing up the development environment for the rest of the team. Likewise, Distributed CM lets separate teams work separately. If the organizational structure is aligned with the interface structure, this will help keep both sides of the interface(s) separate, but bring their work together for integration in a controlled manner. Finally there is Formal Interfaces &#038; Standards. Recommending this as a response to Interface challenges seems a bit of a bromide—“when life gives you interfaces, make interface-ade”—but it works. For technical standards, fighting one interface problem with another interface is a straightforward Facade pattern, or an Abstraction Layer.</p>
<p>Standards conformance is a ceremonious activitity, and all of the ceremonious techniques are potentially useful. Requirements Management can help with high-level technical standards, and with low- and mid-level process standards. (Low-level technical standards tend to disappear behind a single requirement, which isn’t very useful. And high-level process standards usually control the process of implementing the requirements—they are too high level for requirements to be useful.) Automated Enforcement of Standards is pretty much a no-brainer, provided the standards are amenable to being enforced automatically. Treating interfaces separately, and using a tool like IDL or rpcgen to manage them fits into this category. AES is not restricted only to process standards. Lastly, Gated Workflow can help with process standards and human-centric technical standards by forcing the standards verification to take place early in the change life cycle. As an example, certain software controlling the administration of drugs is required by the FDA to be peer reviewed whenever a change is made. Inserting this peer review sign-off into the change request work flow is an effective solution to the constraint.</p>
<p><em>(This was published as part of “Dimensions of SCM Challenge #2: Standards and Interfaces &#038; Requirements or Business Demands” in CM Journal, Vol. 6, No. 3, March 2008.)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/03/dimension-standards-interfaces/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dimensions of SCM Challenge</title>
		<link>http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge#comments</comments>
		<pubDate>Sun, 16 Mar 2008 17:27:35 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge</guid>
		<description><![CDATA[I wrote this stuff&#8212;all the dimensions of challenge bits&#8212;at the same time as the SCM Techniques. To me, they are two sides of the same coin. The challenges identify types of problem that you might have, or perhaps helps to decompose the problems you have. The techniques help to overcome the problems. I&#8217;m submitting both [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote this stuff&mdash;all the dimensions of challenge bits&mdash;at the same time as the SCM Techniques. To me, they are two sides of the same coin. The challenges identify types of problem that you might have, or perhaps helps to decompose the problems you have. The techniques help to overcome the problems. I&#8217;m submitting both sets of articles to the CM Journal. This first bit is the common header that all the challenge articles share.</p>
<p>Part of managing software development is dealing with the challenges that arise. Delivering software requires overcoming the challenges, or at least mitigating the attendant risks during the development activity. Generally, organizations work with a constant level of challenge. When one challenge is overcome, the organization will take on a new challenge. For example, when a project releases software that overcomes a technical challenge, it might then schedule a new release with a challenging timeline, or re-open the technical challenge by choosing a new target platform. The next challenge is not “just like the last one, only more.” An organization that successfully implements geographically distributed development does not follow up by adding another development office. The organization may well open another office, but doing so is now a normal operation; in order to maintain the level of challenge, some other “impossible task” must be undertaken.</p>
<p>While problems may have unique characteristics, there are a lot of common themes. This series discusses sixteen separate dimensions of challenge. The situation your team faces can be analyzed with respect to the dimensions listed here, and some appropriate conclusions drawn. Each dimension is dissected, and some approaches for dealing with it are provided. Here is the complete list:</p>
<ul>
<li><a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimension-capability">Capability</a></li>
<li>Culture / Ethnicity</li>
<li>Efficiency</li>
<li><a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimension-finances">Finances</a></li>
<li>Geography</li>
<li>Human Language</li>
<li>Knowledge Retention</li>
<li>Location of Responsibility</li>
<li>Organizational Structure</li>
<li><a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimension-requirements-or-business-demands">Requirements or Business Demands</a></li>
<li>Scalability</li>
<li>Schedule</li>
<li><a href="http://www.longacre-scm.com/blog/index.php/2008/03/dimension-standards-interfaces">Standards &#038; Interfaces</a></li>
<li>Synchronicity</li>
<li>Technical Complexity</li>
<li>Technological Diversity</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2008/03/dimensions-of-scm-challenge/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Two LDM Articles</title>
		<link>http://www.longacre-scm.com/blog/index.php/2007/04/two-ldm-articles</link>
		<comments>http://www.longacre-scm.com/blog/index.php/2007/04/two-ldm-articles#comments</comments>
		<pubDate>Sat, 28 Apr 2007 01:16:45 +0000</pubDate>
		<dc:creator>Austin Hastings</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Industry]]></category>
		<category><![CDATA[Organizations]]></category>
		<category><![CDATA[Software CM]]></category>
		<category><![CDATA[Theory]]></category>

		<guid isPermaLink="false">http://www.longacre-scm.com/blog/index.php/2007/04/two-ldm-articles</guid>
		<description><![CDATA[April is the month for LDM at CM Crossroads. They published two articles, one a case study describing the background in which it was developed, the other a technical introduction.
The case study is here, and the technical details article is here. 
I&#8217;m eventually going to incorporate LDM info as pages here on Doing Better. But [...]]]></description>
			<content:encoded><![CDATA[<p>April is the month for LDM at CM Crossroads. They published two articles, one a case study describing the background in which it was developed, the other a technical introduction.</p>
<p>The case study is <a href="http://www.cmcrossroads.com/content/view/7860/240/">here</a>, and the technical details article is <a href="http://www.cmcrossroads.com/content/view/7910/240/">here. </a></p>
<p>I&#8217;m eventually going to incorporate LDM info as pages here on Doing Better. But for now I&#8217;m frantically editing the articles to try to improve their look &#8212; CMJ&#8217;s article import scripts really aren&#8217;t very good at handling a complex document.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.longacre-scm.com/blog/index.php/2007/04/two-ldm-articles/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
