Thursday, November 8, 2007

Now on MSDN: patterns & practices Performance Testing Guidance for Web Applications

You can now find our patterns & practices Performance Testing Guidance for Web Applications on MSDN in HTML. It's the same guidance we hosted on CodePlex. CodePlex was our channel for agile release of the guidance. Once we baked the guidance, we ported it to MSDN. For some customers, MSDN is a trusted source, so being on MSDN is important. Additionally, MSDN provides some additional hooks and channels.

You can download the patterns & practices Performance Testing Guidance for Web Applications from CodePlex.

Wednesday, October 31, 2007

Now on MSDN: patterns & practices Team Development with Visual Studio Team Foundation Server guide

You can now find our patterns & practices Team Development with Visual Studio Team Foundation Server guide on MSDN in HTML. It's the same guidance we hosted on CodePlex. CodePlex was our channel for agile release. Once we baked the guidance, we ported to MSDN. For some customers, MSDN is a trusted source, so being on MSDN is important. Additionally, MSDN provides some additional hooks and channels.

You can still download the Team Development with Visual Studio Team Foundation Server Guide from CodePlex.


Wednesday, August 29, 2007

patterns & practices Performance Testing Guidance for Web Applications now available!!

Today we have released the final version of our patterns & practices Performance Testing Guidance for Web Applications. This guide provides an end-to-end approach for implementing performance testing. Whether you're new to performance testing or looking for ways to improve your current performance-testing approach, you will gain insights that you can tailor to your specific scenarios. The main purpose of the guide is to be a relatively stable backdrop to capture, consolidate and share a methodology for performance testing. Even though the topics addressed apply to other types of applications, we focused on explaining from a Web application perspective to maintain consistency and to be relevant to the majority of our anticipated readers.

Purpose of the guide
  • Consolidate real-world lessons learned around performance testing.
  • Present a roadmap for end-to-end performance testing.
  • Narrow the gap between state of the art and state of the practice.
Key Learnings from the Guide
  • The core activities of performance testing.
  • Values and benefits associated with each type of performance testing.
  • How to map performance testing to agile
  • How to map performance testing to CMMI
  • How to identify and capture performance requirements and testing objectives based on the perspectives of system users, business owners of the system, and the project team, in addition to compliance expectations and technological considerations.
  • How to apply principles of effective reporting to performance test data.
  • How to construct realistic workload models for Web applications based on expectations, documentation, observation, log files, and other data available prior to the release of the application to production.

Download the guide.
Read the guide online.

Please provide feedback on the guide, so we can improve on any issues missed.


Friday, August 24, 2007

Presentation Blues - Some Insights

Recently we have been working on "Performance Testing Guide", we did a presentation today on that topic. The presentation turned out to be less interactive then what we had expected. That got me thinking, what might have been the reason? and what could we have done different, to make it as successful as some of our other presentations?

There might have been number of reasons, but the primary reasons are that, either the audience was overwhelmed with the information we presented, which I like to think was the case, or may be we did not had the right agenda and audience thought they were betrayed.

The more I thought the more I realized that a successful presentation was cooperative function, everyone has to pitch-in to make it successful. A presenter needs to have all the skills and tools, but that alone does not guarantee the success. So here is my breakdown of cooperative function.
  • As a presenter, understand the target audience - set up an agreed agenda for what exactly they are looking for.
  • As a presenter, if you don't fit the bill, deny the opportunity.
  • As a organizer of presentation, open a dialog at appropriate juncture, because audience might take time to open up, this will encourage audience to participate, and also comfort and encourage the presenter.
  • As audience, if a presentation is not addressing your expectation, ask the right questions to get what you are looking for, after all you have invested your precious time here.
If we follow this simple mantra, I am sure everybody's time will be well invested.


Thursday, May 24, 2007

Team Development with TFS Guide - Beta 1 is Available

Wondering where I have been hiding all these days? Well for last couple of months I have been working with our patterns & practices team on Team Development with Team Foundation Server Guide. Today we released our Beta 1 for this guide. This is our guide to help show you how to make the most of Team Foundation Server. It's a distillation of many lessons learned. It's a collaborative effort among product team members, field, industry experts, MVPs, and customers.

