Matt, "my dev," on DotNetRocks!

Back in my power toy days, Matt Manela was a developer intern on our team, which you might remember from this post about writing a custom Visual Studio editor.  Well, he came back full time last fall, and was just recently featured on .NET Rocks about MSDN Code Gallery and his experiences being an intern.

But more importantly, I want to thank Matt for all his help and support in putting together a recent technical training for non-engineers within the company.  We both share a similar interest in translating engineering concepts to non-engineers, and his help was invaluable.  I had been working on this talk every weekend for a month (CodePlex is day job, Tip of the Day is side project, this talk was my side-side-project).  But more importantly, I found out 15 minutes before the talk my dad was having open heart surgery (quadruple bypass), and he helped me keep focus before and especially after the talk, as i was flying home that night and was already stressed out.

Long story short, matt’s a great developer, and i always say he’s "wise beyond his years," so definitely check out Matt’s blog and his .NET Rocks talk!

Thanks again Matt.

Lessons Learned Going Open Source with the Power Toys – A Power Toy Story

On our one-year anniversary of our power toys release, I gave a Microsoft Engineering Excellence Talk on the lessons we learned the hard way “going open,” to motivate other teams to explore all the way they can embrace their communities, including sharing source code.  (yes, a broken leg didn’t slow me down at all.)

A Power Toy Story

Our charter is to develop after-market solutions for Visual Studio 2005 that either provide additional functionality or address adoption pain-points.  We based our selection criteria off of the top most-voted customer suggestions.  But why stop there? 

We have conversations around bug reports on Connect, how do I question on the Forums, and even have conversations around the specs we share.  But what could we learn about conversations at the source code level? 

Going open for the first time

We discovered with our 3 projects on the CodePlex Beta that releasing power toys was the easy part.  What we didn’t know was how to run a successful open source project.  For example, “how do you cost the code reviews from potential community contributions?”  and “where do community contributions come from?” 

Where we rocked

With 3 Program Managers, 2 Developers and 1 Tester (Software Design Engineer in Test), we delivered 10 power toy solutions, 2 of which were in the top 40 most-voted customer suggestions for Visual Studio 2005.  We used Scrum, allowing us to do multiple releases each month at various development phases. Additionally, we created the Pack Installer, allowing users to pick and choose which power toys they want to download.  Lastly, each team member has a blog, where we’ve shared what we’ve learned over the past year.

Personally, I’m a huge believer that you learn more from analyzing your failures, so I’ll share with you some very painful lessons that I learned the hard way, so you don’t have to.

Where I failed

The number one thing I would have done differently if I were to do it all over again is to create a single Power Toys for Visual Studio CodePlex project and fit as many power toys in there as possible.  I was too focused on building a successful open source project around the individual power toys, instead of thinking “how can I build the community around a power toy collection?” 

I focused solely on providing solutions, rather than collaborating with the community on incubation-style projects.   Success could have looked like a customer saying, “hey, that power toy was my idea!”

Lastly, I didn’t have a solid story for the Microsoft Downloads Center versus CodePlex.  In retrospect, I would have tried having the Download Center point people to the CodePlex for discoverability when searching, unless user feedback suggested having the Microsoft releases available additionally on the Download Center.

What is OSS?

At this point in the power toy story, I attended James Howison’s talk at OSCON 06. I put together a presentation to the power toy team on the lessons I learned from OSCON, and had Port 25 tape the conversation. Yes, you can actually watch a Microsoft team discuss how to do open source.

Tips going open

The decision to go open must be action-oriented.  You cannot just throw code over the wall and hope for the best.  “If you build it, they will come,”  is just a movie quote.  =)

Thus, decision is all based on motivations.  One common example is to provide additional extensibility points.  Think of reversing the traditional “platform play” (instead of the core being open and the add-ons being closed, have the core be closed and the add-ons be open) to explore all the ways you can collaborate on top of this extensibility layer.

Our power toys with the most community-code contributions were those that we partnered with community members that had a similar need.  For example, MSDN Forums moderators always want to keep track of what was going on.  So Joe spent roughly half a day on a Forums Moderator Toolkit prototype that we released on CodePlex.  And this tool had our most contributions.

Some CodePlex getting-started tips

