<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type='text/xsl' href='http://chiefskipper.spaces.live.com/mmm2008-07-24_12.50/rsspretty.aspx?rssquery=en-US;http%3a%2f%2fchiefskipper.spaces.live.com%2fcategory%2fSoftware%2bEngineering%2ffeed.rss' version='1.0'?><rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:msn="http://schemas.microsoft.com/msn/spaces/2005/rss" xmlns:live="http://schemas.microsoft.com/live/spaces/2006/rss" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:cf="http://www.microsoft.com/schemas/rss/core/2005" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Random Thoughts from a CTO: Software Engineering</title><description /><link>http://chiefskipper.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&amp;_c=BlogPart&amp;partqs=catSoftware%2bEngineering</link><language>en-US</language><pubDate>Wed, 20 Aug 2008 04:20:14 GMT</pubDate><lastBuildDate>Wed, 20 Aug 2008 04:20:14 GMT</lastBuildDate><generator>Microsoft Spaces v1.1</generator><docs>http://www.rssboard.org/rss-specification</docs><ttl>60</ttl><cf:parentRSS>http://chiefskipper.spaces.live.com/blog/feed.rss</cf:parentRSS><live:type>blogcategory</live:type><live:identity><live:id>-6512955976904595909</live:id><live:alias>chiefskipper</live:alias></live:identity><cf:listinfo><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="typelabel" label="Type" /><cf:group ns="http://schemas.microsoft.com/live/spaces/2006/rss" element="tag" label="Tag" /><cf:group element="category" label="Category" /><cf:sort element="pubDate" label="Date" data-type="date" default="true" /><cf:sort element="title" label="Title" data-type="string" /><cf:sort ns="http://purl.org/rss/1.0/modules/slash/" element="comments" label="Comments" data-type="number" /></cf:listinfo><item><title>Do you know what a CTO does?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!862.entry</link><description>&lt;div&gt;
&lt;p&gt;CTO stands for Chief Technology Officer (in some companies, also referred to as Chief Technical Officer). They are usually part of the company's top management team. They report to the CEO, President or COO. 
&lt;p&gt;Here is a rundown of my duties in this position:
&lt;p&gt;&lt;strong&gt;KEY RESPONSIBILITIES:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Define, develop and deploy an Information Technology (IT) architecture that maximizes revenue, minimizes costs, helps get and keep IT aligned with business goals and provides a firm, flexible foundation for the future.
&lt;li&gt;Ensure that all product releases are properly implemented, integrated and supported. &lt;br&gt;Become the corporate subject matter expert on all trends and developments in Software Development that are relevant to the business.
&lt;li&gt;Oversee compliance of product development resources with relevant standards and appropriate best practices.
&lt;li&gt;Keep other team members and senior managers aware of the value of the IT architecture and implications of proposed changes or additions.
&lt;li&gt;Help educate others outside of product development on the value of the IT architecture to the business and their roles within it.
&lt;li&gt;Provide the strategic technology vision of enterprise-wide technical architectures and direction for the company. Work with others in product development to implement that vision.
&lt;li&gt;Build/enhance/motivate/manage the product development department. 
&lt;li&gt;Executive management of the company's IT presence, including full responsibility and accountability which is exercised through active membership in the Executive Committee.
&lt;li&gt;Coordination of product development budgets, staff plans, or performance reviews with project managers and supervisors.
&lt;li&gt;Hardware and software forecasting, purchasing, or contracts.
&lt;li&gt;Recruitment and hiring-- either of permanent or contract staff.
&lt;li&gt;Accountability for all aspects of on-time delivery. &lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;INTEGRATION WITH ORGANIZATION:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Work with Executive Committee to create a workable game plan for company's integration (short-term and long-term) using current and future technologies.
&lt;li&gt;Manage cross-group integration projects to ensure quality execution of this game plan.
&lt;li&gt;Build knowledge sharing within the product development department and work to develop appropriate standards for architects, tools, etc.
&lt;li&gt;Seek opportunities to coordinate/share/re-use code or technologies, ensuring that we don't &amp;quot;re-invent the wheel&amp;quot; in multiple groups. &lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;SECONDARY RESPONSIBILITIES:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Evaluate the technical underpinnings of other businesses (partners, acquisitions, competitors, etc.) as requested by company's senior managers.
&lt;li&gt;Investigate new technologies and advise on their relevance to company.
&lt;li&gt;Educate company staff on technology issues.
&lt;li&gt;Build links to other outside technology groups and consultants to help build both expertise and access to external resources. &lt;/ul&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Do+you+know+what+a+CTO+does%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!862.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!862.entry</guid><pubDate>Thu, 01 Jun 2006 15:03:06 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!862/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!862.entry#comment</wfw:comment><dcterms:modified>2006-06-01T15:03:06Z</dcterms:modified></item><item><title>A difficult definition of simplicity</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!861.entry</link><description>&lt;div&gt;Brad Appleton over at his &lt;a href="http://bradapp.blogspot.com/"&gt;ACME blog&lt;/a&gt; has a great post today called &lt;a href="http://bradapp.blogspot.com/2006/05/simple-aint-easy-myths-and.html"&gt;&amp;quot;Simple ain't Easy: Myths and Misunderstandings about Simplicity&amp;quot;&lt;/a&gt;.  No matter what kind of product you are creating, the goal is always to make it simple.  But what does that mean exactly, and how to you get there?   This is what Brad was struggling with and did extensive research to get to the bottom of simplicity.   What did he discover?&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="font-family:georgia"&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;&amp;quot;After mulling-over all of those, I think it's fair to say that while &amp;quot;Simplicity&amp;quot; may be, well, &amp;quot;simple&amp;quot;, truly understanding &amp;quot;simplicity&amp;quot; is in fact quite hard! &lt;/em&gt;&lt;/font&gt;
&lt;ul&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;Simplicity involves &lt;span style="font-style:italic"&gt;being able to see the whole&lt;/span&gt; from a system's thinking perspective while at the same time being able to focus in on what is relevant and essential and how it impacts the rest of the system.&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;Sustainable simplicity &lt;span style="font-style:italic"&gt;often has to evolve or emerge&lt;/span&gt; on it's own from a set of simple guiding rules.&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;The &lt;span style="font-style:italic"&gt;opposite of simplicity is complexity&lt;/span&gt; (as opposed to &amp;quot;hard&amp;quot; or &amp;quot;difficult&amp;quot; or &amp;quot;time-consuming&amp;quot; or &amp;quot;labor-intensive&amp;quot;)&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;In mathematics, &lt;span style="font-style:italic"&gt;simplicity is often &amp;quot;elegance&amp;quot;&lt;/span&gt; and is more than just the intersection of &amp;quot;what is necessary&amp;quot; and &amp;quot;what is sufficient&amp;quot;&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;In architecture, &lt;span style="font-style:italic"&gt;&amp;quot;simplicity&amp;quot; is often synonymous with &amp;quot;beauty&amp;quot;&lt;/span&gt;&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;Hiding complexity isn't the same as &lt;span style="font-style:italic"&gt;removing complexity&lt;/span&gt;.&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;Many of the tools we use to manage complexity in system's design may in fact add more/new objects to hide complexity or separate concerns&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;span style="font-style:italic"&gt;Minimizing dependencies throughout a system&lt;/span&gt;&lt;em&gt; is more critical to simplicity than minimizing the number/types of objects&lt;/em&gt;&lt;/font&gt;
&lt;li&gt;&lt;font face="Tahoma,Helvetica,Sans-Serif"&gt;&lt;em&gt;Occam's Razor does not in fact say that the &amp;quot;simpler explanation is better&amp;quot; ... it says that the explanation that makes the fewest assumptions and poses the fewest hypotheticals (i.e., minimizes the number of &amp;quot;given&amp;quot; and &amp;quot;unproven&amp;quot; conditions) is the most preferable because it is easier to comprehensively test in order to prove/disprove.&amp;quot;&lt;/em&gt;&lt;/font&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Read more in his&lt;a href="http://bradapp.blogspot.com/2006/05/simple-aint-easy-myths-and.html"&gt; post&lt;/a&gt; with plenty of links to other resources he found in his research.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+A+difficult+definition+of+simplicity&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!861.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!861.entry</guid><pubDate>Wed, 31 May 2006 15:31:47 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!861/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!861.entry#comment</wfw:comment><dcterms:modified>2006-05-31T15:31:47Z</dcterms:modified></item><item><title>Putting the puzzle together</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!818.entry</link><description>&lt;div&gt;Over the last couple of weeks, I did something that I haven't done in a very long time.  Putting together a 2000-piece jigsaw puzzle.  It took me 2 weeks but I finally got it done.   As I was working on the puzzle, I found that my strategy on getting it done changed over time. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Usually when I work on a puzzle, I do what many do and find all of the &amp;quot;edge&amp;quot; pieces.  Why?  Well, the thought is that if you complete the &amp;quot;frame&amp;quot; of the puzzle, it becomes much easier to work on the insides of the picture.  However, I quickly found that there were too many pieces to go through to find all of the edge pieces.  So, this strategy didn't work for this situation.  Next, I tried to separate pieces into colors.  This strategy was a little bit more effective since my puzzle had a lot of red pieces (it was a Coca-cola themed puzzle), so I was able to find many of these pretty quickly.  Still too many pieces at the beginning to go through, so this strategy wasn't enough to get going on the puzzle. My next strategy is to find recognizable pieces, whether it be lettering or something that is recognizable and put those pieces together to form sections of the puzzle.  I found this strategy to work very well for this particular puzzle as there were plenty of words (&amp;quot;Coke&amp;quot; or &amp;quot;Coca-Cola&amp;quot;), and art (faces of people) to find.  I start getting part of the puzzle together. However, at a particular point I found that this strategy wouldn't work on its own since the pieces weren't as distinguishable after a while.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;So, how did I get the puzzle done?  It took a combination of these strategies to achieve my goals.  Not one particular one would get me there.  So, I would take a section of the puzzle, find colors, edges, or recognizable pieces and work on a particular &amp;quot;theme&amp;quot;.  Once I got stuck on that one or got the theme to an acceptable amount of completion, I would take another part of the puzzle and go through that section.  I continued down the path until I had most major sections completed and could go back and &amp;quot;fill in the blanks&amp;quot;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;This is why Agile development can be so effective.   Just like I was overwhelmed at first with the number of pieces, project teams can quickly get overwhelmed on a project that can take several months or years.  There is just too much to think about and you don't know where to start.  You can then try to define the high-level specifications or architecture, similiar to finding the &amp;quot;edge&amp;quot; pieces but sometimes those are hard to find overall for a large project and become overwhelming.  This is where traditional software development falls apart, in a project where the scope is large and roughly unknown.  You know the goal but you can't figure out how to get there while making progress along the way that is noticable.  For the first few days, it didn't look like I was getting anywhere on my puzzle until I thought about doing things in chunks or themes. By doing the work in themes, I was able to take certain strategies (requirements, design, implementation and testing) that do work for any kind of project and make them more effective my focusing on a piece of the work.  When I had the majority of the theme completed (at my acceptance level), I moved on to the next theme.  At the end of the project, I can complete the project by doing those tasks to &amp;quot;fill in the blanks&amp;quot;.  By doing work using Agile, teams can show more progress on the big picture by demonstrated working  areas of the project over time.  &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Would it still have taken me two week to complete the puzzle?  It's hard to say, but chances are that I might have given up on the puzzle if I didn't feel that things were progressing well enough.  Same goes with projects.  If you can't show progress, project stakeholders may give up on your project and cancel it causing a lot of wasted time, effort and money.  However, if you are able to show promise and be able to see pieces coming together, you not only encourage your stakeholders but the project team gains momentum and motivation in getting it done.  I found my pace accelerating as I was getting through the puzzle eager to see the puzzle in its completion.  Agile teams would call this &amp;quot;velocity&amp;quot;, and studies have shown that doing work in smaller iterations that teams actually get more work done consistently through the project because they are motivated by their own progress.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Am I saying that software development or agile projects are similiar to putting together jigsaw puzzles?  Only in the areas I mentioned above.  Where they differ a lot is in their level of predictability.   With a jigsaw puzzle, there is a definiite goal that is predictable.  I know the number of pieces and they won't change.  The picture will be the same no matter how many times I put together the puzzle.  With software, things are very unpredictable.  Even with the best planning, I have yet to see a project that delivered EXACTLY what it promised or planned to deliver.  Customers change their minds, their needs change, technology is changing, there are a lot of moving parts.  By doing things in small iterations, you can focus on what is of value now (or at least in the next several weeks).  Beyond that, anything is up for grabs.  Each iteration you look at things from a new perspective - &amp;quot;what is needed next from either a customer's value perspective or technical perspective and do that next&amp;quot;.  Agile handles change much easier.  Why?  Well, in traditional software development the scope is always looked to be &amp;quot;fixed&amp;quot;, while in agile it is the cost and schedule that are fixed but the scope that can be altered.   Cost and schedule can be very predictable (you have this many hours available with these resources), whereas scope is very unpredictable.   The team will be much more successful if they can implement pieces that are predictable while researching the unpredictable pieces as they are needed (also called &amp;quot;spikes&amp;quot;).&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Can't wait to work on that next project...um, I mean puzzle!  &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Putting+the+puzzle+together&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!818.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!818.entry</guid><pubDate>Mon, 27 Mar 2006 18:31:24 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!818/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!818.entry#comment</wfw:comment><dcterms:modified>2006-03-27T18:31:24Z</dcterms:modified></item><item><title>Business Driven Development</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!664.entry</link><description>&lt;div&gt;&lt;a href="http://www-306.ibm.com/software/rational/"&gt;IBM Rational&lt;/a&gt; has come out with &lt;a href="http://www-128.ibm.com/developerworks/rational/library/oct05/kroll/index.html"&gt;six key priniciples&lt;/a&gt; based around what they call &amp;quot;Business-driven development&amp;quot;.  Many of these principles seem to be born out of agile or iterative development best practices, but I really like how they have bundled these together.  Also, for each they provide values, patterns (repeatable processes), and anti-patterns (processes to avoid).  Here is a summary of each, &lt;a href="http://www-128.ibm.com/developerworks/rational/library/oct05/kroll/index.html"&gt;read more in the article&lt;/a&gt;:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Principle #1: Adapt the Process&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Lifecycle efficiency, open/honest communication of risks
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Precision and formality evolve from light to heavy over the project lifecycle as uncertainties are resolved. Adapt the process to the size and distribution of the project team, to the complexity of the application, and to the need for compliance. Continuously improve your process.
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Precise plans/estimates, track against static plan management style. More process is better. Always use the same degree of process throughout the lifecycle.&lt;/ul&gt;
&lt;div&gt;&lt;strong&gt;Principle #2: Balance competing stakeholder priorities  &lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Align applications with business and user needs, reduce custom development, and optimize business value
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Define and understand business processes and user needs; prioritize projects and requirements and couple needs with software capabilities; understand what assets you can leverage; and balance user needs and reuse of assets.
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Achieve precise and thorough requirements before any project work begins. Requirements focus the drive toward a custom solution. &lt;/ul&gt;
&lt;div&gt;&lt;strong&gt;Principle #3: Collaborate across teams  &lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Team productivity, better coupling between business needs, and the development and operations of software systems.
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Motivate people to perform at their best. Collaborate cross-functionally across analysts, developers, and testers. Manage evolving artifacts and tasks to enhance collaboration and progress/quality insight with integrated environments. Ensure that business, development, and operations teams work effectively as an integrated whole.
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Nurture heroic individuals and arm them with power tools.&lt;/ul&gt;
&lt;p&gt;
&lt;div&gt;&lt;strong&gt;Principle #4: Demonstrate value iteratively  &lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Early risk reduction, higher predictability, trust among stakeholders
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Adaptive management using an iterative process. Attack major technical, business, and programmatic risks first. Enable feedback by delivering incremental user value in each iteration.
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Plan the whole lifecycle in detail, track variances against plan. Detailed plans are better plans. Assess status by reviewing specifications.&lt;/ul&gt;
&lt;p&gt;
&lt;div&gt;&lt;strong&gt;Principle #5: Elevate the level of abstraction  &lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Productivity, reduced complexity
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Reuse existing assets, reduce the amount of human-generated stuff through higher-level tools and languages, and architect for resilience, quality, understandability, and complexity control.
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Go directly from vague high-level requirements to custom-crafted code.&lt;/ul&gt;
&lt;p&gt;
&lt;div&gt;&lt;strong&gt;Principle #6: Focus continuously on quality&lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Benefits&lt;/b&gt;: Higher quality and earlier progress/quality insight
&lt;li&gt;&lt;b&gt;Patterns&lt;/b&gt;: Team responsibility for end product. Testing becomes a high priority given continuous integration of demonstrable capabilities. Incrementally build test automation. 
&lt;li&gt;&lt;b&gt;Anti-patterns&lt;/b&gt;: Postpone integration testing until all code has been completed and unit-tested. Peer-review all artifacts, rather than also driving partial implementation and testing, to discover issues.&lt;/ul&gt;
&lt;div&gt; - via &lt;a href="http://bizzbangbuzz.blogspot.com/"&gt;BizzBangBizz&lt;/a&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Business+Driven+Development&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!664.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!664.entry</guid><pubDate>Mon, 24 Oct 2005 19:16:40 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!664/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!664.entry#comment</wfw:comment><dcterms:modified>2005-10-24T19:16:40Z</dcterms:modified></item><item><title>It can't be done...or can it?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!662.entry</link><description>&lt;div&gt;Pretend you are taking a week long trip with a friend.   You start packing and end up with a couple of large suitcases.  Your friend arrives with one medium suitcase.  You start thinking, &amp;quot;What are they thinking?  They don't have enough clothes to last the week.&amp;quot;   You arrive to your destination.  When you start unpacking, your friend's clothes are all nicely folded and no wrinkles.  Your clothes look like a mess and will need to be ironed.   Your friend is able to put things into drawers quickly as well as the bathroom items.  You have to go through your bag and it takes you longer to find things and put them in their place.  However, your friend has less clothes than you.  As the week progresses, you begin to see that your friend has found ways to reuse what they wear - different shirts with the same pants - yet still appear like they aren't worn.   You on the other hand, find that at the end of the trip you had clothes that you didn't wear, but had to carry around.  Now you start thinking, &amp;quot;My friend has a better way.  I've got to learn from them for the next trip!&amp;quot;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Was the friend always this organized?  Probably not, they probably learned by somebody else.   Experienced travelers have tricks on how to properly fold clothes and how to maximize every spaces in a suitcase.  They have also learned what's &amp;quot;good enough&amp;quot; and not to take more than they need.  Even if they end up needing fresh clothes, they will end up using a local cleaners or wash their own clothes instead of taking too much.  They have learned how to best put clothes and other accessories together to maximize their use.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;As my development staff is asked to reduce cycle times through iterative development using Agile best practices, their initial reaction is &amp;quot;That sounds all good, but we have found things to take weeks or months and that won't work with this approach.&amp;quot;  They are correct, it won't.   But, just because you have done things a certain way doesn't mean that it is the ONLY way to do things.   We have learned how to do things as individuals.  We will now need to do those things together as a team.  We have learned that each person plays a particular role and has their own specialization.  We will now need to remove those specializations and have people wear multiple hats.  We have learned to think about everything up front is much detail.  We will now need to learn to do just enough for now and think about details when it is appropriate later.  We have learned to break the work and requirements down just enough to make sense for a 6-8 month project, we will now need to refine that work to make sense for 2-4 week iterations.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;What's great about agile is that it isn't just &amp;quot;theory&amp;quot; anymore, people have found it to work and improve the flexibility and responsiveness of the team to provide working solutions to customers.  We can tap into these &amp;quot;experienced travelers&amp;quot; and figure out how they have done it a different and better way.  It just seems strange to us because we have learned how to do things differently, not necessarily better. &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+It+can't+be+done...or+can+it%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!662.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!662.entry</guid><pubDate>Thu, 20 Oct 2005 15:28:54 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!662/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!662.entry#comment</wfw:comment><dcterms:modified>2005-10-20T15:28:54Z</dcterms:modified></item><item><title>A Lean Paradigm Shift</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!608.entry</link><description>&lt;div&gt;Lean can mean different things to different people.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;For some, lean can refer to how you maintain your physical shape through dieting and exercise.  For those that have been successful in staying lean, they will say that it takes a paradigm shift of how you take care of your body through what you eat and how you exercise.   When you start the process of becoming lean, you begin to cut out those things that are unhealthy and make you fat.   You begin to eat better.  You begin to feel better.  You start seeing results in the mirror.  You also are constantly monitoring your weight, heartbeat, blood pressure, caolries, etc through the process.  For some of us, myself included, we get lazy once we reach this point and start falling back to bad habits -- at first, a mistake here and there on what we eat, or missing a workout or two.  Then, you stop getting on the scale and recording your results.   Then, before you know it you are not lean again!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;For others, lean can refer to how you maintain your financial status through budgeting and tracking your expenses.  For those that have been successful in saving money and making more through investings, they will say that it takes a paradigm shift of what you do with your money and where it goes.  When you start the process of saving money, you begin to determine where your expenses are going and which of those expenses you can eliminate that takes you from your goals.  You also look at ways to increase your income with those savings through investments.   You also look to remove your debt. You begin to save money.  You begin to feel better.  You start seeing results in your portfolio.  You also are constantly monitoring your income flow, expenses and net worth through the process.  For some of us, in this case myself not included, we get lazy once we reach this point and start falling back to bad habits of spending excess money, getting into debt, and eventually not saving money.  Then, before you know it you are not financially set again!&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;In the software engineering industry, lean is now referring to your cycle time - how quickly you get to a working solution for the end customer without losing quality.  For those that have been successful with this approach, they will say that it takes a paradigm shift of how you development and manage your software solutions.  When you start the process of reducing cycle times, you begin to determine where communication and collaboration need to happen, what activities or processes take away from reducing cycle times, how we do our jobs and the way we interact with other areas.  You will begin to see results.  You wil see the customer is more satisfied. You will find better ways to get your work done. You also are constantly monitoring your estimates, work completed, costs, quality much better. For some of us, myself a little bit, it is very easy to fall back into old habits of traditional and formal processes because you are so familiar with them and may get discouraged early on in not seeing immediate results you are hoping.  You then begin to see things slip, take longer and less of a feeling of accomplishment either by the team or the end customer.  Then, before you know it you are feeling that things aren't getting done as they should! &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;There are many other scenarios that this lean approach can take - time management, stress management, strategy, project management, the list goes on and on.   What is getting in the way of your goals?   How do you improve on those goals?  What do you do to maintain those goals?   How do you measure the process of those goals?  Once you figure those things out, you need to continue the discipline to maintain them.  Focus on the goals and don't get lazy! &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+A+Lean+Paradigm+Shift&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!608.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!608.entry</guid><pubDate>Fri, 07 Oct 2005 20:34:02 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!608/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!608.entry#comment</wfw:comment><dcterms:modified>2005-10-07T20:34:02Z</dcterms:modified></item><item><title>Agile Manifesto Explored</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!592.entry</link><description>&lt;div&gt;The &lt;a href="http://agilemanifesto.org/"&gt;Agile Manifesto&lt;/a&gt; is a document that was produced by members of the &lt;a href="http://agilealliance.org"&gt;Agile Alliance&lt;/a&gt; as a common mission statement for people that are doing agile software development.  Here is what the manifesto says:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align=center&gt;&lt;em&gt;We are uncovering better ways of developing&lt;br&gt;software by doing it and helping others do it.&lt;br&gt;Through this work we have come to value:&lt;/em&gt;&lt;/div&gt;
&lt;div align=center&gt;&lt;strong&gt;&lt;em&gt;Individuals and interactions over processes and tools&lt;br&gt;Working software over comprehensive documentation&lt;br&gt;Customer collaboration over contract negotiation&lt;br&gt;Responding to change over following a plan&lt;/em&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div align=center&gt;&lt;em&gt;That is, while there is value in the items on&lt;br&gt;the right, we value the items on the left more.&lt;/em&gt;&lt;/div&gt;
&lt;div align=center&gt; &lt;/div&gt;
&lt;div align=left&gt;Let's discuss each part of the manifesto in more detail:&lt;/div&gt;
&lt;p align=left&gt; 
&lt;p align=left&gt;&lt;strong&gt;Individuals and interactions over processes and tools&lt;/strong&gt; - Processes and tools should serve only one purpose: to help the individuals involved be able to do their jobs better.  If the processes and tools become too complex, people start having to manage the process instead of their work.  They also start to use processes and tools instead of talking to each others (for example, email or a corporate intranet).   You begin to lose the context of the message.  You also lose the opportunity to dialog with others that will not only streamline the decisions but probably make better decisions than on your own.  Processes and tools are necessary but not at the expense of the value of individuals and interactions.
&lt;p align=left&gt;&lt;strong&gt;Working software over comprehensive documentation - &lt;/strong&gt;Too much emphasis in the past has been made regarding using formal documentation to replace communication as a way to hand off between members of a project team.   In my past, I have seen consultants come into an organization with their sole responsibility to produce volumes of documentation and then leave.   Months of effort went into this effort, along with lots of money spent.  I was part of the team assigned to do the implementation.  Not only did the documentation become outdated as we went through the implementation and needed to change some of the requirements, but they were very difficult to figure out.  With the people gone that did the work, we ended up discarding the documentation.  Isn't the purpose to get to working software and not to make sure that your documentation is meeting standards?   Determine the minimal level of documentation is needed to ensure that the details of conversations are captured, but don't provide documentation to REPLACE those conversations!  Documentation is important but not at the expense of getting to software that works.
&lt;div align=center&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;div align=left&gt;&lt;strong&gt;Customer collaboration over contract negotiation - &lt;/strong&gt;I have been in meetings with project stakeholders that have feel like you are going through some kind of labor union negotiations.  The tone of the meeting is &amp;quot;us vs. them&amp;quot;.   They (the customer) are going to want us (the team) to do things that we don't think is right or technically feasible.  While, the customer is thinking -- &amp;quot;If we (the customer) don't get everything we want now, they (the team) will punish us in the end for missing requirements&amp;quot;.    Also, those customers were never seen again until the end of the project, at which time we went through further negotiations.  Wouldn't it be much better to have a customer available (either directly or through a customer proxy) any time that you needed and to come to decisions on requirements throughout the project?&lt;strong&gt;  &lt;/strong&gt;There will always been some negotiation with customers but this should happen thorugh frequent collaboration instead of a few &amp;quot;negotiation&amp;quot; meetings.&lt;strong&gt; &lt;/strong&gt;&lt;/div&gt;
&lt;div align=left&gt;&lt;strong&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;div align=left&gt;&lt;strong&gt;Responding to change over following a plan - &lt;/strong&gt;As a formal project manager, I can remember the motto - &amp;quot;Must keep this project on time and on budget&amp;quot;.  I also remember the evil words &amp;quot;Scope Creep&amp;quot; that indicated a project that &amp;quot;deviated&amp;quot; by introducing more scope in the middle of the project.   People that introduced scope creep were considered evil (ok, not evil, but VERY bad) and were shunned for their actions.   However, how important is following a plan if you aren't going to allow the customer to change their mind and provide feedback along the way.   Part of &amp;quot;working software&amp;quot; is making sure the software is meeting the customer's needs.  If the project isn't going to do that, it is really worth keeping it on time and on budget and avoiding scope changes at every turn?  It is important to have some kind of plan as long as keeping to the plan doesn't forget to consider whether the customer's goals of the project are being met.&lt;/div&gt;
&lt;div align=left&gt; &lt;/div&gt;
&lt;div align=left&gt;In a later post, I'll explore the principles that the &lt;a href="http://agilealliance.org"&gt;Agile Alliance&lt;/a&gt; came up with that are the ideals behind agile development.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Agile+Manifesto+Explored&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!592.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!592.entry</guid><pubDate>Thu, 06 Oct 2005 19:31:48 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!592/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!592.entry#comment</wfw:comment><dcterms:modified>2005-10-06T19:31:48Z</dcterms:modified></item><item><title>What kind of software would you like developed?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!581.entry</link><description>&lt;div&gt;I'm curious and what to know. Say you have access to a software
development shop and that told you that they could build any software
product that you wanted.  However, there are some options for
you to consider.  After reviewing your basic specifications, they
sit down with you and come up with these alternatives:&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Option 1:&lt;/strong&gt; Build a product in 12 months that is
simple and easy to use but only meets basic requirements.  
Upon completiion, this company will only fix bugs and provide minimal
updates every six months; training through FAQs and some simple
documentation; and support through basic email, forums, but no phone
contact.  The cost to you to pay for the development and
ongoing support of this product is low.
&lt;p&gt;&lt;strong&gt;Option 2:&lt;/strong&gt; Build a product in 24 months that meets
all the requirements including features that you might want to use in
the future but is complex to configure and use.  Upon completion,
this company will fix bugs and provide enhancements or new
functionality through a elaborate support agreement that includes
frequent updates every three months; extensive training through onsite,
manual and online and support through 24/7 phone,email and
web.  However, the cost to you to pay for the development and
ongoing support of this product is high.
&lt;p&gt;&lt;strong&gt;Option 3:&lt;/strong&gt; Build a product in 18 months that is
simple, basic and easy but an open architecture is developed
that will allow others such as end users or other developers to
make it as complex as they would like it through the development
of addons and extensions.  Upon completion, this company will fix
bugs or enhance existing functionality only and provide moderate
updates, training and support through a combination on in-house
and community resources.  The cost to you to pay for the
development and ongoing support of this product is a little more
expensive than Option 1.  In addition, you will be on your
own regarding support and future development of any additional
functionality that is provided by third parties.
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;As an end user, which product would you pick and why?  If you
worked in this software organization, which product would you want to
build and support and why?&lt;/div&gt;
&lt;div&gt;&lt;br&gt;
UPDATE:&lt;br&gt;
&lt;br&gt;
Here are my responses to each scenario, your answers may be different:&lt;br&gt;
&lt;br&gt;
Scenario 1: Best for organization because it is easiest to staff and
manage.  Worst for end customers because as their needs change the
software will become outdated.&lt;br&gt;
&lt;br&gt;
Scenario 2:  I believe that most development shops are set up this
way currently.  Best for end customers because all of their needs
are met.  Difficult to manage and staff for the long term given
the amount of &amp;quot;product&amp;quot; to keep track of.&lt;br&gt;
&lt;br&gt;
Scenario 3: I believe that most development shops will go to this model
in the future.  This is different than current open source in that
there may be core product that is still managed by the organization but
the hooks to the architecture to allow people to develop addons and
extensions are made available open source.  Best of both worlds
for end users, development organization and those in the community
interested in expanding the &amp;quot;core&amp;quot; product.&lt;br&gt;
&lt;br&gt;
See Wayne's comment and trackback to his blog.  He is an example
of how other people in IT as seeing the value of moving in this
direction.  Take a look at such products as Google Maps, Mozilla
Firefox, and Winamp have seen success with this approach.&lt;br&gt;
&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+What+kind+of+software+would+you+like+developed%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!581.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!581.entry</guid><pubDate>Tue, 04 Oct 2005 22:28:33 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!581/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!581.entry#comment</wfw:comment><dcterms:modified>2005-10-05T21:37:51Z</dcterms:modified></item><item><title>Intro to Agile</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!538.entry</link><description>&lt;div&gt;Agile Software Development.  If you work within the software industry, you are probably familiar with it and many of you may be developing this way.  If you aren't, you may see this as a lean approach that could be translated into other industries. Before I get into what this type of software development looks like, let's discuss what has been traditionally been the way to develop software - waterfall.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Waterfall software development was named as such because work is performed in phases, with each phase needing to be completed before the next phase started.   People will call these phases different things, but essentially they are the following:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align=center&gt;Research -&amp;gt; Plan -&amp;gt; Design -&amp;gt; Implement -&amp;gt; Test -&amp;gt; Release -&amp;gt; Review&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Each of these phases would concentrate on the entire scope of the project, and people could not move to the next phase until the previous phase was completed.   Because of this, an emphasis on formal documentation was needed due to the amount of scope going through each phase and the fact that team members may not have participated in the previous phase and need information to start their part. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;End users and other primary stakeholder are usually involved in the first couple of phases, then would not see the end result until it was ready for release.  The review is usually some kind of project post-mortem with lessons learned.   Depending on the overall timeframe of the project, people that participate in this review may have been on the project months ago, and many people cannot remember what the start of the project was like.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Several years ago, people started to get together and determined that there must be a better way.  They also started their own &amp;quot;lightweight&amp;quot; or &amp;quot;agile&amp;quot; process that suited their environment.  One of the better known methodologies out there is XP or Extreme Programming.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;When I started seriously thinking about a different way for my organization to develop, my research quickly sent me to the &lt;a href="http://agilealliance.org/"&gt;Agile Alliance&lt;/a&gt;.   What is the Agile Alliance?   Here is what the site says: &lt;/div&gt;
&lt;div&gt;
&lt;blockquote dir=ltr style=""&gt;
&lt;div&gt;
&lt;p&gt;&lt;em&gt;In the late 1990's several methodologies began to get increasing public attention. Each had a different combination of old ideas, new ideas, and transmuted old ideas. But they all emphasized close collaboration between the programmer team and business experts; face-to-face communication (as more efficient than written documentation); frequent delivery of new deployable business value; tight, self-organizing teams; and ways to craft the code and the team such that the inevitable requirements churn was not a crisis. &lt;/em&gt;
&lt;p&gt;&lt;em&gt;Early 2001 saw a workshop in Snowbird, Utah, USA, where various originators and practitioners of these methodologies met to figure out just what it was they had in common. They picked the word &amp;quot;agile&amp;quot; for an umbrella term and crafted the Manifesto for Agile Software Development, whose most important part was a statement of shared development values. &lt;/em&gt;
&lt;p&gt;&lt;em&gt;The Manifesto struck a chord, and it led to many new Agile projects being started. As with any human endeavor, some succeeded and some failed. But what was striking about the successes was how much both the business people and the technical people loved their project. This was the way they wanted software development done. Successful projects spawned enthusiasts.&lt;/em&gt;
&lt;p&gt;&lt;em&gt;The Agile Alliance exists to help more Agile projects succeed and to help the enthusiasts start more Agile projects. This particular page is to help people learn more about Agile software development. In keeping with the Agile emphasis on face-to-face communication, we urge you to visit a users group and talk to your peers about their experience. &lt;/em&gt;&lt;/div&gt;&lt;/blockquote&gt; Next week, I'll talk more about the Manifesto that was created by this group and priniciples around it and how they differ from traditional waterfall.  Take a look around the &lt;a href="http://agilealliance.org/"&gt;site&lt;/a&gt; as you will find plenty of articles and links to various websites.&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Intro+to+Agile&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!538.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!538.entry</guid><pubDate>Fri, 30 Sep 2005 16:55:01 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!538/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!538.entry#comment</wfw:comment><dcterms:modified>2005-09-30T16:55:01Z</dcterms:modified></item><item><title>My Programmers Are ... WHAT?!?!</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!482.entry</link><description>&lt;div&gt;
&lt;div&gt;The post title from the &lt;a href="http://blog.outer-court.com/"&gt;Google Blogoscoped&lt;/a&gt; site sort of caught my attention -- &lt;a href="http://blog.outer-court.com/archive/2005-08-24-n14.html"&gt;&amp;quot;Why Good Programmers are Lazy and Dumb?&amp;quot;&lt;/a&gt;   &lt;strong&gt;Lazy and Dumb??&lt;/strong&gt;   Did I read that right?   I knew I had to read more of this!   Here are some exerpts:&lt;/div&gt;
&lt;blockquote dir=ltr&gt;
&lt;div&gt;&lt;em&gt;&amp;quot;I realized that, paradoxically enough, good programmers need to be both lazy and dumb.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt; &lt;/div&gt;
&lt;div&gt;&lt;em&gt;Lazy, because only lazy programmers will want to write the kind of tools that might replace them in the end. Lazy, because only a lazy programmer will avoid writing monotonous, repetitive code – thus avoiding redundancy, the enemy of software maintenance and flexible refactoring. Mostly, the tools and processes that come out of this endeavor fired by laziness will speed up the production.&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;&lt;/em&gt; &lt;/div&gt;
&lt;div&gt;&lt;em&gt;Second (and I will elaborate a bit more on this because I find the concept to be less known than the first) a good programmer must be dumb. Why? Because if he’s smart, and he knows he is smart, he will:&lt;/em&gt;&lt;/div&gt;
&lt;div&gt;&lt;em&gt;a) stop learning&lt;br&gt;b) stop being critical towards his own work&amp;quot;&lt;/em&gt;&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;Please read more of the &lt;a href="http://blog.outer-court.com/archive/2005-08-24-n14.html"&gt;post&lt;/a&gt; as they give some examples of both.   I guess I understand where they are coming from.  I agree that programmers need to question everything and do the simpliest thing that can accomplish their goals.   By doing that, you will know what is important, take complexity out of the equation...thus having a better product that is more maintainable while getting quicker results.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;But, just you try calling your programmers lazy and dumb!   Perhaps there is a better analogy to use here.  Though, I have to admit that Google seems to get it done with their products! &lt;/div&gt;&lt;/div&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+My+Programmers+Are+...+WHAT%3f!%3f!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!482.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!482.entry</guid><pubDate>Wed, 24 Aug 2005 22:49:52 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!482/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!482.entry#comment</wfw:comment><dcterms:modified>2005-08-24T22:50:27Z</dcterms:modified></item><item><title>Technology Never Sleeps</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!373.entry</link><description>&lt;div&gt;For those that don't understand technology and software engineering, there is an expectation that once a project has been completed that it is truly done.  They also expect that there is a quick transition from development into production and are ready to move on to the next big thing.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;For those that do understand, they realize that things are just beginning especially if you are introducing new technology, product or functionality that the company and customers have not used before.  Why is there such a disconnect and how do you narrow the gap to ensure that enough attention is given to ensure the long term stability of both the technology and solution?&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Here are some of the issues that are faced:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Customer changes&lt;/strong&gt; - Customers can be fickle and have the right to change their minds.  The challenge is to determine why they are changing their minds.  Did their business change?   Did we miss the mark on the functionality?  Did we resolve the true problems or just some of the symptoms?   Even with the best upfront requirements and design processes, there will still be changes in requirements as long as their are people who want to change their minds or their business.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Industry changes&lt;/strong&gt; - You need to constantly be monitoring the industries that you serve.  In this world of mergers, acquistions and consolidation, things can change quickly in an industry.   If you were serving only a segment of a market, you can see that segment disappear quickly.  Watch how you competitors are addressing the changes.  Watch how other vendors are adapting.  And make sure you are following suit.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Operational adjustments&lt;/strong&gt; - Though you try to accommodate business operations of your customers as you develop solutions, sometimes the technology itself may require some changes in how your customers run their business and train their staff.  Take, for instance, the first time that your customer might have used a mouse for a GUI application instead of just using a keyboard.  That took some adjustments in how they interacted with the system (as well as knowing how to trouble mouse operations).   These adjustments can also take place within your organization.  Your sales people need to understand these new technologies and how to sell them to customers.  Your technical support people need to understand how they work and when they can break so they can more effectively troubleshoot (and help prevent) customer problems.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Training adjustments&lt;/strong&gt; - After customers start to apply and use the new technology and solutions, you will discover that they may be using it differently than expected, or that the information that you have provided isn't detailed enough. &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Defect corrections&lt;/strong&gt; - No matter how much testing that is applied, either inhouse or in the field through beta testing, problems will be found by customers.  Hopefully, these problems are minor or cosmetic in nature, in which case you have more time to address.  Otherwise, if they are more critical, you need the time to address the fixes.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Operating System changes&lt;/strong&gt; - Unless you are using an older OS, you are well aware of how often the operating system changes - either with major new revisions or through minor fixes.  Many of these minor changes have to do with hardware changes, security patches, or product stablity -- all are usually important to fix at some point.  With major OS changes, there may be things that aren't backwards compatible, so you may have to change your products to support both new and older versions.  If the changes are significant enough, you may decide to not support older versions of the OS at some point.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Hardware changes&lt;/strong&gt; - Hardware changes at a tremendous rate, not just the main PC (server or workstation), but other peripherals - printers, pointing devices, keyboards, USB devices.  Just like operating systems, there are major changes as well as patch releases to consider.  Also, you need to consider how many kinds of printers you are going to support and &amp;quot;certify&amp;quot; through testing.   And, you may need to consider when products are no longer supported either because they are obsolete or the technology is too old to be compatible with later technology.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Software Tool  changes&lt;/strong&gt; - This is an area that gets the least amount of exposure, mainly because it is not easily seen within the product or by customers.  All of the infrastructure to build and support the product goes through changes - programming languages, development tools, database vendor like with hardware and operating systems.  As these pieces change, the same decsions need to be made as you did with hardware and operating systems including the need to move technical tools to other platforms.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;So what can you do to account for these changes in your product development?&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Add tasks in your product development projects for changes&lt;/strong&gt; - Where the changes can still apply to the general scope of those projects, you should account for changes in those projects.
&lt;li&gt;&lt;strong&gt;Create product maintenance projects&lt;/strong&gt; - Where there are a lot of smaller changes that relate to your products that can be grouped together in a project (and don't related to the scope of projects in the previous point), you should create separate maintenance projects to address the changes.
&lt;li&gt;&lt;strong&gt;Create infrastructure projects&lt;/strong&gt; - Where the changes aren't directly related to the development or maintenance of your products (such as operating system changes), you should create separate projects to address and incorporate the changes.
&lt;li&gt;&lt;strong&gt;Educate customers and other non-technical people&lt;/strong&gt; - Talk to your customers and others about the costs of incorporating new technology or solutions, both short-term (projects) as well as long-term (maintenance).  The better they understand both the value of these changes (long term stability, better security, improve ease of use, etc.) as well as the costs mentioned above, the easier it will be to support the new technology and solutions in the future.&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Technology+Never+Sleeps&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!373.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!373.entry</guid><pubDate>Mon, 18 Jul 2005 19:06:34 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!373/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!373.entry#comment</wfw:comment><dcterms:modified>2005-07-18T19:06:34Z</dcterms:modified></item><item><title>Who is our customer again?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!338.entry</link><description>&lt;div&gt;When I first started this career, I knew who my customer was.  That's because it was a department on another floor for the same company.   I knew where they were located.  I understood their business.  And, I knew where to go if I had questions.   Oh, how I miss those days.  Even if that department was a little fickle on what they wanted, I knew eventually we would get it right and be able to move on to their next request.   There was a great sense of accomplishment.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Later on, I was a consultant.   For the same reasons, it made my job much easier as a developer knowing exactly who my customer was.  If I needed to talk with them, we could call a meeting and have them sitting right across the table from us and work through issues, questions, etc.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;If you are in either of these situations, &lt;strong&gt;consider yourself fortunate&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Now, imagine that you are building a car.  One car.  Not several models.  Not several makes.  One car.&lt;/strong&gt;   You can't afford to make more than one car.  You may be able to eventually rebuild parts of the car, but otherwise you have to live with the car.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Now, imagine that you have several thousand people that you are trying to get to buy your car.  They all have different needs.&lt;/strong&gt;  They all want the car to do something a little different.  Sure, they all have the basic needs - it must have wheels, be able to move, steer and be safe but otherwise they want the car to do other things a little different.  Some want power windows, some don't.  Some want air conditioning, some prefer to roll down their windows to get fresh air.  Some focus on the quality of the radio, or the trunk space, or which side of the car has the gas tank.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;This is my world.&lt;/strong&gt;  We have a software package that meets the need of a particular industry.  This industry consist of several thousand locations that along with several other competitors serves.  Though they do have common needs about how they business is to operate and how the software package is to help them in that endeavor, they also run their business much differently in certain areas.   They do that because it gives them competitive advantages.  They do that because they may have different customers in which they serve.  They do that because they may prefer a certain way of running business that they have become accustomed to.   So I periodically have to ask....&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div align=center&gt;&lt;strong&gt;&amp;quot;Who is our customer again?&amp;quot;&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I do this because it is easy to forget about them, their needs, how they differ, how they are the same.  They aren't somebody who is on another floor, or you can sit across from them in a meeting.  There are too many of them, many that I have never met, many that I may never meet.  Yet, I need to meet their needs.  Because if I don't, there may be a chance our competitors will.  As I mentioned in my previous post, we also have to be careful that this &amp;quot;car&amp;quot;, our software package, doesn't become too complex in the process in order to reflect their needs.   &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;This requires compromise, but also requires us to understand who the consensus is with our customers and what they believe is the right solution.&lt;/strong&gt; This is easier said than done, but here are some things that we have done:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Customer segments&lt;/strong&gt; - We have created categories of our customers based on size, location, whether or not they have a single store or multiples, and what kind of services they provide in their business.  This gives us a simpler model to use.
&lt;li&gt;&lt;strong&gt;Customer roles&lt;/strong&gt; - As we look at functionality, we look at the roles that are played in a business.  Owners, managers and staff are three kinds of roles.  How are these roles different?  How are they the same?  How will each interact with our software?
&lt;li&gt;&lt;strong&gt;Customer user group&lt;/strong&gt; -  As we develop a particular functionality, we try to determine a certain number of customers who we want to access before the software goes to everyone.  We may use these customers in interviews early in the development process to gather requirements.  We will ultimate use these customers as part of a &amp;quot;beta&amp;quot; to test and approve changes to our software before the rest get it.
&lt;li&gt;&lt;strong&gt;Customer representatives&lt;/strong&gt; - Because it can be costly and take the customers away from their business, we have people within our company that represent and &amp;quot;role play&amp;quot; as the customer.  It may not be as good as having real customers, but it is better than nothing.  Plus, many of these people either had a previous life in the same business or have direct communication with our customers.&lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Who+is+our+customer+again%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!338.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!338.entry</guid><pubDate>Wed, 06 Jul 2005 17:54:24 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!338/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!338.entry#comment</wfw:comment><dcterms:modified>2005-07-06T17:54:24Z</dcterms:modified></item><item><title>The Complexity Pendulum</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!337.entry</link><description>&lt;div&gt;Can simplicity in software be achievable?  &lt;/div&gt;
&lt;div&gt;What do you have to give up in order to have that simplicity?  &lt;/div&gt;
&lt;div&gt;What are the costs of flexibility weighed against the cost of simplicity?  &lt;/div&gt;
&lt;div&gt;How does all of this relate to providing customer service to end users?  &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;I struggle with these questions on a regular basis.&lt;/strong&gt;   Our company has established itself as having a reputation for taking care of the customer at all costs.   If a customer has a unique need, we have provided an option to allow them to do it.  If they want the functionality to behave a little differently than designed, we code in a special switch that they can turn on to have the application behave as they want.   We talk in the language of switches, options, flags, etc.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Why don't we just change the functionality for all customers you might say?&lt;/strong&gt;  Good question.  We make these assumptions: &lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;That we must have provided the right solution in the first place and that this particular need is different. 
&lt;li&gt;That we cannot change this functionality because other customers will be impacted by this change. 
&lt;li&gt;That those other customers must be using and feel satisified with the existing functionality since we didn't hear from them.
&lt;li&gt;That the functionality that we initially provided shouldn't change over time.&lt;/ul&gt;
&lt;div&gt;&lt;strong&gt;Have we validated these assumptions?&lt;/strong&gt;   No, because we don't want our customers to think that we didn't get it right the first time and that we don't want to validate that we might not have figured it out right the first time.   All in the name of providing great customer service to the end users because we accommodate their needs without impacting them in any way that could be perceived as negative.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;So, what does flexibility and customer service have to do with simplicity or complexity of the solution?  &lt;strong&gt;The more straightforward you can provide a solution, with less &amp;quot;moving parts&amp;quot;, the easier it is too maintain, validate(test), document and train the end user.&lt;/strong&gt;  The long term benefits of this simplicity means less ongoing operational costs.  Less operational costs means that you can provide additional enhancements or solutions.  Additional enhancements or solutions, with the simplicity of each solution, will create RAVING FANS!! (as Tom Peters! would say) &lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;strong&gt;On the other hand, the more you do in the name of customer service to provide flexibility through options, switches, etc creates more operational costs.&lt;/strong&gt;  More operational costs means less enhancements and additional solutions.  It also means that it will make it more difficult for end users to understand how to use all of those &amp;quot;moving parts&amp;quot; sometimes even to do the more simple things in their minds.  Eventually, this will cause your end users to gain resentment for you in saying &amp;quot;What have you done for me lately?&amp;quot; and &amp;quot;Give me something that makes sense and that is usable&amp;quot;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;I am sure that our company is not only in this struggle.  &lt;strong&gt;Look at any software package and you can see that there is a very fine line between flexbility and simplicity.&lt;/strong&gt;   Some companies choose to focus entirely on simplicity, saying no often in order to focus on core functionality.  Other companies choose to design their products in a way that the end user can define how simple or complex they want it:  Look at Mozilla Firefox for instance in how they built the ability for plug-ins.   Others have allowed their solutions to get complex over time by providing a lot of configuration options.  It is the latter that I am concerned with.&lt;/div&gt;
&lt;div&gt;&lt;br&gt;What can be done?  Here are some things that I am working on in my organization:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Validate assumptions about your end users.&lt;/strong&gt;  You saw our assumptions above.  How do we know those assumptions are correct?  When did we last validate them?  Do we really understand our customers?
&lt;li&gt;&lt;strong&gt;Make honest evaluations about current functionality.&lt;/strong&gt;  Did we really get it right in the first place?  Has something changed in the marketplace or customer needs that we haven't accounted for?  Determine what is really core to your solution verses nice to have accessories.
&lt;li&gt;&lt;strong&gt;Avoid quick fixes and make time for the long haul.&lt;/strong&gt;  Put in the short term costs in order to have the long term benefits.  Don't be tempted to go for the band-aid solutions and yet still have  internal bleeding. &lt;/ul&gt;&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+The+Complexity+Pendulum&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!337.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!337.entry</guid><pubDate>Tue, 05 Jul 2005 21:36:49 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!337/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!337.entry#comment</wfw:comment><dcterms:modified>2005-07-05T21:36:49Z</dcterms:modified></item><item><title>What is your usability test?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!220.entry</link><description>&lt;p&gt;I had the opportunity to meet a few other business bloggers from the Portland Area on Friday, including a chance to meet the Buzz Bruggeman, CEO of &lt;a href="http://www.activewords.com"&gt;ActiveWords&lt;/a&gt; and hear his story about the progression of his business and product.   Bren over at &lt;a href="http://www.slackermanager.com"&gt;Slacker Manager &lt;/a&gt;has a &lt;a href="http://www.slackermanager.com/slacker_manager/2005/04/meetup_with_buz.html"&gt;picture and some more information &lt;/a&gt;on our visit. &lt;p&gt;During our discussion, Dwayne from &lt;a href="http://blog.dwayne.melancon.net/blog/"&gt;Genuine Curiousity &lt;/a&gt;said that the ActiveWords product met his &amp;quot;Sandwich Test&amp;quot;.   &amp;quot;Sandwich test, what's a sandwich test?&amp;quot;, we all replied at the same time.   Dwayne went on to say that his test for usability of a product is one that doesn't require a lot of switching back and forth between mouse and keyboard.  In other words, he should be able to eat a sandwich in one hand and get around the application in the other. &lt;p&gt;Those words stuck with me, and made me wonder what other ways people think of usability with software applications.  Number of keystrokes?  Ease of using a pointing device?  Use of wizards to educate you?  Use of colors to show different kinds of information? &lt;p&gt;So what is your usability test when looking at a new application?&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+What+is+your+usability+test%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!220.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!220.entry</guid><pubDate>Mon, 02 May 2005 16:17:06 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!220/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!220.entry#comment</wfw:comment><dcterms:modified>2005-05-02T21:31:07Z</dcterms:modified></item><item><title>It's just that simple and it just works!</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!176.entry</link><description>&lt;p&gt;The agile development community has a best practice that I really like.  It states that you should &lt;em&gt;&amp;quot;Do the simplest things that can possibly work&amp;quot;&lt;/em&gt;.   In many ways, this saying has been around some time at least in the software development circles as the KISS principle (Keep it simple stupid!) but with a particular distinction -- &lt;strong&gt;IT MUST WORK&lt;/strong&gt;! &lt;p&gt;Here's my definition of how you balance simplicity while providing a workable solution: &lt;p&gt;&lt;strong&gt;Don't sacrifice quality!&lt;/strong&gt;  Simple doesn't mean to do just things faster while skipping important quality checks along the way.   To make sure that it works, it must be free of obvious defects. &lt;p&gt;&lt;strong&gt;Don't forget design!&lt;/strong&gt;  Simple doesn't mean hacking a solution, but what is simple to the end user.  Design for simple functionality, which could require a complex implementation.  You want simple design, look at the I-Pod Shuffle as a great example of simplicity to meet simple functionality. &lt;p&gt;&lt;strong&gt;Determine the least common demoninator of your user base.&lt;/strong&gt;   Every product has its first time novice users all the way to power users.  Determine what every end user has in common and build for that.  Obviously you won't develop every bell and whistle that your power users demand, but at least you know that what you deliver them and others works! &lt;p&gt;&lt;strong&gt;Staying competitive isn't just about having something more than your competition.&lt;/strong&gt;  Instead, start with having something better than your competition.  With this simple approach, the focus must be on making sure that what you build impacts the bottom line better than your competitors - faster, more efficient, easier than other methods.  In the end, isn't that what is most important to any customer? &lt;p&gt;Though this works well with development of IT solutions, this best practice can also apply to other aspects of your work such as process improvement.   You would be amazed at how much overhead (and probably unused functionality, see &lt;a href="http://spaces.msn.com/members/chiefskipper/Blog/cns!1pcQyny3goTsBSdT3kgCqCvQ!115.entry" target="_blank"&gt;my posting on this&lt;/a&gt;) is in your products and processes.  Cut out the fat, and watch good things happen! &lt;p&gt;&lt;a href="http://technorati.com/tag/agile" rel=tag&gt;&lt;/a&gt; &lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+It's+just+that+simple+and+it+just+works!&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!176.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!176.entry</guid><pubDate>Mon, 04 Apr 2005 18:49:29 GMT</pubDate><slash:comments>0</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!176/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!176.entry#comment</wfw:comment><dcterms:modified>2005-04-07T19:33:32Z</dcterms:modified></item><item><title>Estimating Software Projects: Is it worth it?</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!147.entry</link><description>&lt;p&gt;I have been in the software engineering industry now for almost 20 years.  During that time, I have been surprised how much weight and expectation that management has on estimating projects.  Typically, estimates are usually done early in the lifecycle, in order to come up with milestone dates.    &lt;p&gt;&lt;strong&gt;What are these estimates based on?&lt;/strong&gt;   Usually, estimates are based on histrorical information - what you have done before.   But how many software projects have you been on that was even close to what you have done before.  Sure, the processes you do are probably simiilar, but the scope of those projects are always different.   This is usually because the technology or the functionality that you are providing has not been done before, at least internally. &lt;p&gt;&lt;strong&gt;What information do you have at the time the estimates are done?&lt;/strong&gt;  Studies have shown that early estimates can have a wide range of precision because there is so much to learn.  Yet, very rarely have I seen this communicated effectively with management.  Once they see a date, they don't let go of it and just expect it to be hit.  When that happens, the team is expected to hit the date at all costs even if it is unrealistic (which it usually is, especially if the technology or scope is unfamiliar to the team, or when there are many risks present).  It is important to communicate to management of how much you don't know yet and when you plan on refining the estimates once you do know. &lt;p&gt;&lt;strong&gt;Are estimates worth it? &lt;/strong&gt; Yes, as long as you understand that they are only used as a measuring stick to give an idea when the project will be completed.   To be realistic on a project, you should gather new estimates on a regular basis and adjust milestones as appropriate...always educating management on why things have changed.   This is one reason why I believe the agile movement is gaining momentum.  By doing things in small iterations...not only can you provide better estimates but you are purposely redefining the milestones as you go.  It works because it fits better the nature of software projects - that no project is the same as before unlike other industries.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Estimating+Software+Projects%3a+Is+it+worth+it%3f&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!147.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!147.entry</guid><pubDate>Mon, 14 Mar 2005 16:23:30 GMT</pubDate><slash:comments>1</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!147/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!147.entry#comment</wfw:comment><dcterms:modified>2005-03-14T16:23:30Z</dcterms:modified></item><item><title>Effectiveness of Software Features</title><link>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!115.entry</link><description>&lt;p&gt;Somebody handed these stats to me the other day that I thought were facinating. The information came from the Standish Group for XP2002. You find find a slide from the original presentation &lt;a href="http://www.poppendieck.com/pdfs/Extra Features.pdf" target="_blank"&gt;here.&lt;/a&gt;  &lt;p&gt;In a large study of projects, it was discovered that:  &lt;ul&gt; &lt;li&gt;45% of requested features were never used  &lt;li&gt;19% of requested features were rarely used  &lt;li&gt;16% of requested features were sometimes used  &lt;li&gt;13% of requested features were often used  &lt;li&gt;7% of requested features were always used &lt;/ul&gt; &lt;p&gt;Amazing! What does this tell us? We aren't connecting with the end users that will use the software either through up front requirements or educating them on the new feature of the software. Either way, it's a real waste of effort. This should be a wake up call that we need to not second guess how we think end users will use the software, but go directly to the source for answers.&lt;img src="http://c.services.spaces.live.com/CollectionWebService/c.gif?cid=-6512955976904595909&amp;page=RSS%3a+Effectiveness+of+Software+Features&amp;referrer=" width="1px" height="1px" border="0" alt=""&gt;&lt;img style="position:absolute" alt="" width="0px" height="0px" src="http://c.live.com/c.gif?NC=31263&amp;amp;NA=1149&amp;amp;PI=73329&amp;amp;RF=&amp;amp;DI=3919&amp;amp;PS=85545&amp;amp;TP=chiefskipper.spaces.live.com&amp;amp;GT1=chiefskipper"&gt;</description><comments>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!115.entry#comment</comments><guid isPermaLink="true">http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!115.entry</guid><pubDate>Wed, 02 Mar 2005 01:23:52 GMT</pubDate><slash:comments>2</slash:comments><msn:type>blogentry</msn:type><live:type>blogentry</live:type><live:typelabel>Blog entry</live:typelabel><wfw:commentRss>http://chiefskipper.spaces.live.com/blog/cns!A59D550BCED8263B!115/comments/feed.rss</wfw:commentRss><wfw:comment>http://chiefskipper.spaces.live.com/Blog/cns!A59D550BCED8263B!115.entry#comment</wfw:comment><dcterms:modified>2005-03-02T01:26:04Z</dcterms:modified></item></channel></rss>