Even though I have already contributed to articles on MSDN for Whidbey Security, but this is my first contribution towards a complete book and I am pretty excited about it. The main reason being its about Team Software Development which itself is an exciting topic.

If you are using Visual Studio Team System, I would urge you to read our guide and provide feedback to make it even better and be part of this exciting journey. You can download our beta 1 version of the guide from the following location:


Saturday, April 21, 2007

To Branch Or Not to Branch

The other day I was working on a guidance document for branching strategy in Team Foundation Server. When we looked at some of the customer references, we realized that a fantastic feature like branching is misused more than often. Talking to number of customers we realized some or the other time Configuration Managers and Developers come face to face with the dilemma, To Branch or not to branch?

The answer to this question is, you should not branch!! For many simple scenarios, you don't need to branch and labeling your builds is sufficient. Because with branching merging comes into the picture, the complexity of branching increases the pain of merging exponentially. Said that, you should branch only when you have to isolate parallel development efforts. Here are few common scenarios which gives insight as to when and how you should branch.
  • If you are working on one release at a time, then you just don't need to branch, just work from your main trunk.
  • If you want parallel development while you prepare for intermediate release and need to stabilize the release build, then you need to branch the release source code. Do testing / bug fixing on the release branch and parallel development on the main trunk. Once the release is done, you might / or might not want to merge the bug fixes to the main trunk.
  • If you have to make a patch or hotfix on an old release with parallel development for a new release, then, you branch the old release. Do testing / bug fixing on the patch / hotfix release and parallel development on the main trunk. Once the patch or hotfix is done, you might or might not want to merge the bug fixes to the main trunk
  • If you are having regular problems with broken builds, then a create development branch to isolate parallel development efforts. Merge the development regularly with the main trunk, which can be used for stabilized build.
  • If you have features which can be worked in parallel, but might cause stability among each other, then branch the main trunk for each feature development. Merge the feature branches regularly into the main branch and reverse merge for features to share code. The main branch is used for stabilized build.
These are the very basic scenarios, and depending upon your team you can have combination of more than one scenarios. Thumb of rule to follow is avoid branching, and branch only when you have to do parallel development.

There is a good document - Explained: Branching in Team Foundation Server, which gives insight on the branching strategy.

So no more, To branch or not to branch dilemma.


Thursday, April 12, 2007

Who wants to be an effective leader?

Every individual dreams to be a leader in their own fields, but not all of them end up being a leader. Its not the opportunities but rather the effectiveness that make individual fail as a leader. There are very few people who are natural leaders, most of them have to learn how to be an effective leader. So what's the mantra for being an effective leader.

No points for learning the hard way if you can leverage other's experience. My colleague Jason Taylor has spent the last 10 years leading teams of software developers, testers, and ethical hackers on a wide variety of projects. He has posted his techniques of being an effective leader. He believes following are the traits of an effective leader.
  • Self Awareness. You are aware of your impact on others. You are aware of your own weaknesses and work toward mitigating them.
  • Self Regulation. You think before you act. You consistently act out of your value system. The people around you know what to expect from you.
  • Empathy. You are willing to trust and eager to empower. You are interested in listening and understanding other’s experiences.
  • Social Skills. You are able to connect with others and communicate well.
  • Motivation. You have a passion to lead, you desire to excel, and you actively want the best for your team and yourself.
You can see his post here: How To Be an Effective Leader

~ Later

Tuesday, April 10, 2007

Are you lucky?

Almost all my friends complain / compliment that I am lucky!! This got me thinking, is there anything called luck? Why would someone be lucky or unlucky? How do you decide to become lucky? How can you avoid being unlucky?

The more I analyzed the more I believed, you being lucky is decided by the collective decisions you have taken over time. If you can learn to make timely and well-considered decisions, then you can often lead to well-deserved success or simply put just get lucky. However, if you make poor decisions, you risks failure.

So it all boils down to good decision making. Here are some steps to help you making good decision.

Identify the Problem Area - You need to first clearly identify the problem at hand, it could be incorporating change request in the project or which cell phone you should buy.

Collect Information - Collect as much information as possible for given problem, the information gathered should give you insights about possible causes and possible solutions.