When you go open, there are a few absolute priority-one must-haves:

  • When users download your sources, they must always just build.  Always build.  Always. 
  • Make sure to provide crystal clear build instructions.  You only get one chance to make a first impression.
  • Always provide a getting started guide on how to use the project.  Screencasts are ideal for this.

And lastly, the project driver / project owner / benevolent dictator should feel free to reject check-ins that are not in scope or go against the coding guidelines, as explored in detail in the lessons learned from OSCON.

Happy CodePlex Community Tips

  • Establish contribution guidelines early
  • Once open, always open is a fundamental rule of OSS.  Avoid internal conversations. 
  • On the same note, conversations must be conducted as close to the code as possible.  When we started, we tried to have a power toy discussion board on the MSDN Forums.  The result was two login systems and a hodge-podge of Q&A across various power toys.  When I got back from OSCON, I manually ported all the Q&A to their individual CodePlex discussion boards.  And this goes back to the, if we just had a single Power Toy codeplex project…
  • Release early, release often is yet another rule of OSS.  Whenever we get a contribution, we create a new minor release.  And now that we release at beta, instead at 1.0, helps us hold true to this release-often rule.
  • Provide ways for the community to contribute to upcoming releases by listing out the needed bug fixes or feature requests.
  • Lastly, something else I learned from James Howison’s talk is that “Ship” is a very Microsoft term, which has its own connotations, implying “supported proprietary software.”  He strongly recommended that we “release” our OSS project, and not “ship” them.

Testing an OSS project

One of the most significant contributions we’ve made is sharing our best practices for software testing.  Below is a “cliff note” version:

  • When we go open, we open everything, from specs, to design docs, to test plans, and test suites.  
  • We use OSS tools, like Nunit and WiX, which go nicely alongside the free Visual Studio Express Versions.
  • When we go open at beta, everyone on the team does a bug bash for baseline functionality. 
  • We also ensure we hit 80% code coverage with our test suites. 
  • We log all known bugs as work items on CodePlex when we go open at beta.

And lastly, our single tester on the team John, who writes all of our automated tests and the automation test infrastructure itself, is the mastermind behind this testing content. He blogs about Testing OSS @ MSFT, in his two articles:

In fact, several of his blog posts were picked up by Mary Jo Foley, as “Just how closely is Microsoft studying the open-source playbook?”  Sweet.

And now… FY08 here we come!!

Should I create a single Power Toys for Visual Studio CodePlex project?

As I prep for my EE talk, I find myself wondering what I would have done differently a year ago.  Looking at the huge success of the Ajax Control Toolkit, I wonder if I should have had one “Power Toys for Visual Studio” project on CodePlex, where all the power toys (as possible) fit into the collection.  Then, I could have opened up both the individual power toys and the overall collection itself up for contributions.

The thinking last year was to build the community around the individual power toys.  Well after we had released our first wave, I started thinking about building the overall community as a collection of power toys.  Shawn’s feedback (who runs the toolkit) to me has always been “where’s your critical mass?”  I thought I could build the community and the critical mass on the Power Toys Homepage as an eagle eye onto CodePlex, but maybe I was wrong or didn’t try hard enough.

Which brings us to the title of this blog entry.  We’ve just shipped Orcas Beta 1.  So, here I am again, looking at the lessons learned from the Whidbey Power Toys, trying to plan ahead for Orcas.

Question for the Power Toy Community

If we were to combine all of these power toys, what buckets should they fall into?  Or should we leave well enough alone.

My knee-jerk reaction was to bucket based on which Visual Studio version they target.  Then I started realizing this should be a job for the pack installer to sort it all out.  And, tools are going to grow organically on their own, so it would defeat the entire purpose of codeplex to port these tools to a new codeplex project based on VS versioning (not that we would do this intentionally, but if I separated based on versioning, I would be “retrospectively” doing this, if that makes sense.)

Something else to call out is that the baseline commonality between all these tools (besides us writing them) is that they were picked and implemented based on customer suggestions. In other words, these are all after-market solutions for Visual Studio 2005.

Here are the options I’m considering:

