<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://commons.oreilly.com/wiki/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;action=history&amp;feed=atom</id>
		<title>The Road to Performance Is Littered with Dirty Code Bombs - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;action=history&amp;feed=atom"/>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;action=history"/>
		<updated>2013-05-20T16:36:51Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.11.0</generator>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24655&amp;oldid=prev</id>
		<title>Kcpeppe at 05:57, 7 July 2009</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24655&amp;oldid=prev"/>
				<updated>2009-07-07T05:57:21Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 05:57, 7 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and controlling the degree and depth of couplings and complexity of our code. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The fundamental &lt;/del&gt;metrics &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;concerning &lt;/del&gt;the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;level &lt;/del&gt;of &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;coupling are in terms of fan-in and fan-out. These metrics describe &lt;/del&gt;features in our code &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that we can look for and count&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Moreover, the magnitudes &lt;/del&gt;of these counts do correlate with code quality. Consider fan-out: It is defined as the number of classes referenced either directly or indirectly from a class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. Fan-in, on the other hand, is a count of all classes that depend upon the class of interest. Knowing fan-out and fan-in we can calculate an instability factor using ''I = f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt; / (f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;)''. As ''I'' approaches 0, the package becomes more stable. As ''I'' approaches 1, the package becomes unstable. Packages that are stable are low risk targets for recoding whereas unstable packages are more likely to be filled with dirty code bombs. The goal in refactoring is to move ''I'' closer to 0.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and controlling the degree and depth of couplings and complexity of our code. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Software &lt;/ins&gt;metrics &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;can be used to count &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;occurrences &lt;/ins&gt;of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;specific &lt;/ins&gt;features in our code. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The values &lt;/ins&gt;of these counts do correlate with code quality&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. Two of the number of metrics that measure couplings are fan-in and fan-out&lt;/ins&gt;. Consider fan-out: It is defined as the number of classes referenced either directly or indirectly from a class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. Fan-in, on the other hand, is a count of all classes that depend upon the class of interest. Knowing fan-out and fan-in we can calculate an instability factor using ''I = f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt; / (f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; + f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;)''. As ''I'' approaches 0, the package becomes more stable. As ''I'' approaches 1, the package becomes unstable. Packages that are stable are low risk targets for recoding whereas unstable packages are more likely to be filled with dirty code bombs. The goal in refactoring is to move ''I'' closer to 0.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When using metrics one must remember that they are only rules of thumb. Purely on maths we can see that increasing ''f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' without changing ''f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;'' will move ''I'' closer to 0. There is, however, a downside to a very large fan-in value in that these class will be more difficult to alter without breaking dependents. Also, without addressing fan-out you're not really reducing your risks so some balance must be applied.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When using metrics one must remember that they are only rules of thumb. Purely on maths we can see that increasing ''f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' without changing ''f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;'' will move ''I'' closer to 0. There is, however, a downside to a very large fan-in value in that these class will be more difficult to alter without breaking dependents. Also, without addressing fan-out you're not really reducing your risks so some balance must be applied.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24645&amp;oldid=prev</id>
		<title>Kevlin at 21:39, 6 July 2009</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24645&amp;oldid=prev"/>
				<updated>2009-07-06T21:39:41Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:39, 6 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;contorlling &lt;/del&gt;the degree and depth of couplings and complexity of our code. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Metrics that measure &lt;/del&gt;the level of coupling &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;include Law &lt;/del&gt;of &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Demeter, &lt;/del&gt;fan-in and fan-out. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/del&gt;fan-out &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;metric. &lt;/del&gt;It is defined as the number of classes referenced either directly or indirectly from a class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The metric fan&lt;/del&gt;-in is a count of all classes that depend upon the class of interest. Knowing fan-out and fan-in we can calculate an instability factor using I = &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fo &lt;/del&gt;/ (&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fi &lt;/del&gt;+ &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fo&lt;/del&gt;). &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;If &lt;/del&gt;I &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is &lt;/del&gt;0, the package &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is very &lt;/del&gt;stable. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;If &lt;/del&gt;I &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is &lt;/del&gt;1, the package &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is very &lt;/del&gt;unstable. Packages that are stable are low risk targets for recoding &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;where as &lt;/del&gt;unstable packages are filled with dirty code bombs. The goal in refactoring is to move I closer to 0.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;controlling &lt;/ins&gt;the degree and depth of couplings and complexity of our code. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The fundamental metrics concerning &lt;/ins&gt;the level of coupling &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are in terms &lt;/ins&gt;of fan-in and fan-out. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider fan-out&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;: &lt;/ins&gt;It is defined as the number of classes referenced either directly or indirectly from a class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Fan&lt;/ins&gt;-in&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, on the other hand, &lt;/ins&gt;is a count of all classes that depend upon the class of interest. Knowing fan-out and fan-in we can calculate an instability factor using &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/ins&gt;I = &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt; &lt;/ins&gt;/ (&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; &lt;/ins&gt;+ &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;&lt;/ins&gt;)&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As ''&lt;/ins&gt;I&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'' approaches &lt;/ins&gt;0, the package &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;becomes more &lt;/ins&gt;stable. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;As ''&lt;/ins&gt;I&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'' approaches &lt;/ins&gt;1, the package &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;becomes &lt;/ins&gt;unstable. Packages that are stable are low risk targets for recoding &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;whereas &lt;/ins&gt;unstable packages are &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;more likely to be &lt;/ins&gt;filled with dirty code bombs. The goal in refactoring is to move &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/ins&gt;I&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'' &lt;/ins&gt;closer to 0.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When using metrics one must remember that they are only rules of thumb. Purely on maths we can see that increasing &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fi &lt;/del&gt;without changing &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fo &lt;/del&gt;will move I closer to 0. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;However there &lt;/del&gt;is a downside to a very large fan-in value in that these class will be more difficult to alter without breaking dependents. Also, without addressing fan-out you're not really reducing your risks so some balance must be applied.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;When using metrics one must remember that they are only rules of thumb. Purely on maths we can see that increasing &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''f&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;'' &lt;/ins&gt;without changing &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''f&amp;lt;sub&amp;gt;o&amp;lt;/sub&amp;gt;'' &lt;/ins&gt;will move &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;''&lt;/ins&gt;I&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'' &lt;/ins&gt;closer to 0. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;There &lt;/ins&gt;is&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, however, &lt;/ins&gt;a downside to a very large fan-in value in that these class will be more difficult to alter without breaking dependents. Also, without addressing fan-out you're not really reducing your risks so some balance must be applied.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;One downside to software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;One downside to software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kevlin</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24632&amp;oldid=prev</id>
		<title>Kcpeppe at 19:27, 6 July 2009</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24632&amp;oldid=prev"/>
				<updated>2009-07-06T19:27:30Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:27, 6 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and contorlling the degree and depth of couplings and complexity of our code. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Included are &lt;/del&gt;the Law of Demeter&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, Coupling between Objects (CBO)&lt;/del&gt;, fan in&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;fan out &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;which create efferent and afferent couplings and so on&lt;/del&gt;. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;for example where couplings &amp;quot;fan out&amp;quot; from &lt;/del&gt;the class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Dependencies all &amp;quot;&lt;/del&gt;fan in&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;quot; from &lt;/del&gt;classes that &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;reference your &lt;/del&gt;class. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;If for every class &lt;/del&gt;in an &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;application these counts are small&lt;/del&gt;, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;you can safely conclude &lt;/del&gt;that &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;couplings &lt;/del&gt;are &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;shallow and, therefore, pose a minimal &lt;/del&gt;risk &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;to refactoring&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;That said, maintaining low fan-&lt;/del&gt;in &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;runs the danger of repeating units of logic in independent modules of your application. A guideline to follow &lt;/del&gt;is to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;fan-in locally but violate DRY globally&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring and contorlling the degree and depth of couplings and complexity of our code. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Metrics that measure &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;level of coupling include &lt;/ins&gt;Law of Demeter, fan&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;in &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;and &lt;/ins&gt;fan&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;out. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. It is defined as &lt;/ins&gt;the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;number of classes referenced either directly or indirectly from a &lt;/ins&gt;class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The metric &lt;/ins&gt;fan&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;in &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is a count of all &lt;/ins&gt;classes that &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;depend upon the &lt;/ins&gt;class &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of interest&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Knowing fan-out and fan-&lt;/ins&gt;in &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;we can calculate &lt;/ins&gt;an &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;instability factor using I = fo / (fi + fo). If I is 0&lt;/ins&gt;, &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the package is very stable. If I is 1, the package is very unstable. Packages &lt;/ins&gt;that are &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;stable are low &lt;/ins&gt;risk &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;targets for recoding where as unstable packages are filled with dirty code bombs&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The goal &lt;/ins&gt;in &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;refactoring &lt;/ins&gt;is to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;move I closer to 0&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;A downside &lt;/del&gt;of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;When using metrics one must remember that they are only rules &lt;/ins&gt;of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;thumb. Purely on maths we can see that increasing fi without changing fo will move I closer to 0. However there is a downside to a very large fan-in value in that these class will be more difficult to alter without breaking dependents. Also, without addressing fan-out you're not really reducing your risks so some balance must be applied.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;One downside to &lt;/ins&gt;software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24626&amp;oldid=prev</id>
		<title>Kcpeppe at 11:41, 6 July 2009</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24626&amp;oldid=prev"/>
				<updated>2009-07-06T11:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 11:41, 6 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out which create efferent and afferent couplings&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, McCabe's cyclometric complexity, &lt;/del&gt;and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric for example where couplings &amp;quot;fan out&amp;quot; from the class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. Dependencies all &amp;quot;fan in&amp;quot; from classes that reference your class. If for every class in an application these counts are small, you can safely conclude that couplings are shallow and, therefore, pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;and contorlling &lt;/ins&gt;the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out which create efferent and afferent couplings and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric for example where couplings &amp;quot;fan out&amp;quot; from the class of interest. You can think of this as a count of all the classes that must be compiled before your class can be compiled. Dependencies all &amp;quot;fan in&amp;quot; from classes that reference your class. If for every class in an application these counts are small, you can safely conclude that couplings are shallow and, therefore, pose a minimal risk to refactoring&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. That said, maintaining low fan-in runs the danger of repeating units of logic in independent modules of your application. A guideline to follow is to fan-in locally but violate DRY globally&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24619&amp;oldid=prev</id>
		<title>Kevlin: The road to performance is littered with dirty code bombs moved to The Road to Performance Is Littered with Dirty Code Bombs</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=24619&amp;oldid=prev"/>
				<updated>2009-07-06T09:18:03Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;a href=&quot;/wiki/index.php/The_road_to_performance_is_littered_with_dirty_code_bombs&quot; title=&quot;The road to performance is littered with dirty code bombs&quot;&gt;The road to performance is littered with dirty code bombs&lt;/a&gt; moved to &lt;a href=&quot;/wiki/index.php/The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&quot; title=&quot;The Road to Performance Is Littered with Dirty Code Bombs&quot;&gt;The Road to Performance Is Littered with Dirty Code Bombs&lt;/a&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:18, 6 July 2009&lt;/td&gt;
			&lt;/tr&gt;
		&lt;/table&gt;</summary>
		<author><name>Kevlin</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21799&amp;oldid=prev</id>
		<title>Knit at 16:58, 27 November 2008</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21799&amp;oldid=prev"/>
				<updated>2008-11-27T16:58:14Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:58, 27 November 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;More often than not, performance tuning a system requires you to alter code. When we need to alter code, every chunk that is overly complex or highly coupled is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the way forward is smooth it will be easy to predict when you'll finish. Unexpected encounters with dirty code will &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;makes &lt;/del&gt;it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;More often than not, performance tuning a system requires you to alter code. When we need to alter code, every chunk that is overly complex or highly coupled is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the way forward is smooth it will be easy to predict when you'll finish. Unexpected encounters with dirty code will &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;make &lt;/ins&gt;it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:21664:newid:21799 --&gt;