Validate the Information - Ensure that the information gathered come from trustworthy sources and is as accurate as possible.

Brain Storm for Solutions - Come up with all the possible valid solutions, while doing so don't merit the solutions, just list them.

Evaluate Solutions - Write down the solutions with pros and cons for each of them. Narrow down to the option which best addresses the problem, the deciding factors should be the cost, benefits and consequences.

Bounce Off Others - Once you have reached a decision, no harm in bouncing off others, learning from others experience is quickest. There is always a chance that they might throw a light on some of the consequences which you might have missed.

Important tips
  • Avoid snap decisions.
  • Move fast on the reversible ones and slowly on the non-reversible.
  • Do your decision making on paper.
  • Make notes and keep your ideas visible so you can consider all the relevant information in making this decision.
This might seem simple steps and should be integral part of any decision making, but believe me I have seen people not doing it for lots of important decisions and end up believing they were a little unlucky.

So hope now you know how I get lucky!!


Thursday, April 5, 2007

Guidance Explorer Revisited - Part 4

In my previous posts on Guidance Explorer Part 1 and Part 2, I discussed about features in GE for guidance Consumption, in Part 3 I discussed about Creation of the guidance. In this post I am going to talk about GE features enabling Distribution of guidance.

The three main categories of guidance distribution are Peers, Teams and Organization.

Peers - Guidance Explorer allows you to share individual guidance items or collections of guidance in a variety of formats
  • XML Formats - GE allows you to Export individual or collection of items in XML format, which can be imported by other users in their instance of GE.
  • HTML Format - GE allows you to Save individual or collection of items in HTML format, which you can share with others not using Guidance Explorer.
  • Word Doc - GE allows you to save individual or collection of items in Word doc format which you can share and can be printed and used offline
Teams - Guidance Explorer allows you to share your guidance with other teams in different ways.
  • Views - You can export a particular view as a library, which will include all the guidance items referenced by the view.
  • Folders - You can export a folder as a library, which will include all the guidance items from the views and folder structure within the folder.
  • Library - You can export your team specific library, which will include all the guidance items within the library.
Other teams can import the exported library in their instance of GE.

Organization - Organizations can share libraries by publishing them to a UNC or HTTP location so that team members can subscribe to them. Once subscribed the Guidance Explorer user, if connected to the network, will always see up to date content for that library. When offline, the user can view the version of the library cached on the local file system.

With this post, I have covered all the major areas of GE. Hope this has been helpful and inspires you to start using GE and leverage all its cool features!!


Wednesday, April 4, 2007

Guidance Explorer Revisited - Part 3

In my previous posts on Guidance Explorer Part 1 and Part 2, I discussed about features in GE for guidance Consumption. In this post I am going to talk about GE features enabling Creation of consistent high quality guidance. GE allows users to author new guidance items or modify existing items.

Following features in GE enables the Creation of guidance.

Built in Guidance Types - GE by default provides number of built in guidance types like Checklists Items, Code Examples, Explained, FAQ, Guidelines, How Tos, Patterns etc. They allow you to pick guidance type most suitable for your needs. Guidance Types encourage authors to write fine grained guidance items. For example one Guideline at a time vs. creating a monolithic document that covers all Guidelines for an area of concern.

Templates - GE by default provides Templates for all the default built in guidance types. The templates allows you to write consistent guidance.

Test Cases - With each Template GE provides set of test cases targeted to various sections of the template. The test cases ensures that guidance modules you create meet optimum quality.

Custom Guidance Types - GE also allows you to create new guidance types. To create a new guidance type the you have to provide an icon that will represent the guidance type in the tree, a template that authors can use to create the guidance type and an example that authors can use to see the guidance type in action.

My Library - Its a node in the GE, which is your workspace to create guidance, you can add any number of libraries you want and create guidance items in the specific library. You can modify items from a read only library like patterns & practices Library and save them to you library.

Hope this inspires you to create the guidance which you have been procrastinating forever. Happy authoring!!


Monday, April 2, 2007

Guidance Explorer Revisited - Part 2

There are two aspects to guidance Consumptions, Discovery and Composition. I have talked about GE features supporting guidance discovery in my previous post. In this post I am going to talk about GE features enabling Composition i.e. organization of the guidance.

