What is the role of QA in an agile development shop?

July 13th, 2009 tkadom

Recently I was in a meeting with a group of QA managers of a fortune 500 company which had decided to take the agile leap.  The question before the managers was:  “How will our QA processes map to an agile environment?  How do we interact with Agile development teams, and how can we ensure that we deliver a quality product? This was no small feat, considering these managers represented several shops over a dozen product lines, with a diverse international staff of consultants and full timers.  The challenge was not just shaping the strategy for moving to agile, but also identifying the tactics that would make that strategy a reality.

Due to the time constraints we decided that the meeting should first focus on strategy, and the tactics would fall out of the strategy or even be left for another day.  After we got over some of the basic conceptual hurdles of what it means to be agile, and the QA managers accepted the notion that there would be one team rather than two federated competing departments, we landed on the definition of “done”.  The general consensus was that it was not done until it had completely passed all system and integration testing.  The group lamented how development would just throw stuff over the wall and label it as done to collect the points for velocity. 

In their initial attempt to combat this behavior, they decided on multiple states for “Done”.  They would have a “development done”, a “user acceptance done”, and a “QA integration done”.  The “user acceptance done” would be enough to satisfy the requirement that a story met the basic acceptance criteria and the points for completion could be awarded, but it would then be fed into the much harsher QA filter where it could ultimately still be rejected.  From the QA perspective this was the only way to ensure that the quality was in the product, and since their behinds were on the line for the quality, they would not accept anything less.  Due to the additional quality filter, their agile environment demanded that all stories for an iteration be delivered early so that full regression testing could be done prior to iteration end.  A waterfall smell.

So the conversation shifted to who was responsible for the quality of the product in an agile environment.  Was it the QA team, or the development team?  Clearly the quality responsibility for a self directing self organizing team would have to be on the development team, and not on QA unless QA was embedded as part of that team.  However, lacking embedded QA, If the team took responsibility for the quality of the product, would the QA managers then be able to lift the toll gate entirely for product quality? 

The answer was a unanimous “yes… but”.  The “but” obviously being tied to the failings of developers to test anything properly or consistently.  “Developers do not know how to write proper tests”, and “Developers do not have access to full integration tests, and therefore their testing can only be limited to their code”.  Were common refrains.  Putting those arguments aside for a moment, in an agile environment, the product owner or client ultimately agrees to accept software from development.  The argument basically boiled down to product owners and clients not having the “know how” or “white box understanding” to properly “accept” a story. 

That was certainly a worthwhile point to arrive at, because we had established that if the development team and product owner truly owned the “Quality” of the product, then the “Assurance” portion of the QA title was no longer relevant.  What was now “QA” would then be something minus the “assurance”, but what would that “Q” look like? 

“Q” would have to work directly with the customer in accepting stories so that stories could be accepted based not only on meeting the acceptance criteria, but on how they integrated with the system, and how they met the more stringent guidelines for acceptable use. 

The problem with this definition was basically the time to acceptance.  Acceptance of a user story should not take a great deal of time.  Certainly not more than a day, and if at all possible story verification should be near instant from the customer and developer perspective.  Clearly system testing needed to be automated, and regression tests had to be readily available to be triggered on story delivery. 

This finally landed the QA managers where I felt they needed to be.  On the customer side accepting stories, automating acceptance, and regression testing.  What I did not realize until today is that while this concept was basically agreed on by the managers, it also redefined the department and the meaning of “QA”.  There are many agile presentation slides that kick the building down on QA.  QA is dead in agile, QA does not exist, QA is a roadblock.  This is clearly not true.  QA still exists, but the function is split.  The assurance belongs to the team, and the quality decision belongs to the product owner.

However, since the product owner is unable to fully determine the quality risk, QA slips into the role of “Q”, or to avoid any references to star trek, perhaps “Product Quality(PQ)”.  “PQ” is tasked with working closely with the customer or product owner to ensure that the conversations in the user stories are accurate and that the product still works beyond those stories.  “PQ” is a filter, not a gate.  The product owner can still overrule PQ, and the PQ manager will not get fired if the product owner does so to the detriment of the product.  Renaming QA is better than killing it.  The function still exists, but the responsibility shifts. 

Tim

Posted in Architecture, Random | 2 Comments »

very nice overview of heroku and morph