&lt;/table&gt;</summary>
		<author><name>Knit</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21664&amp;oldid=prev</id>
		<title>Kcpeppe at 10:09, 22 November 2008</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21664&amp;oldid=prev"/>
				<updated>2008-11-22T10:09:34Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 10:09, 22 November 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Improving the &lt;/del&gt;performance &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of your &lt;/del&gt;code &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;will necessarily involve refactoring it&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Whilst &lt;/del&gt;we &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;may know how &lt;/del&gt;to &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;avoid the messy parts our own &lt;/del&gt;code&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, the same will not be true for others or for times when we must tune code written by others. In those cases&lt;/del&gt;, every overly complex or highly coupled &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;chunk of code &lt;/del&gt;is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;road &lt;/del&gt;is smooth it&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;'s &lt;/del&gt;easy to predict when you'll &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;reach your destination&lt;/del&gt;. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Lining the road &lt;/del&gt;with dirty code makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;More often than not, &lt;/ins&gt;performance &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;tuning a system requires you to alter &lt;/ins&gt;code. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;When &lt;/ins&gt;we &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;need &lt;/ins&gt;to &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;alter &lt;/ins&gt;code, every &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;chunk that is &lt;/ins&gt;overly complex or highly coupled is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;way forward &lt;/ins&gt;is smooth it &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;will be &lt;/ins&gt;easy to predict when you'll &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;finish&lt;/ins&gt;. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Unexpected encounters &lt;/ins&gt;with dirty code &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;will &lt;/ins&gt;makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric for example&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. Fan &lt;/del&gt;out &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is defined as &lt;/del&gt;the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;number of classes that are dependent upon a &lt;/del&gt;class of interest. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;One way to &lt;/del&gt;think of &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;it is &lt;/del&gt;a count of all the classes that must be compiled in &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;order to compile the &lt;/del&gt;class &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of interest&lt;/del&gt;. If for every class in an application &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;this count is &lt;/del&gt;small, you can safely conclude that couplings are shallow and, therefore, &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that the couplings &lt;/del&gt;pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;which create &lt;/ins&gt;efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan-out metric for example &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;where couplings &amp;quot;fan &lt;/ins&gt;out&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;quot; from &lt;/ins&gt;the class of interest. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;You can &lt;/ins&gt;think of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;this as &lt;/ins&gt;a count of all the classes that must be compiled &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;before your class can be compiled. Dependencies all &amp;quot;fan &lt;/ins&gt;in&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;quot; from classes that reference your &lt;/ins&gt;class. If for every class in an application &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;these counts are &lt;/ins&gt;small, you can safely conclude that couplings are shallow and, therefore, pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics can be a powerful tool in our fight for clean code. They can help us to identify and eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21661&amp;oldid=prev</id>
		<title>Kevlin at 09:08, 22 November 2008</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=21661&amp;oldid=prev"/>
				<updated>2008-11-22T09:08:07Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 09:08, 22 November 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Further more, the farther away the dependency is from the origin, the less likely you are to recognize it as such and account for it in your estimate. All of a sudden your 3-4 hour estimate can easily balloon to 3-4 weeks. Often this unexpected inflation in the schedule happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team will range from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out, efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan out metric for example. Fan out is defined as the number of classes that are dependent upon a class of interest. One way to think of it is a count of all the classes that must be compiled in order to compile the class of interest. If for every class in an application this count is small, you can safely conclude that couplings are shallow&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. Conclusion: &lt;/del&gt;couplings pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out, efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts do correlate with code quality. Consider the fan&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;-&lt;/ins&gt;out metric for example. Fan out is defined as the number of classes that are dependent upon a class of interest. One way to think of it is a count of all the classes that must be compiled in order to compile the class of interest. If for every class in an application this count is small, you can safely conclude that couplings are shallow &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;and, therefore, that the &lt;/ins&gt;couplings pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is &lt;/del&gt;a powerful tool in our fight for clean code &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;that &lt;/del&gt;can help us eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;can be &lt;/ins&gt;a powerful tool in our fight for clean code&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. They &lt;/ins&gt;can help us &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;to identify and &lt;/ins&gt;eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key wikicontent:diff:version:1.11a:oldid:12898:newid:21661 --&gt;