Following features in GE enables the composition of guidance.

Views - Views are a by-reference view of guidance items within a single library or across multiple libraries. My Views node in the GE is your workspace to organize guidance. You can create views and drag and drop relevant guidance from guidance list across libraries.

Search Views - A search view is an extension of normal views. While still a by-reference collection of guidance items, the items are selected by a query rather than by manual selection. For instance a search view could be created to select Checklist Items for a performance code review on a .NET 2.0 application.The benefit of a search view is that it will update with new items that match the query once they become available.

You can create complex tree structure of views, search views and folders to organize the guidance in a way that makes sense from your project perspective. For example you can compose and use a discrete set of guidelines and checklists that match to the tasks you are performing on a daily basis


Guidance Explorer Revisited - Part 1

One of the exciting projects on which I have worked in recent times is Guidance Explorer. It is a great tool that enables Consumption, Creation, and Distribution of development guidance. I believe its a very useful but underrated tool, hence thought it might be a good idea to run a few posts in an attempt to bring forth the real power of the tool.

In this post I am going to talk about GE features enabling consumption of guidance. There are two aspects to guidance consumption, Discovery and Composition. First you need to discover the relevant guidance and then organize the guidance in a way that makes sense from your project perspective. GE helps you with both these activities.

Following features in GE improves the discovery of guidance.

patterns & practices Library - GE by default comes with a subscription to a online patterns & practices library, which is a central store of modular, trustworthy, quality, comprehensive development guidance. This library is updated by p&p folks on regular basis. So you have a single place to look for required guidance rather than hunting all over the Internet.

Metadata attributes
- Each guidance module in the Guidance Library has following set of metadata attributes with it
  • Rule Type – Describes the impact of this item (e.g. Design, Implementation, Deployment)
  • Technology – Describes a specific technology and version this item applies to (e.g. ASP.NET 2.0)
  • Topic – Describes the major area of concern this item addresses (e.g. Security, Performance, Reliability)
  • Category – Describe a secondary categorization that can be used to organize the item beyond topic (e.g. Caching, Input/Data Validation)
  • Authors - List all the major contributors to the item
  • Status – Describes stage of completion (e.g. Beta, Release)
  • Priority – Describes relative importance of this item (e.g. 1, 2, 3)
These attributes are displayed in the guidance list view along with the title of each guidance module and can be used for sorting, filtering or searching the guidance list. Having a rich set of metadata further enhances the discoverability of required and relevant guidance.

Default Views - patterns & practices provides default type views of the guidance available for example Guidelines, Mini How Tos, Checklist items etc. They help in narrowing down the search by specific types.

You can download the Guidance Explorer at the following location

You can download latest source code for Guidance Explorer, it consists of source code for Guidance Explorer client and online store, on which patterns and practices library runs.


Sunday, March 25, 2007

Knowledge Vs Techniques

I always argue with Rohit Sharma, one of my best friends, at times just for the heck of it and at times just to make him see the other side of the story. The topic of argument is anything from United Nations role or lack of it in world politics, India's awful performance in Cricket World Cup 2007, to, where we are going to lunch on weekends.

Few days back I had an interesting discussion with him, please note a DISCUSSION and NOT an argument, guess a good change. The topic of discussion was why some people are successful and others not so much. Even though they might be equally smart, believe me knowing smart people is not easy, even if you are from India or working for technology company!!

The discussion took lots of twist and turns and some tangents (as usual). The conclusion of the discussion was, the differentiating factor between successful people and not so much was the techniques people use rather than the knowledge they possess.

The main problem is we are keen on accumulating knowledge, which has possibility of being obsolete over time, but we rarely work on improving our techniques. This is applicable in whatever domain you might be working. The techniques are acquired over years unconsciously, through your schooling, college or your first job when dealing with different issues. We never consciously try and improve our techniques on the other hand we are totally focused on accumulating knowledge.

Sure you need knowledge but to be really successful you need to refine your techniques along the way. In today's competitive world improving your techniques in addition to good knowledge can take you places. I am analyzing how I can improve my techniques, what about you?


Visual Studio Team System Guidance