November 14th, 2008 tkadom

If you are looking for a great overview of ruby cloud technologies, check out this blog entry covering both morph and heroku

Posted in Architecture, Rails | 2 Comments »

The Sirens Call of Development Outsourcing

May 1st, 2008 tkadom

Being in the software development industry almost guarantees that you have an opinion on outsourcing.  In one of my previous companies, the COO was so entranced by the numbers that it just made everyone else seem overpaid!  I mean why pay some guy a 6 figure salary, when you can ship a box of dry roasted planters peanuts to the phillipines and call it a day?!?

So to set the record straight, outsourcing can and does work for some companies, but it isn’t as simple as everyone makes it out to be.  There are several factors that go into a successful outsourcing project. 

Namely:

  • Have a strategy - Know not only how your application will be built, but how it will be deployed and maintained, and figure that into your costs.
  • Find the Right Vendor - Many low budget outsourcing shops have one or two technical experts on staff.  These people are involved in the project initiation and oversight.  The people who are actually staffed on your project tend to be entry level "trainees" with almost no prior work experience.  It is important to choose a vendor who has a good reputation with project work, and who will maintain and deploy the application if necessary.
  • Manage the Relationship - Once you have found a Vendor, the onus is on you to keep up to date on how the project is progressing, and who is staffed on it.  It is also important to build a trust with the vendor since in effect that vendor has become a part of your company, and should potentially serve future development needs.
  • Have a solid contract - This is not only about the deliverable and the timeline, but also about the quality and security of the delivery.  Most contracts are structured to pay as you go.  This plucks teeth from your bite at the end.  If the vendor already has 2/3rd’s of the contract price by the final delivery, you can make all the noise you like about not accepting the delivery, and it wont make a difference.  Having an ongoing maintenance agreement and relationship with the vendor strengthens your hand.
  • Understand your objectives - What are you trying to achieve by outsourcing?  Staffing Flexibility?  Time to Market, Costs?  Freeing up internal resources for other tasks?  Have a clear view of why you are going into outsourcing, and what benefits you hope it will bring to your company.  If your goal is simply saving costs, be sure to work out how the application will be deployed, maintained and updated in advance.
  • Trust but Verify - Many vendors rely on the notion that you will only see what they show you.  If you accept a delivery without having it professionally inspected, its like buying a used car without having it checked by a mechanic.  To illustrate the point, a friend of mine was recently hired to "fix" an outsourced project because it was slow.  The client had already invested in the project and was unwilling to invest any more in development.  The hope was that my friend would just come in and fix the "slow" part.  Long story short, it turns out that the site was passing around multiple megabytes of xml data, had no paging support, and was a squirly mess of javascript that only ran on one browser.  Caveat Emptor!  it required more fixing than the construction cost…

 

So where does that leave you?  Well for one thing if you have all of the above in mind, and crunch the numbers, you might be surprised to find that the decision is not all that black and white any longer.  Outsourcing Web Development to a reputable vendor in india these days can cost upwards of $20-$30 per hour (I guess thats why people are going to the phillipines).  More importantly, once they deliver their product you will need to have someone who owns and maintains it.  Ideally you will have a QA team verify the business function of the application, and you will have an external consultant who verifies the quality and security of the code construction.

For my money, if I was outsourcing my development team, I would have to find a vendor who was willing to do the whole thing soup to nuts.  He would build it, he would deploy it, and he would maintain it.  I call him when i have problems, and if I do, the contract is going to make sure that he will be mortally concerned about getting it resolved immediately.  Find a shop like that, and you have a fighting chance.

If you choose to go the project route, you may soon find yourself in the same boat that one of my friends is in.  An application thats been built without anyone to maintain it.  The sirens call is low development cost, but if you lose sight of the larger maintenance cost of an application you do not have the complete picture. 

At the very least, have your own code mechanic to check the delivery that you are paying for, and good luck finding someone willing to maintain it… 

Posted in Architecture, Random | 1 Comment »

Whats the holdup…

March 18th, 2008 admin

I sometimes wonder if I don’t suffer from too much analysis paralysis. I have an itch to get this long running social micro-training site done, and I am on the home stretch in rails. I got to the devpay integration with amazon, and came to a screeching halt. The reason? … Merb?!.