&lt;/table&gt;</summary>
		<author><name>Kevlin</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=12898&amp;oldid=prev</id>
		<title>Kcpeppe at 18:55, 1 November 2008</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=12898&amp;oldid=prev"/>
				<updated>2008-11-01T18:55:01Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:55, 1 November 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Improving the performance of your code will necessarily involve refactoring it. Whilst we may know how to avoid the messy parts our own code, the same will not be true for others or for times when we must tune code written by others. In those cases, every overly complex or highly coupled chunk of code is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the road is smooth it's easy to predict when you'll reach your destination. Lining the road with dirty code makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Improving the performance of your code will necessarily involve refactoring it. Whilst we may know how to avoid the messy parts our own code, the same will not be true for others or for times when we must tune code written by others. In those cases, every overly complex or highly coupled chunk of code is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the road is smooth it's easy to predict when you'll reach your destination. Lining the road with dirty code makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Also&lt;/del&gt;, the farther away &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;from &lt;/del&gt;the dependency is from the &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;source &lt;/del&gt;the less likely you are to recognize it and account for it in your estimate&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. It is these unexpected breakages that put your schedule at risk&lt;/del&gt;. All of a sudden your 3-4 hour estimate &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;may have ballooned &lt;/del&gt;to 3-4 weeks&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, often &lt;/del&gt;this &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;expansion &lt;/del&gt;happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;has ranged &lt;/del&gt;from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Further more&lt;/ins&gt;, the farther away the dependency is from the &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;origin, &lt;/ins&gt;the less likely you are to recognize it &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;as such &lt;/ins&gt;and account for it in your estimate. All of a sudden your 3-4 hour estimate &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;can easily balloon &lt;/ins&gt;to 3-4 weeks&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;. Often &lt;/ins&gt;this &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;unexpected inflation in the schedule &lt;/ins&gt;happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;will range &lt;/ins&gt;from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out, efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are correlated &lt;/del&gt;with code quality. Consider fan out&lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;for example. Fan out is defined as the number of classes that are dependent upon a class of interest. &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Think &lt;/del&gt;of it &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;as the number &lt;/del&gt;of classes that must be compiled in order to compile the class of interest. If for every class in an application this &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;value &lt;/del&gt;is small, you can conclude that couplings are shallow. Conclusion: couplings pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;In fact we have many ways of measuring the degree and depth of couplings and complexity of our code. Included are the Law of Demeter, Coupling between Objects (CBO), fan in, fan out, efferent and afferent couplings, McCabe's cyclometric complexity, and so on. These metrics describe features in our code that we can look for and count. Moreover, the magnitudes of these counts &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;do correlate &lt;/ins&gt;with code quality. Consider &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;the &lt;/ins&gt;fan out &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;metric &lt;/ins&gt;for example. Fan out is defined as the number of classes that are dependent upon a class of interest. &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;One way to think &lt;/ins&gt;of it &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is a count &lt;/ins&gt;of &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;all the &lt;/ins&gt;classes that must be compiled in order to compile the class of interest. If for every class in an application this &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;count &lt;/ins&gt;is small, you can &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;safely &lt;/ins&gt;conclude that couplings are shallow. Conclusion: couplings pose a minimal risk to refactoring.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;will &lt;/del&gt;produce can be intimidating to the uninitiated. That said, software metrics &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;are &lt;/del&gt;a powerful tool in our fight for clean code that can help us eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A downside of software metrics is that the huge array of numbers that metrics tools produce can be intimidating to the uninitiated. That said, software metrics &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;is &lt;/ins&gt;a powerful tool in our fight for clean code that can help us eliminate dirty code bombs before they are a serious risk to a performance tuning exercise. &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	<entry>
		<id>http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=12897&amp;oldid=prev</id>
		<title>Kcpeppe at 18:45, 1 November 2008</title>
		<link rel="alternate" type="text/html" href="http://commons.oreilly.com/wiki/index.php?title=The_Road_to_Performance_Is_Littered_with_Dirty_Code_Bombs&amp;diff=12897&amp;oldid=prev"/>
				<updated>2008-11-01T18:45:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;←Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:45, 1 November 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Improving the performance of your code will necessarily involve refactoring it. Whilst we may know how to avoid the messy parts &lt;del style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;of &lt;/del&gt;code, the same will not be true for others or for times when we must tune code written by others. In those cases, every overly complex or highly coupled chunk of code is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the road is smooth it's easy to predict when you'll reach your destination. Lining the road with dirty code makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Improving the performance of your code will necessarily involve refactoring it. Whilst we may know how to avoid the messy parts &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;our own &lt;/ins&gt;code, the same will not be true for others or for times when we must tune code written by others. In those cases, every overly complex or highly coupled chunk of code is a dirty code bomb laying in wait to derail the effort. The first casualty of dirty code will be your schedule. If the road is smooth it's easy to predict when you'll reach your destination. Lining the road with dirty code makes it very difficult to make a sane prediction.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Also, the farther away from the dependency is from the source the less likely you are to recognize it and account for it in your estimate. It is these unexpected breakages that put your schedule at risk. All of a sudden your 3-4 hour estimate may have ballooned to 3-4 weeks, often this expansion happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team has ranged from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Consider the case where you find an execution hot spot. The normal course of action is to reduce the strength of the underlying algorithm. Let's say you respond to your manager's request for an estimate with an answer of 3-4 hours. As you apply the fix you quickly realize that you've broken a dependent part. Since closely related things are often necessarily coupled, this breakage is most likely expected and accounted for. But what happens if fixing that dependency results in other dependent parts breaking? Also, the farther away from the dependency is from the source the less likely you are to recognize it and account for it in your estimate. It is these unexpected breakages that put your schedule at risk. All of a sudden your 3-4 hour estimate may have ballooned to 3-4 weeks, often this expansion happens 1 or 2 days at a time. It is not uncommon to see &amp;quot;quick&amp;quot; refactorings eventually taking several months to complete. In these instances, the damage to the credibility and political capital of the responsible team has ranged from severe to terminal. If only we had a tool to help us identify and measure this risk.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kcpeppe</name></author>	</entry>

	</feed>