There is lot of good product documentation available for Visual Studio Team System and Team Foundation Server, but very little contextual guidance. Whatever little guidance is available, its dispersed over the net. There is no single source of comprehensive trustworthy quality guidance, which is easy to consume.

I am really excited to share that, in an attempt to fill up this void, I have teamed up with J. D. Meier, Alex Mackman and Jason Taylor on Visual Studio Team System Guidance project. Being a small team, we are planning to go by "divide and rule" mantra. So we are focusing one area at a time.

Last week we focused on Source Control and came up with some good Practices, How Tos , Explained and Q&A. Additionally we are creating Video Based Guidance, which are short, focused videos for performning a task or learning a concept.

We have published these guidance on . You are most welcome to provide feedback on these guidance and be part of an exciting journey!!


Sunday, March 18, 2007

Performance Testing Guidance

Currently I am working on Performance Testing Guidance Project. Last week we did a major sweep through our existing performance testing guidance modules. We updated the existing modules with some key fixes and incorporated feedback from internal and external reviewers. You can go through the Completed Modules List and see all the available performance testing modules.

This week we have added following new How to modules.

  • How To : Consolidate Various Types of Performance Requirements and Testing Objectives
  • How To : Coordinate Performance Testing with an Iteration-Based Process
  • How To : Evaluate Systems to Improve Performance Testing Effectiveness
  • How To : Model Application Usage without Empirical Data
  • How To : Quantify End-User Response Time Goals
  • How To : Use Data Binding in Load Tests in Microsoft Visual Studio Team System
  • Friday, March 9, 2007

    Lunch at Piecora's Pizza

    Since the time I started working with JD, we have made a point to lunch at Piecora's Pizza on Fridays. Well of course we don't make it all the time, but whenever we do, we are not only chewing on our garlic bread and mouth watering pizza, but grinding our gray cells as well. We not only reflect on what we achieved through the week, but also do some soul searching on improving ourselves, do some technical discussions etc. It's one thing I always look forward to, now I know the real meaning of TGIF!

    Today was one of those days, as happened, between my chicken + jalapeno pizza bites, I was complaining about not being able to improve on my soft skills especially my networking skills. In response JD gave me insights about his "30 days sprint" which he has applied for his 30 days of living foods

    I liked the concept, 30 days of commitment for improving an area, be it your soft skills, day job skills or for that matter even blogging!! Things you have been postponing or starting and stopping in fits, qualifies for the "30 days sprint". The basic idea is choose a area / focus you really want to improve and commit to work on it for 30 days. Sounds simple, isn't it!!

    The reasons why it works, you are not committing to longer time duration and hence its easy to accept (the hard part) and implement. At the same time its long enough time, to use different techniques and methods to work on the focus / area to really make the difference. You may not be 100% satisfied with what you achieve in those 30 days nonetheless you ought to walk away wiser and confident with your achievements.

    Inspired by the discussion, I have already started my "30 days sprint", you will know the focus area when you see "Prashant V2.0" after 30 days.


    Thursday, March 8, 2007

    Finally I jumped on the blog wagon!!

    I had been planning to start blogging for so long, but did not for some silly reasons. After lots of pushing from J.D. Meier finally I have decided to jump on the blog wagon!!

    JD and I have been working on various projects for patterns & practices for last 2 years. The most successful of them have been .NET 2.0 security guidance - which includes .NET security related guides and books available on MSDN together with modular content of various types including scenarios and solutions, guidelines, explained, checklists, and How Tos.

    We also worked together on Guidance Explorer - a tool that enables discovery, composition and consumption of high quality development guidance.

    These days we are working on Performance Testing Guidance - The purpose of this project is to build some insightful and practical guidance around doing performance testing and using Visual Studio 2005. It's a collaborative effort between industry experts, Microsoft ACE, patterns & practices, Premier, and VSTS team members.

    We have just started with VSTS 2005 Guidance - The purpose of this project is to build some insightful and practical guidance around using Microsoft Visual Studio Team System. It's a collaborative effort between patterns & practices, Team System team members, and industry experts.

    As we make our way through Perf Testing and VSTS 2005 Guidance, I will blog about our learning's.

    Once again thanks JD for making me blog, I am already enjoying it!!!