Do nothing. Our current set of power toys are scattered across technologies, including what they target (MSBuild, TFS, VS IDE, ASP.NET, etc) and how they are built (stand-alone exes, add-ins, packages). The only way I could bucket all of them together is as a “Power Toy Solutions for Visual Studio 2005.”

Throw them all together into a single “Power Toy Solutions for Visual Studio 2005” Bucket, including the VS 2003 power toys migrated from GotDotNet.  Each power toy will have its own release in the CodePlex project.  We’ll utilize the pack installer as the primary means for downloading the power toys. 

Bucket based on targeted technology. All MSBuild open source power toys go into a MSBuild CodePlex Project.  All TFS open source power toys go into their own TFS bucket, and so forth.  Even if we don’t have enough power toys right now for this, consider it planning for any potential Orcas power toys. Then if we need to port a power toy to Orcas, the codebase stays within the same overall codeplex project.

Bucket only the ones that make sense to bucket – have all the power toys that target the VS IDE together in one bucket, and leave the rest as is. For example, we would have Breakpoint Manager, Resource Refactoring, VSCmdShell, and MSBee. Maybe even Managed Stack Explorer.

After having thought about this for weeks now, I favor option #4.  It builds a community around the technology, and allows these power toys to get updated to Orcas as needed. And it also allows for us to leave well enough alone.

Combined Power Toy Collection Mockup

Prototype Power Toy Homepage showing each Power Toy Image and Description

CodePlex Project Design

Homepage

  • Represents a quick overview of each project
  • Includes all the other content, like download, building, running, etc here
  • Includes a “Incubation Idea Wiki” based off of work items where people can vote, and discussion boards where people can discuss

Discussions (same model for work item tracking)

  • Each power toy represented in the collection will have its own discussion board. Only one discussion board per project
  • There’s a general discussion board for things not related to the design or usage of a power toy

Releases

  • Pack Installer is used as the download mechanism for getting all power toys, in lieu of a zip or global MSI
  • Each release will be available separately as its own release in the release tab

Source Code

  • We’ll have two branches – Incubation and Release. All projects start in incubation and when they hit “a certain level of quality”, we’ll branch to release.
  • All power toys will use a single settings.targets file for including any test and build tools.
  • We’ll merge back to incubation if someone wishes to experiment with an existing power toys as a new project. My current thinking is that this will be rare, as development should continue in the Release branch.

What to do about Orcas Power Toys?

It’s a tough question, but really, should it be? Given what I’ve learned in the past, what’s my recommendation to teams moving forward? Honestly, there isn’t a simple answer. In my perfect world, I would want each product group to have its own set of power toys that they build and allow for customers to add tools to the collection (just like the Ajax Control Toolkit model). Our team would contribute to these projects, rather than creating projects ourselves. Additionally, if a product group had a really cool idea, like a sunset technology or a toolkit collection, they would take it to the open separately from the existing power toys. But that’s just my current thinking and need to shop this around internally to get feedback.

EE Talk May 15: Lessons Learned Going Open Source with the Power Toys

Just wanted to share with you some of the internal-facing work I’ve been doing as of late.  Over the past 6 months, I’ve given a series of 3 divisional presentations on giving out Microsoft source code, including

  • “How to release code to the community”
  • “IP Basics” – I had everyone draw a picture of a dog to illustrate copyright. my little claim to fame =)
  • "Embracing Open Source on CodePlex"

Now, it’s time to share to a larger audience.  On May 15, coincidentally the 1-year anniversary of the power toys initial release,  I will give an Engineering Excellence Talk (read: Microsoft’s internal “come share best practices” talk circuit) called "Lessons Learned Going Open Source with the Power Toys" (internal link).  Have no fear, I will share these lessons learned here on my blog. 

Hope to see the microsofties who read my blog there.  This will be the first time i’ve given a talk with a broken leg. 

Influencing the Microsoft culture one open source presentation at a time

The thing I love most about my job is being creative in how I’m trying to get an idea or message across, especially when it comes down to challenging the Microsoft culture.   So, it’s probably a safe bet that no one has ever seen a sign like this before on Redmond campus:

Embrace Open Source on CodePlex Weds at 1pm sign

view of sign from within the office

Yep, that’s my office.  Surprisingly, it wasn’t that difficult to write backwards, but the ‘s’ gave me trouble.  I knew i was spelling things right because people downstairs at lunch were mouthing the words, trying to figure out what i was writing.  =)