Let me back up for a moment. I spent a good deal of time on the site look and feel, and then some more time on integrating the altered_beast forum to add that social default ingredient. Lets face it, a social site without a forum is like a pizza without cheese right? But as I was throwing all these plug-ins into the mix I began to worry that I was painting by numbers without really understanding what was going on behind the scenes. I also watched my memory footprint bloat out of control. I realize this is common for rails applications, but the thought going through my mind was… wouldn’t I rather do all this in merb? So here I am at the 70% complete mark rethinking the first 70 percent before completing. So much for “rush to deliver” (see “‘Getting Real’ - 37-signals“)

I know the light is at the end of the tunnel, but getting myself to spend the next couple of weeks coding in rails when my heart has already decided that there will be a rewrite to merb is near impossible. However, since I have found myself with a massive amount of free time on my hands, I am going to begin the happy process of chewing on merb for a bit. It is where my heart is, and I guess getting to the end will have to wait just a little bit longer…

Posted in Architecture | 1 Comment »

Customer Centered Design

March 17th, 2008 admin

It is always amazing to me how so many people who claim to understand product management actually have very little understanding of the topic. A few weeks ago I was in a meeting that was basically an impromptu “product design” session. The COO called the product manager, the lead DBA, myself, the CTO, and a notetaker into a room and wanted to brainstorm over a product that the company owns.

Essentially the question was: “Our existing product does not meet the needs of our clients, and we need to come up with a way to improve it and make it more marketable”. Forgetting for a moment that the question was really something you would rather do external research for, and that this type of brainstorming is what got us into a product no one cared about in the first place, I was amazed at how our product manager took no initiative to lay the groundrules. More surprising was that he actually thought we were accomplishing something by randomly suggesting what folks in the financial industry might like to see… We did not have a clear definition of what the target market was, who the users would be, what they would be coming to the portal for, and what we could provide that made the stay worthwhile. What we did have was a product name that meant something to back-office folks. It was to be a “compliance portal”…

After about 50 minutes of random noise and ideas, the COO asked the notetaker to summarize everything, and left the room with a flustered look on her face. The next day, I received a mail that basically had a bunch of bullet points for features, and a generic “request for feedback”. I felt the need to chime in as the architect because it appeared that the random scribble of bullet points was headed to the board for approval.

There are essentially 4 basic questions you must answer whenever you begin any project, and doing so will move you further along than random noise in a brainstorming session (don’t get me wrong, brainstorming is a great way to discover new ideas, but it doesn’t necessarily lead you to a product definition) . We had only addressed one of those 4 questions, namely: “What information can we add to the site”

  • Who are your users - Get into the heads of your users. basically this step just states the obvious about who you expect to use the platform, but it is important because each type of user will have different goals. What tools do those users have available, and how do they interact with those tools. write down each of the types of users, and what their activities are, and you will then naturally move to the next item…
  • What are their goals - What do these users want to do in the system? Enumerate the things they are trying to accomplish. Are they looking for information? are they trying to complete a task? Know your users goals and you will then be well on your way to…
  • identify the tasks involved in the goals - Now that you know who your users are, and what their goals are. identify the tasks that will be necessary to reach those goals. Imagine you had to reach those goals, what actions whould you take?
  • identify the information for each task - Finally you identify the information that will be relevant to each task.

This isn’t brain surgery, but you would be surprised how many people begin with the information they want to present and forget entirely about who the users are and what their goals are.

Now ideally your market research already told you who your targeted users are. So you can start with them and begin to discover their goals, tasks, and information. If you have the resources, then do a focus group. If you do not, then try an internal focus group. Take some staff you have at hand who are at least somewhat familiar with the target users role, and instead of sitting in a meeting and asking people to dream up some nifty stuff, ask them to consider what the goals for those users would be, and what kind of information and tasks they would envision in reaching those goals….

If you are a bookworm and looking for more context into how to plan a product, I would recommend Contextual Design : A Customer-Centered Approach to Systems Designs (Interactive Technologies)

Why didn’t we do this in the meeting you might ask? Well its not for lack of trying on my behalf. I think its difficult to change peoples behavior once they are accustomed to a certain style. Even if that style is not working. I am all for brainstorming new ideas, but when your building a new product it is very tempting to start thinking of the bells and whistles when the work of determining what the user needs is going to bear alot more fruit.

Posted in Architecture | No Comments »