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

<channel>
	<title>Technical Notes &#187; career</title>
	<atom:link href="http://blog.anthonychaves.net/category/career/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.anthonychaves.net</link>
	<description>Life is software and jujitsu</description>
	<lastBuildDate>Tue, 16 Feb 2010 22:15:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dummy Code (Quick&#8217;n&#039;Dirty vs. Engineered)</title>
		<link>http://blog.anthonychaves.net/2009/02/04/dummy-code-quickndirty-vs-engineered/</link>
		<comments>http://blog.anthonychaves.net/2009/02/04/dummy-code-quickndirty-vs-engineered/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 22:34:13 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/?p=125</guid>
		<description><![CDATA[When creating software, two people will never write the same implementation of a method or system of non-trivial design.  Creating software is a problem solving process and there are usually many ways to solve one problem.  The solutions may differ in elegance and efficiency while giving the same output for a given set of inputs.  [...]]]></description>
			<content:encoded><![CDATA[<p>When creating software, two people will never write the same implementation of a method or system of non-trivial design.  Creating software is a problem solving process and there are usually many ways to solve one problem.  The solutions may differ in elegance and efficiency while giving the same output for a given set of inputs.  A correct solutions is a correct solution regardless of implementation.<span id="more-125"></span></p>
<p>Building software modules within a team requires communicating, at a minimum,  method or class signatures and a general idea of the functionality.  This may include a detailed design document clearly specifying method signature and a pseudo-code implementation or method stubs and comments about what the method should do right in the source file.  One thing that should never be used for communicating a signature and functionality is dummy code.</p>
<p>Dummy code looks like real code.  It is real code but it rarely works.  Even if it compiles it doesn&#8217;t produce the correct result when run.  Nor are there any tests that prove it (in)correct.  Dummy code exists only for the sake of its author&#8217;s gratification.</p>
<p>Rather than talk about the desired functionality through some more productive means the dummy code author thinks he is helpfully providing a guesstimate of correct implementation.  What he has actually done is provide a jumbled mess of non-working code cleverly disguised as a working part of the project when he checks it in to the SCM.  The dummy code author thinks someone else will come along and provide the correct implementation &#8220;later&#8221;.</p>
<p>What he doesn&#8217;t realize is that his dummy code is almost indistinguishable from code that should be part of the project.  The next person to try to reuse this code is in for hours of WTF moments trying to figure out WTF the code is supposed to do and why it&#8217;s got code branching five levels deep.</p>
<p>At my first post-college job I had a wonderful mentor.  Thys (pronounced <em>Tays</em>, like &#8220;taste&#8221; without the second &#8216;t&#8217;) and I were talking one day when he asked me a question.  &#8220;Anthony, if you were given a task of writing software that would only be run once would you do it quick-and-dirty or with a well-measured, engineered approach?&#8221;</p>
<p>How bad could &#8220;quick-and-diry&#8221; be if the software would run only once?  I thought about it for a moment before answering.  Quick and dirty.</p>
<p>Thys said he would never write quick and dirty software.  Doing so figuratively creates a  monkey on the developerment team&#8217;s back.  The software that only needs to run once inevitably needs to run a second time and a third time and eventually run regularly.  Thys helped me realize that software evolves and escapes.  Useful software will run indefinitely.  Any time and effort saved on the initial write will be lost 10 times (I made that number up.  It is actually higher.  Any want to provide real data or examples?) over on the maintenance, bug fixes and rewrites.</p>
<p>Writing dummy code is writing software quick and dirty without any idea of the implementation details.  Bad code and bad algorithms.  The worst of both worlds.  It&#8217;s been a long time since Thys and I had that conversation but the years have proven him right again and again.  Any code worth checking in to SCM is worth writing well.  That includes unit tests.</p>
<p>Dummy code has no place in SCM.  If you&#8217;re not going to correctly implement a method you stub out then don&#8217;t provide an implementation at all.  Leave some comments around the method stub if you have to.  Open a ticket in the issue tracking system to let someone know the method needs an implementation and describe the input and output.  Let the implementer determine which algorithms and data structures to use.</p>
<p>Dummy code is a hazard to software projects.  It violates the principle of least astonishment.  Next time you think about writing some remember that the next person that uses the code will waste time figuring out why it doesn&#8217;t work as expected.</p>
<p>If you check code in to your SCM where other people can pull it, take a look at what you&#8217;re checking in.  Does it work?  Does it work well?  Are there tests that prove it?  Helping someone by coding less is sometimes the best help of all.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2009/02/04/dummy-code-quickndirty-vs-engineered/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do you ever run your code? Another case for unit testing</title>
		<link>http://blog.anthonychaves.net/2009/01/29/do-you-ever-run-your-code-another-case-for-unit-testing/</link>
		<comments>http://blog.anthonychaves.net/2009/01/29/do-you-ever-run-your-code-another-case-for-unit-testing/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 22:44:30 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[career]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/?p=121</guid>
		<description><![CDATA[A few of my most recent jobs have been with start-ups.  Working with a start-up can be stressful due to the urgency of getting to a product release.  Some of the employees of one particular start-up I worked with put in over 70 hours per week.  This wasn&#8217;t because they were under-staffed.  There were plenty [...]]]></description>
			<content:encoded><![CDATA[<p>A few of my most recent jobs have been with start-ups.  Working with a start-up can be stressful due to the urgency of getting to a product release.  Some of the employees of one particular start-up I worked with put in over 70 hours per week.  This wasn&#8217;t because they were under-staffed.  There were plenty of people to do the work but the company leadership was unable to come up with any sort of plan or priorities for the work.  What they had was people furiously working on projects that were irrelevant to the company.  Some people were working on projects that wouldn&#8217;t be needed for years, if ever.  One thing I recall about this company is that a lot of things were broken.</p>
<p><span id="more-121"></span>I took on the project of integrating the start-up application with an application made by one of their customers.  The start-up application was running an instance in production for another one of their customers.  Part of the project was defining and building a RESTful API that both my customer, the start-up, and their customer could use to communicate between applications.  The API had to include comments made to different event types.  When someone makes a comment on the start-up app it gets propagated to their customer app.  When someone makes a comment on their customer&#8217;s app it would be sent to the start-up&#8217;s app through a RESTful API call.  It would be similar to having Facebook and MySpace synchronized on your status updates.  Update your status on Facebook and MySpace reflects the change too.</p>
<p>As I built the API I found that their comment model didn&#8217;t work.  I looked back a few months in the SCM and found the methods in the model hadn&#8217;t worked in months.  Comparing that version with the previous version showed that everything except the class definition was new.  The comment model never worked.  The comment model had no unit tests to verify its functionality is correct nor did QE raise any questions or file any bugs on it.  The developer never actually ran this code.  The mistake would have been obvious if they took the time to run it.</p>
<p>Asking if anyone knew that commenting didn&#8217;t work was met with blank stares.  &#8220;No, it works.&#8221;  I asked them to demonstrate on any environment they had set up.  I hoped I was wrong and I didn&#8217;t have my environment set up right.  Leaving a comment failed every time on every environment.  I found out someone checked in a fix &#8220;last week&#8221;, but that developer never bothered to run the code either.  I don&#8217;t know how he verified his fix.  No one could leave comments anywhere, not even in production.  Yep, this code was broken for months <em>in production</em> for another customer and no one noticed.</p>
<p>I finally found out someone was &#8220;cleaning up&#8221; the comment functionality.  I asked about the precautions the developer is taking with this bug and was told something I already knew &#8211; how to &#8220;temporarily&#8221; fix it while the developer worked on the &#8220;clean up&#8221;.</p>
<p>Fixing the bug was beside the point.  This company needed to figure out a way to prioritize development.  Priorities save developers from wasting time building software that no one will use for months, years or ever.  Part of the start-up mentality is &#8220;throw stuff against the wall and see what sticks&#8221; but at the cost of basic functionality?  That&#8217;s a poor implementation and a poor business decision.</p>
<p>Getting off to the right start in a project is critically important.  Automated test frameworks are available for every major software development platform.  Not using them right at the start of a project makes it impossible for meaningful tests to be added later.  Not difficult &#8211; impossible.  We don&#8217;t use the strict  &#8220;waterfall&#8221; methodology anymore because testing after development is complete doesn&#8217;t work.  As a community we have known this for a long time.  Short, tactical releases are the way to go.  These short iterations are the perfect time to write tests with or even <em>before</em> writing the software.  Test-driven development and behavior-driven development are hot for a reason.</p>
<p>A long time ago I picked up some work for a shop that had a test-first mentality as part of the culture.  Before day one at this company they decided a test-first approach was the way to go.  Every developer was held to unit-testing their own software.  They also didn&#8217;t build any software that wasn&#8217;t needed for the current iteration.  Looking to build functionality needed &#8220;in the future&#8221;, they learned, was a waste of time.  That future never came.  Instead they used that time to test the software that <em>was</em> needed for that iteration.  They typically had well-scoped projects and were customer driven.  They had a lot of customers.  Somehow they found a way to please everyone.  Short, planned, targetted releases made those guys a lot of money and it was a pleasure to work with them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2009/01/29/do-you-ever-run-your-code-another-case-for-unit-testing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t insult employees</title>
		<link>http://blog.anthonychaves.net/2009/01/23/dont-insult-employees/</link>
		<comments>http://blog.anthonychaves.net/2009/01/23/dont-insult-employees/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 22:11:02 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/?p=112</guid>
		<description><![CDATA[Over the last few years I&#8217;ve worked with a few different styles of CEO.  Some were great.  They cared about employee morale and worked to solve problems created by problematic career middle-managers.  They inspired employees and worked to help everyone realize their contribution to the company&#8217;s success.  Other CEOs I&#8217;ve worked with didn&#8217;t have a [...]]]></description>
			<content:encoded><![CDATA[<p>Over the last few years I&#8217;ve worked with a few different styles of CEO.  Some were great.  They cared about employee morale and worked to solve problems created by problematic career middle-managers.  They inspired employees and worked to help everyone realize their contribution to the company&#8217;s success.  Other CEOs I&#8217;ve worked with didn&#8217;t have a handle on issues in the company.  They almost gleefully stifled creativity and smothered morale.  I&#8217;d like to share a tragic story about one of these CEOs.</p>
<p><span id="more-112"></span>I was doing some work for a startup where I got to see the CEO warm up for his series B funding pitch.  He wanted to do the actual presentation he would give investors with an audience.  He invited me, the developers and some people in marketing to the practice talk.  He wanted us to think like the investors and ask some difficult questions about the company, product and business plan.  When asked about the kind of people he needed to hire for his plan to work the CEO quoted General Erich von Manstein to illustrate his point.</p>
<blockquote><p>There are only four types of officer. First, there are the lazy stupid ones. Leave them alone, they do no harm. Second, there are the hard-working intelligent ones. They make excellent staff officers, ensuring that every detail is properly considered. Third, there are the hard-working, stupid ones. These people are a menace and must be fired at once. They create irrelevant work for everyone. Finally, there are the intelligent lazy ones. They are suited for the highest office.</p></blockquote>
<p>The CEO claimed to the the fourth type of person, intelligent enough to make the big decisions and lazy enough to delegate the actions to someone else.  I&#8217;d like to think I work with reasonably bright people so I didn&#8217;t have a problem accepting his claim.  Moving on to the dumb and stupid, the CEO said he would never work with someone he classified as such.  They are a waste of capital and management.  They produce no results.  I tend to agree.  I never accept work from someone I deem waste of my time.  The stupid and hard-working produce results but leave so many problems in their wake that the intelligent and hard-working have to clean up after them.</p>
<p>The intelligent and hard-working are the people the CEO needs to bring his business plan to life.  His argument, though, was poor.  He claimed the intelligent and hard-working aren&#8217;t actually intelligent.  If they were intelligent they would be intelligent and lazy making the big decisions.  The intelligent and hard-working, he argued, are just smart enough to not create a mess of problems while they work.  They&#8217;re nothing more than worker bees who know enough to listen to his direction and not smart enough to make a decision, develop an idea or even communicate with other people like he could.  He only wants to work with the intelligent and hard-working because they were the ones that would do his bidding but they are not smart enough to question him.  He said this in a room full of people he worked with, his employees.</p>
<p>I looked around at their faces.  Some were shocked he would so openly insult them.  Some were disgusted by what he said.  Others showed disappointment.  Disappointment in I don&#8217;t know what.  Maybe they were disappointed in themselves for coming to work for a man that thought so poorly of them.  Either way the company morale plummited.  No one missed the implication of the CEO&#8217;s words.</p>
<p>Perhaps he is a very bold man.  Or he might not have realized what he said until it was too late.  Either way he seemed unfazed by the fact he deeply insulted everyone that worked for him.</p>
<p>The company failed.  Series B never materialized and he laid off all of his worker bees a few weeks after the warm-up talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2009/01/23/dont-insult-employees/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Boston Scalability User Group</title>
		<link>http://blog.anthonychaves.net/2008/02/04/boston-scalability-user-group/</link>
		<comments>http://blog.anthonychaves.net/2008/02/04/boston-scalability-user-group/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 20:59:16 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/java/2008/02/04/boston-scalability-user-group</guid>
		<description><![CDATA[I&#8217;ve been digging around lately for a Boston area user group dedicated to architectural scalability and I haven&#8217;t been able to find one.  Other user groups that I regularly attend have meetings centered around scalability once in a while, but I&#8217;m looking for something with a schedule dedicated to the topic.  It&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been digging around lately for a Boston area user group dedicated to architectural scalability and I haven&#8217;t been able to find one.  Other user groups that I regularly attend have meetings centered around scalability once in a while, but I&#8217;m looking for something with a schedule dedicated to the topic.  It&#8217;s a hot topic in the industry right now with a lot happening on different fronts and there should be some ongoing professional discussion dedicated what goes into growing an application.</p>
<p>Here are some of the topics I want to talk about:</p>
<ul>
<li>Data growth and access &#8211; What kind of DBMS topologies allow maximum scalability without breaking the budget?  What if the budget wasn&#8217;t a problem?  How do you migrate your data model from hundreds of users to millions of users?  Should you partition user data across shards or keep it in a central database?  How do you profile data access paterns?  Is your application mostly-read or mostly-write?  When should you use an LDAP directory for data storage?  When should you use MySQL and when should you use Oracle?</li>
<li>Application server scaling &#8211; app server clustering, web server integration, load balancing, application session management, data caching</li>
<li>Web Tier &#8211; load balancing reverse proxies, data caching, working with HTTP, considerations for exposing functionality via REST</li>
<li>Language conisderations and platform choices &#8211; Dynamic languages vs. Static languages, Linux vs. Windows, Solaris vs. Linux, RedHat vs. Oracle, IBM vs. Oracle &#8211; How do you make these choices?  What evaluation critera are most important?  Which ones are misleading?</li>
<li>Framework scalability &#8211; How can you scale if your framework can&#8217;t?  Does Rails really scale better than Spring Web MVC?  Where do PHP frameworks fit in?  What are the alternatives?  This is where we will investigate what you gain and lose by binding yourself to a particular framework, how to keep the coupling to a minimum and how to use your framework as a solid foundation instead viewing it as a cage.</li>
<li>Emerging technology &#8211; Should you become familiar with Map Reduce and Hadoop?  What kind of impact do object databases have on your application?  Should you buy your own Sun or Dell boxes or use Amazon&#8217;s EC2 and S3?</li>
<li>Application architecture &#8211; How do you write an application that scales?  What does your application look like as it grows from servicing hundreds to millions of users?  How does it handle session management?  How does it access datastores?  Are there any design patterns that are helpful?  What are the anti-patterns to be aware of?</li>
</ul>
<p>Like I said, I haven&#8217;t found a group dedicated to discussing these topics.  If you know of one in the Boston area please let me know.  Assuming there isn&#8217;t one <strong>I am willing to start one</strong>.  I&#8217;d like to start off small and meet at coffee shops around Burlington or Lowell.  I have no delusions that this is going to start off or even become as big as NEJUG is now.  If it starts off as a few people getting together to talk about scalability trends, cool caching solutions and specific products then I&#8217;d call it a good start.</p>
<p>The meeting location is still TBD and will be based on how many people are interested in attending.  It will probably be somewhere in Burlington, MA.  There is no planned presentation at this time.  Instead we will have a meet and greet and then discuss scalability trends and news, what approaches to scalability are commonly used now and what are the plans for the future.</p>
<p>If you are interested in coming or in finding out more information please email me at &lt;my first name&gt;@&lt;my domain name&gt;.&lt;my tld&gt; or leave a comment below.  Please make sure to include your email address when you fill out the form so that I can get in touch with you &#8211; your email address will not be displayed on my site.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/02/04/boston-scalability-user-group/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Many Bugs &#8211; Conclusion</title>
		<link>http://blog.anthonychaves.net/2008/01/30/too-many-bugs-conclusion/</link>
		<comments>http://blog.anthonychaves.net/2008/01/30/too-many-bugs-conclusion/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 17:20:55 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/work/2008/01/30/too-many-bugs-conclusion</guid>
		<description><![CDATA[This is the final part (for now) of the thoughts I&#8217;ve collected on improving the relationship between software developer and QE to find high-risk bugs sooner.  You might want to check out parts one, two, three and four before continuing here.
To some people it might seem that a lot of what I&#8217;ve written about [...]]]></description>
			<content:encoded><![CDATA[<p>This is the final part (for now) of the thoughts I&#8217;ve collected on improving the relationship between software developer and QE to find high-risk bugs sooner.  You might want to check out parts <a href="http://blog.anthonychaves.net/work/2008/01/23/too-many-bugs">one,</a> <a href="http://blog.anthonychaves.net/work/2008/01/24/too-many-bugs-part-2">two,</a> <a href="http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-part-3">three</a> and <a href="http://blog.anthonychaves.net/work/2008/01/29/too-many-bugs-part-4">four</a> before continuing here.</p>
<p>To some people it might seem that a lot of what I&#8217;ve written about here is common sense.  The condensed version of this text might be &#8220;go talk to QE&#8221;.  But surprisingly there are exceedingly few people that actually do it.  <span id="more-43"></span>QE, or any other group for that matter, is a mysterious team with bad intentions that lives on the other side of the fence we through our software over.  Working with QE over Bugzilla and email is like a 2400 bps modem.  You just don&#8217;t get what you need over it.  Software developers are typically even more prone to this reclusive behavior due to the kind of people attracted to the field.  I struggled with the same social problems for years, usually with less than satisfactory results.  Eventually I found a way to work with others that works well for everyone.  I had to struggle against my strongly introspective personality and force myself to communicate verbally, in person, with people around me and affected by my work.  Why?  Because it didn&#8217;t seem like anyone else was doing it and there had to be a better way to deliver high quality software that people wanted to use.</p>
<p>By paying attention to these things the quality of my technical work improved and my visibility to people both on and outside of my teams skyrocketed.  I&#8217;ve made an effort to improve how I work with others and in doing so I&#8217;ve made a name for myself.  Possessing superior technical skill is of little use if no one recognizes it.  Think about that for a minute.  You can be the greatest programmer of your generation and you&#8217;re not going anywhere if you can&#8217;t convince others you&#8217;re worthwhile.</p>
<p>Oh yeah, what effect does this have on the bug triage meeting?  If you&#8217;ve read this far then you know you&#8217;re showing up loaded with ammo.  Every bug you talk about is going to be important because you&#8217;ve eliminated all the small ones along the way.  Imagine being in a room with your peers and a cross functional team where every word you say is inherently more valuable because you&#8217;ve done your homework.  You&#8217;ve put in the effort to make this meeting more valuable for everyone else that attends.  You&#8217;re not wasting their time by even looking at bug 34987 that only had a minor impact on documentation.  You&#8217;re in front of an audience that wants to discuss things that matter, business or technical.</p>
<p>No one wants to get up in the morning and think, &#8220;I want to sit in a bug triage session all afternoon today and again tomorrow&#8221;.  In this meeting you&#8217;re able to talk about every bug as it comes up.  You know the issue, you know the root cause and you know what kind of scope it takes to fix the problem.  That&#8217;s the kind of information that&#8217;s needed at bug triage sessions.  That information helps to determine the severity and priority.  It let&#8217;s people decide whether or not the bug needs to be fixed right now and that is exactly the point of bug triage meetings.  People will notice that you&#8217;ve done your homework and they will appreciate it.  It will get you noticed.  People will realize you have in-depth technical skill and you can work well with others which almost guarantees a position as a successful technical lead and it will open up a lot of other doors in your career.  What, you just wanted to make the bug triage meeting shorter?</p>
<p>Well, like software this paper isn&#8217;t perfect.  I&#8217;m certain there are missing topics, incorrect statements and gaping holes in logic and arguments.  There are entire books written on this subject and I don&#8217;t have any delusion that I&#8217;ve covered even one one-hundredth of 1% of the social issues that hold our industry back from consistently releasing high quality software, on time, on budget.  But, like I do for my software, I keep a list of known risks for this paper and I&#8217;ve decided that it&#8217;s finally time to ship it, bugs and all.  Congratulations on reading the entire thing and bigger congratulations for just skipping to the end if that&#8217;s how you got here.  If you&#8217;ve found this to be worthwhile please submit it to Digg, Slashdot, StumbleUpon, del.icio.us or whatever other social network you use.  Also please leave your comments and discuss what I&#8217;ve written.  Feel free to add topics you think would be interesting.</p>
<p><script type="text/javascript"> digg_url = 'http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-conclusion'; </script><br />
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/01/30/too-many-bugs-conclusion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Many Bugs &#8211; Part 4</title>
		<link>http://blog.anthonychaves.net/2008/01/29/too-many-bugs-part-4/</link>
		<comments>http://blog.anthonychaves.net/2008/01/29/too-many-bugs-part-4/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 16:54:49 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/work/2008/01/29/too-many-bugs-part-4</guid>
		<description><![CDATA[Today brings us to part four in the series of thoughts I&#8217;ve put together on reducing bug triage brutality by creating a more productive relationship with your QE team.  You might want to check out part one, part two and part three before reading on.
There&#8217;s the old saying &#8220;when you&#8217;re in a hole stop [...]]]></description>
			<content:encoded><![CDATA[<p>Today brings us to part four in the series of thoughts I&#8217;ve put together on reducing bug triage brutality by creating a more productive relationship with your QE team.  You might want to check out <a href="http://blog.anthonychaves.net/work/2008/01/23/too-many-bugs">part one</a>, <a href="http://blog.anthonychaves.net/work/2008/01/24/too-many-bugs-part-2">part two</a> and <a href="http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-part-3">part three</a> before reading on.</p>
<p>There&#8217;s the old saying &#8220;when you&#8217;re in a hole stop digging&#8221;.  So far we&#8217;ve talked about how to stop digging but we haven&#8217;t talked about how to get out of the hole yet.  A bug list is a bit like Pandora&#8217;s box in that once the bugs are open they&#8217;re like all the sorrows let out of the box.  <span id="more-42"></span>You just can&#8217;t put the sorrows back in the box and you just can&#8217;t get rid of all the bugs.  What happens to you when you&#8217;ve got a bug list a mile long?  You try to avoid looking at it for one.  But there are always people in management that subscribe to the mange-by-numbers theory who take bug metrics a little too seriously.  Eventually you&#8217;re going to make it to the top of the naughty list when they&#8217;re looking at who has the most open bugs.  This can be interpreted in a few ways and none of them are good.  They could think you&#8217;re a terrible developer if you write so many bugs.  They could think you&#8217;re lazy if you&#8217;ve got such a huge backlog.  They could think you can&#8217;t prioritize well if they see something related to their pet topic is on your bug list and you&#8217;re working on something different.  They could think any number of different things and whatever they come up with definitely will not benefit you one bit.  You need to massage your bug list to stay off the slacker radar.</p>
<p>Start by picking off some bugs that are related somehow.  They can be related on feature, topology specificity, platform specificity.  Pick a few that you don&#8217;t understand well.  Pick a few that you think are configuration error, user error, documentation error.  Make up a list with these bugs and a summary of each one or print out each bug report.  I hope you can guess what&#8217;s coming next.  That&#8217;s right &#8211; go get your QE person or people and ask when they will have time to sit down with you to address your concerns.  What you&#8217;re doing right here is proving to QE that they are valuable and their work is not in vain.  You&#8217;re validating their presence in the organization by asking them to talk about their work.  They need someone to listen to what they&#8217;re saying and it&#8217;s your job as a developer to do it.  You&#8217;re making them feel good by making them feel important.  This is a great way to start off a meeting or meeting request.</p>
<p>Let them know what bugs you want to discuss before the meeting starts to give them time to prepare too.  This meeting is going to go very smoothly if everyone comes prepared.  Your goal here is to find out enough information to resolve all of the bugs on your list you prepared.  Every one of them must have some resolution before you leave this meeting.  This is not a bug triage meeting because you know going into it that all the bugs must be resolved.  This is a technical meeting that results in action items from all parties.</p>
<p>Start the meeting by saying &#8220;I understand you have some concerns about&#8230; &lt;fill in the software module blank&gt;.  I was wondering if you could give me some insight into what you&#8217;re looking for from me&#8221;.  Begin the discussion on each bug by asking them how they encountered it even if it&#8217;s already logged in the bug report.  Ask questions about their process.  A lot of extra information that wasn&#8217;t captured in Bugzilla will come out of this conversation.</p>
<p>Sometimes enough information will come out that you will all see that the bug is clearly due to incorrect expectations or incomplete documentation.  These are easy bugs to resolve.  Sometimes you&#8217;ll get that a bug is clearly a bug and through your conversation you will find out exactly what you need to do to fix it.  These are also pretty easy to deal with.  Another kind of bug that can end up here is one that turns out to be an enhancement request.  I&#8217;ll talk in-depth about how to deal with enhancement requests another time, but if they come up in the meeting it&#8217;s best to just move on to the next bug.  If you don&#8217;t you&#8217;ll end up at a mini-triage meeting trying to decide the priority, whether or not it&#8217;s an enhancement request and so on.</p>
<p>At the end of the meeting there should be a list of developer action items for you to take care of and a list of QE action items for them to take care of.  Have these meetings as often as you can in order to drive down your list of bugs.  Remember you&#8217;re trying to show up at the bug triage meeting with the shortest bug list possible and this will drive down your list very quickly.</p>
<p>I can derive another relevant example from the first iteration I wrote about in <a href="http://blog.anthonychaves.net/work/2008/01/24/too-many-bugs-part-2">part two</a>.  Remember that QE had opened a huge number of bugs in a very short time period on my deliverable.  I was overwhelmed by the incoming load and I couldn&#8217;t just mark all the bugs &#8220;won&#8217;t fix&#8221;.  If QE wasn&#8217;t riled up already that would be the thing to do it.  Most of the bugs came from two people in QE so I had to get them into a room with me, if not to talk to them then just to keep them away from their keyboards so they couldn&#8217;t open any more bugs for me.</p>
<p>I went in to the meeting with a print out of every bug I wanted to discuss.  Each one was related to the feature that I had just delivered.  I started the meeting by saying, &#8220;John, I understand you have some concerns about this feature.  It seems like there are some things that are preventing you from testing further into the feature and I would like to know what I can do to help you get further along&#8221;.  Notice how I didn&#8217;t say anything about &#8220;Please stop opening bugs or I&#8217;m going to quit my job&#8221; or &#8220;I hate you QE guys so much that I&#8217;ve written a thousand more bugs that you&#8217;ll never discover&#8221; or even something nicer like &#8220;There are an awful lot of bugs against this feature and I&#8217;m not sure some of them are valid&#8221;.  Everything I said was phrased in a way that conveys my want to help QE.  And I really did want to help them.  Helping them helps me.  There is no rule that says developers can&#8217;t help QE and if there is a rule that says that it&#8217;s wrong.  Dev./QE is a two way street.</p>
<p>After that we went through each bug.  We discovered that some of them were duplicates of each other.  That gave QE the action item to close each duplicate bug.  Some of the bugs were discovered to be due documentation that wasn&#8217;t explicit or detailed enough.  Those bugs came into my action item list to fix the documentation.  I asked the QE guys what documentation details would have helped them navigate through the steps safely so that I could use it in my resolution.</p>
<p>Some of the bugs were because the user tried to set up the software on an unsupported platform.  You can&#8217;t use SuSE 7 and Perl 4 when the supported platform is Red Hat ES 4 and Perl 5.  Those bugs become action items for QE; retest those bugs on supported platforms.</p>
<p>The most interesting bugs were real bugs caused by unexpected QE needs, but needs vital to their testing.  Getting a firm grasp of what is causing these bugs is important and hopefully you can gain enough information that you can propose a fix in a relatively short period of time.  Those bugs became action items for me to resolve.</p>
<p>In creating these action items it&#8217;s also important to provide a time table as to when QE can expect to see the resolution.  Talking about the bug is one thing, but the goal is to drive down the bug list and the only way to do that is to actually fix the bugs.  For my action items I told the QE guys that they could expect to see a fix in the next patch release they get from development and I made sure to deliver.  Setting joint expectations and then driving toward them is a recurring pattern here and your consistency in doing so is important to your success.</p>
<p>Come back again tomorrow for the conclusion!</p>
<p><script type="text/javascript"> digg_url = \\\'http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-part-4\\\'; </script><br />
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/01/29/too-many-bugs-part-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Many Bugs &#8211; Part 3</title>
		<link>http://blog.anthonychaves.net/2008/01/28/too-many-bugs-part-3/</link>
		<comments>http://blog.anthonychaves.net/2008/01/28/too-many-bugs-part-3/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 17:55:15 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-part-3</guid>
		<description><![CDATA[Today is part three in the ongoing Too Many Bugs saga.  You might want to check out part one and part two before reading on.
By eliminating the setup/config/curiosity class of bugs you should notice an immediate drop off in the amount of incoming bugs.  It&#8217;s easy to file bugs on things that aren&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Today is part three in the ongoing Too Many Bugs saga.  You might want to check out <a href="http://blog.anthonychaves.net/work/2008/01/23/too-many-bugs">part one</a> and <a href="http://blog.anthonychaves.net/work/2008/01/24/too-many-bugs-part-2">part two</a> before reading on.</p>
<p>By eliminating the setup/config/curiosity class of bugs you should notice an immediate drop off in the amount of incoming bugs.  It&#8217;s easy to file bugs on things that aren&#8217;t quite clear at first.  By helping others get on board with what you&#8217;ve produced you&#8217;ve started setting expectations on where to test to get the most value out of the process.<span id="more-41"></span>  This isn&#8217;t to say that you as a software developer tell QE what to test and how to test it.  That would defeat the purpose of having QE.  They know how to test software and they&#8217;re good at it.  Rather, during your ongoing dialogue with QE (it is ongoing, right?) there should be a discussion where you provide them with a list of the implementation topics that you&#8217;re most concerned about.  You should address both business concerns and technical concerns.</p>
<p>The business concern is directly traceable to the business requirement.  This is really just asking the question, &#8220;does this software fulfill this requirement?&#8221;.  The answer should be fairly obvious but sometimes the requirement a software deliverable fulfills is not immediately apparent.  Sometimes the software address multiple business requirements and there should be a discussion as to how they depend on each other and just as importantly how they do not depend on each other.  Functionality of one requirement should not interfere with the functionality of a different requirement.  It&#8217;s important that QE have some idea about the desired dependent and independent behavior in order to write tests to prove the software is correct.</p>
<p>The technical concerns you discuss arise from how you feel about the way you implemented the business requirement.  Pointing out areas where the software is very flexible is always a good idea.  This gives QE the hint that the software accepts a wide range of input and they should spend a little more time in validating what constitutes &#8220;correct input&#8221; and that the software only operates on correct input.  If there is a point of extensibility in the software QE should take that as a directive to test that part as a high-risk to software security.</p>
<p>You shouldn&#8217;t limit yourself to talking about just flexibility or extensibility, these are just examples of the topics you should bring to QE.  Remember, you&#8217;re taking the initiative to put a stop to brutal bug triage meetings and if the quality of your software improves as a result then just accept it as a positive side effect.  Discussing these concerns with QE is a sure way to get some high-quality bugs out of them by allowing them to focus on areas of high-risk and core features.  If you ever want to stop dealing with junk bugs then you have to do this.  If there is ever a question on whether or not to talk to QE then always err on the side of over communicating.  Too much is never enough.</p>
<p>Check back tomorrow for part four and the conclusion on Wednesday.  Until then please forward this on to anyone that would find it interesting or helpful.  And of course, please click the Digg This button below!</p>
<p><script type="text/javascript"> digg_url = 'http://blog.anthonychaves.net/work/2008/01/28/too-many-bugs-part-3'; </script><br />
<script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/01/28/too-many-bugs-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Many Bugs &#8211; Part 2</title>
		<link>http://blog.anthonychaves.net/2008/01/24/too-many-bugs-part-2/</link>
		<comments>http://blog.anthonychaves.net/2008/01/24/too-many-bugs-part-2/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 14:02:11 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[qe]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/work/2008/01/24/too-many-bugs-part-2</guid>
		<description><![CDATA[This is part two of a paper I&#8217;ve written on making bug triage meetings more manageable and becoming a leader in a cross functional team.   You might want to check out part one before reading on.
The reason we have bug triage sessions in the first place is no one has bothered to talk [...]]]></description>
			<content:encoded><![CDATA[<p>This is part two of a paper I&#8217;ve written on making bug triage meetings more manageable and becoming a leader in a cross functional team.   You might want to <a href="http://blog.anthonychaves.net/work/2008/01/23/too-many-bugs">check out part one</a> before reading on.</p>
<p>The reason we have bug triage sessions in the first place is no one has bothered to talk about these bugs before dealing with the entire list became a high priority.  Everyone pays the high price of brutally long bug triage sessions because the low price of communicating on a consistent basis hasn&#8217;t been a priority right along.  In order to make triage sessions more valuable you have to make it your top priority to get to the meeting with <span id="more-40"></span> the fewest, highest quality bugs possible.  This doesn&#8217;t mean close all the small bugs before the meeting and hope no one notices or to assign them all to someone else.  It means effectively dealing with bugs while they&#8217;re incoming.  In order to do this right you&#8217;ll need to build a relationship with someone in QE.  Yes I know QE and developers are supposed to be like cats and dogs or water and oil.  In this case the relationship needs to be more like peanut butter and jelly.  Or peanut butter and chocolate.  Or peanut butter and whatever else you like since it goes well with just about everything.  You need to be like peanut butter.</p>
<p>Part of the beauty in doing this is that your chosen QE co-conspirator doesn&#8217;t even need to know they are a co-conspirator, though eventually they will realize their job has become much, much easier to do effectively.  One of your goals is to stop bugs from coming in by stopping them at the source, which means you need to get QE to reduce the number of bugs filed on your software.  There are a few ways to go about this and not all of them are good.  Some can even get you in trouble with HR.  If you want to reduce the number of incoming bugs you have to first find out what software QE is testing.  If you&#8217;re late to the game then you should start just after the code is released to QE, though starting any time is better than not starting at all.  In order to find out what&#8217;s going on in QE you have to, gasp, talk to someone in QE!  It&#8217;s true, they know how to communicate using spoken language, not just Bugzilla.  You can ask your QE person, &#8220;hey, how&#8217;s it going?&#8221; and they will tell you everything is going fine, testing is going fine, day to day tasks are going fine and then move on to filing more bug reports on your software.  Or you could ask, &#8220;hey &lt;QE person&gt;, have you had a chance to look at &lt;my software module in question&gt;?  If you have a chance I&#8217;d like to go over the work I&#8217;ve done with you in order to answer any questions you have on it.&#8221;  The second way always gets better results than the first and it&#8217;s surprising how very few software engineers are capable of doing this.  Asking the question in this way sets up a discussion by showing the QE person that you are open to questions and feedback.  It gives them assurance that their input is valuable because it is!  If they&#8217;re testing software and they don&#8217;t understand what it&#8217;s doing they&#8217;re not going to be responsive to the first question of &#8220;how&#8217;s it going&#8221; unless they have an ax to grind.  You&#8217;re not going to get anything useful out of that question because it gives no indication that questions or constructive criticism are welcome even if they are.  Do you really want to reduce your bug count?  Spend a half hour going over your work with them.  Answer every question they have and go over the implementation.  Draw diagrams, play charades, do everything you can to help them understand what you&#8217;ve unleashed.  All of those bugs that are really just setup and configuration questions will be vaporized if you do this.  Ditto for the &#8220;what does this software actually do&#8221; bugs that would have been filed.  You have just taken the first step to reducing the number of low quality bugs you have to deal with.</p>
<p>I remember an iteration where I had a fairly high profile deliverable.  I felt like I nailed the business requirement.  All the features were complete and robust.  The implementation was impeccable.  This deliverable was a feature that had been lacking for a long time and I had a feeling that I&#8217;d be heralded as a hero for delivering just what everyone was begging to have for such a long time.  I didn&#8217;t think anyone would be able to open even a single bug on my project.  How could they?  They would be too busy drooling over the amazing quality of what I just delivered.</p>
<p>Imagine my surprise when QE started opening up bug after bug after bug on what most people in development considered perfection.  I watched in panic all day long as I saw my bug list get longer and longer.  And almost everyone one of the bugs was shallow.  The QE person didn&#8217;t dig very far at all for a reason to file a bug.  If they didn&#8217;t understand what was supposed to happen they filed a bug.  If they thought the software was supposed to do something and it didn&#8217;t then there was a bug.  If they thought the software should have additional features they considered nice to have there was a bug.  Needless to say that iteration&#8217;s acceptance process was very stressful for me.  That&#8217;s when I realized the value in stopping bugs at the source.</p>
<p>Almost all of the bugs were in the class that would have gone away if I just communicated what was going to happen before the release.  Fast forward to the next iteration.  Once again I was working on high profile features that should be a slam dunk as far as quality goes.  The week before it was released to QE I asked around to find out who would be testing my features.  I scheduled a meeting with them to talk about my deliverable and give them a demo.  In my meeting invite I sent a brief description of what I wanted to talk about and encouraged them to show up with questions or relevant topics to discuss.  During the meeting we went over just about every facet of every feature in great detail.  We went over how to configure the operating system environment, the topology and the application.  I wanted to do everything in my power to make sure they had all the information they needed to meaningfully test my software.  Meaningless bugs are a waste of everyone&#8217;s time.  Once the software was officially released to QE I didn&#8217;t see a single bug filed on the first day of testing.  One was filed on the second day of testing.  None on the third.  I had only a handful of bugs for that iteration&#8217;s release because I made sure to discuss my concerns with QE before they started testing it.  I also had more time to concentrate on the meaningful bugs.</p>
<p>On Monday we&#8217;ll talk about what to do with the bugs that are already in your queue.  If you found this worthwhile please forward it on to anyone else you think would find it helpful.</p>
<p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/01/24/too-many-bugs-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Too Many Bugs</title>
		<link>http://blog.anthonychaves.net/2008/01/23/too-many-bugs/</link>
		<comments>http://blog.anthonychaves.net/2008/01/23/too-many-bugs/#comments</comments>
		<pubDate>Wed, 23 Jan 2008 15:16:37 +0000</pubDate>
		<dc:creator>Anthony Chaves</dc:creator>
				<category><![CDATA[career]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.anthonychaves.net/work/2008/01/23/too-many-bugs</guid>
		<description><![CDATA[There is a time or two in every software engineer&#8217;s life when he experiences a deluge of open bug reports.  I&#8217;ve seen times where there are ten new defect reports per day for two weeks straight against one module.  At that point checking your &#8220;My Bugs&#8221; list in Bugzilla is a daunting task. [...]]]></description>
			<content:encoded><![CDATA[<p>There is a time or two in every software engineer&#8217;s life when he experiences a deluge of open bug reports.  I&#8217;ve seen times where there are ten new defect reports per day for two weeks straight against one module.  At that point checking your &#8220;My Bugs&#8221; list in Bugzilla is a daunting task.  You don&#8217;t want to see how far down the page scrolls.  Worse, you don&#8217;t want to triage all those bugs; each one will take at least five minutes.<span id="more-39"></span></p>
<p>Right off the bat you have to read and comprehend the defect report.  Not all reports are clear and concise  Sometimes the problem still isn&#8217;t obvious just from reading the report and you&#8217;ve got to wait on clarification.  Worse, sometimes the bug report is perfectly clear and you can&#8217;t determine whether the issue in question is a feature or a defect.  You can expect to spend a lot of time going back and forth with dev. management, QE, customer support and product management discussing whether or not the functionality is correct, especially if you work at a large company.  So let&#8217;s say you know that some functionality is not correct or at least not desired.  Now you&#8217;ve got to think about the steps to reproduce it and what the root cause could be.  Still, you&#8217;re just thinking about it; you haven&#8217;t yet dug into the unit tests searching for a missed failure condition.  Despite not knowing the root cause for certain there has to be a business decision about this bug: is it worth our time to fix it?  Is there a business case that says that this functionality must be corrected  before it is released into the wild?  Sometimes yes, sometimes no.  More than five minutes has gone by in either case and you&#8217;re still not done.  Someone in management is going to want to know the delivery time table.  Now repeat this process for 74 more bugs.  If you&#8217;re triaging by yourself and you work at near-100% efficiency you&#8217;re looking forward to at least one full work day of triaging and the bug reports are still incoming.</p>
<p>Realistically you&#8217;re not working by yourself and you don&#8217;t set aside an entire day to triage your bug list.  In real life the situation is a lot worse because a long time ago somebody in management invented the bug triage meeting.  Bug triage meetings can last for hours or even days where usually too many people get into a room, close the door and stay caged in there until they triage some percentage of the product or service&#8217;s entire bug list.  Instead of spending one person-day on bug triage, these meetings make it possible to burn entire person-weeks in the blink of an eye by turning lots of little technical problems into one large social problem.  The technical problems don&#8217;t matter here because, easy or hard, there is a fix for (almost) every bug.  The social problem is a lot bigger: getting people to agree on the priority and severity of each bug in the list.</p>
<p>Remember the process to triage each bug?  Now everyone in the room has to go through that process for each and every bug that comes up in the meeting.  Unless your company is the Borg Collective (no, not Microsoft.  I actually mean the Borg from ST:TNG) there are going to be questions that require in-depth answers and those answers will foster discussion to get everyone up to speed on the history of the bug, why someone thinks it&#8217;s high priority, why someone else thinks it&#8217;s low priority, until everyone agrees and the meeting moves on to the next bug.  The bug triage meeting also introduces the notion that you&#8217;re not going to be dealing with only your own bugs.  Other developers are going to be in the meeting and their bugs have to be triaged too.  This means that a significant portion of the meeting time is going to be spent NOT talking about your own bugs which is a recipe for boredom even if you have the best intentions.</p>
<p>It would seem that I don&#8217;t have a very high opinion of bug triage meetings but that&#8217;s actually not the case.  Bug triage meetings are vitally important to a project at the right time, with the right people and the right material to work with.  Unless you&#8217;re into fooling yourself no product or service ever ships with zero bugs.  Sure you can get all kinds of management involved to do requirements-lawyering and invalidate bugs in bulk but then the zero bug metric loses its meaning.  I don&#8217;t know about you but I&#8217;d rather have a list of known risks going into release instead of sweeping them under the rug because company policy dictates that everything must ship with zero bugs and is completely perfect, absolutely flawless.  One of them seems just a bit more realistic than the other too.</p>
<p>Anyway, because there are always bugs we need the triage meeting to decide which ones to fix right now.  These are usually the bugs which will cause the most damage in the wild either to the customer or the company&#8217;s reputation.   The rest should be put in the parking lot for consideration in the next release cycle.  If you&#8217;ve done your engineering cycle right then a vast majority of the bugs will be put in the parking lot.  If development is complete and you&#8217;re working on driving your bug list down for the release then 75% of the bugs in the list should not be classified as &#8220;must be fixed&#8221;.  Maybe development isn&#8217;t complete after all.  So if you know that most of the meeting discussion is about bugs that don&#8217;t need to be fixed right away then why spend so much time talking about them?  It&#8217;s because people lack initiative.  Do you want to be a rock star team player adored by your peers and management?  There are a few things you can do to make bug triage more valuable to everyone involved and give your career a big boost by addressing the social issues before they become social problems.</p>
<p>Tomorrow we&#8217;ll start taking a look at specific things you can do to reduce your bug count, help QE file real bugs and make your contributions more valuable and more visible.</p>
<p><script src="http://digg.com/tools/diggthis.js" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.anthonychaves.net/2008/01/23/too-many-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