For you MSFT internals wondering if you can see the on-demand version, I’m on the Engineering Excellence Talk circuit for May 15 (ironically the 1 year anniversary of the power toys) called  “Lessons Learned Going Open with the Power Toys”.  So make sure to sign up when the next newsletter goes out…

And for those of you who attended, there’s nothing like having a fever (didn’t get sick until the night before – too late to postpone) while giving a presentation on embracing open source at Microsoft, hence the 3 bottles of water I shotgun down during the hour.  Now, the question I’m wondering is if I had fainted during the Q&A (yes, the white dots were getting quite annoying), would that have helped my cause or hindered it?

View original comments

What we’ve learned about testing open source projects

John, our only SDET (tester) on the team, has written a couple of blog entries on what we’ve learned (sometimes the hard way) about testing open source projects:

What’s different about testing open source projects?  (Part 1)

Recommendations for corporate teams developing Community Based Open Source projects (Part 2)

We hope you find this information useful.  Feedback and discussions are always more than welcomed.

Reintroducing MsaaVerify as an open source project on CodePlex

Prior to my retirement from accessibility (i’m still retired, btw), i wrote a testing tool for verifying the required MSAA properties needed for Assistive Technology devices, like screen readers, Braille displays, and so forth.  Working on the power toys for the past year has made me want to pick up the little guy again and try to finish all of the ideas i had started.  I’m a huge believer in leading by example, so i’ve been itching to start my own pet project on codeplex .  And of course, this little tool is a natural first choice. 

MsaaVerify Pet Project on CodePlex

Another motivation for reintroducing this tool stems from my overall community work.  I want to better understand community engagement.  It’s a part of a larger plan to understand the term community and everything that goes along with it.

Ways to Participate

Besides the obvious software development aspects of contributing code or bug reports, i could use some help with

  • What is the best way to represent pass / failure in the UI
  • How should I describe what changes need to be made to fix a failure

The more i work on this tool, the more i think that maybe a better home is in FXCop, but i want to get the proof of concept working first, then maybe port to FXCop.  Thoughts?

Current Release – MsaaVerify 1.1 Alpha

  • A rearchitectured baseline prototype with lots and lots of code clean-up
  • Verifies only push buttons and edit boxes
  • Verifies only one object at a time (and with the current design, if a child object is captures, e.g. a listview item, the parent object is the one that’s verified)
  • Updates to the UI from the version on GotDotNet

Future Releases – MsaaVerify 1.1 Beta

Once i have these things implemented, i’ll release a Beta version

  • Verification support for many more standard controls
  • Hopefully, updated UI for the verification results
  • Support for capturing a control based on tab order (needed to verify things like a text box’s name comes from the control that immediately precedes it in tab order)

And Further Out Future Releases

I’ve written a lightweight vision doc on the direction of the tool, some functionality i’d like to add to it, etc.

VS Extensibility, VS SDK, and Shared Source

James Lau is a Program Manager for the VS SDK.  He describes the near future of community projects and activities for the VS SDK, including Shared Source and Power Toys (my new 4 favorite words).

Check out his post and leave him some feedback.  I’ve been advising them on how to do Shared Source releases and use CodePlex.  And yes, we’ve been chatting with them about Pack Installer too.

Just the other day, Dr. Ex (from the VS SDK team) and I were discussing the necessary values needed to generate a Package Load Key.  I could still remember the test cases i used 5 years ago to test the thing.  (Techincally the first feature i ever tested was the /safemode switch, but PLKs came soon after.)  It’s funny the things you don’t forget.

My Interview with James Howison, speaker from OSCON

MichaelF from the Port 25 team had a great idea to have me do a follow-up podcast with James Howison, the speaker from OSCON 06 that i learned a tremendous amount from about OSS Communities, and apparently, how to build cathedrals, since that’s what my mom thinks i do now.   ::winks::

Link to: Sara Interviews James Howison

Direct link to podcast

I should mention that I really hope I can return the favor and help out James in some way.  It’s just in my nature to give back.   Of course, as of right now, i have no idea what i’ll be able to do, but i usually think of something.  I’m pretty good at that. ::grins::