Tuesday, December 02, 2008

The Jack Bauer of Bugs

(I wrote this in February 2008 as a proposed session for the Agile 2008 conference. The proposal was not accepted but I still find the theme compelling even though I am working on another project, Visual Studio Express.)

It was a proud moment when one of my Microsoft colleagues in our daily meeting nicknamed me, "The Jack Bauer of Bugs." Once again I had an elusive bug in my sights and everybody knew I would bring it to ground. This "24 Hours" presentation will image vividly the gamut of opportunities and challenges faced by an agile software engineer in the course of a day.

Popfly (Popfly.com) is the fun and easy way to build and share mashups, gadgets, and Web pages. It’s made up of online visual tools for building Web pages and mashups and a social network where you can host, share, rate, comment and even remix creations from other Popfly users. (end of marketing blurb and now you know what Popfly is if you didn't already :) )

We release an update to Popfly about once a month and as I'm writing this we are starting our 18th release cycle. In a recent article, "Mashups are breaking the mold at Microsoft," the New York Times said that the Popfly team "might be more at home in Silicon Valley than at Microsoft." Our team of about 20 was getting too unwieldy and so we just organized into 3 subteams. I'm focused on the core Popfly subteam. I can't tell you the theme of the release we are working on, but you can find out next month. :)

10AM. I engaged in an extended bout of customer-experience testing as I built a data / Virtual Earth mashup, Education Levels in India Now that we released data sources and arbitrary file uploading last month, I am able to create what I wanted. The finished result looks good. Our local representative of Pratham (the Indian NGO that provided the data) thinks we are going in the right direction. But the hoops and workarounds that I had to go through to get this to work would deter most of our customers. We are already working on some of the tough issues, like how to make debugging of complex data flows accessible to our non-technical target audience.

11AM. But our main internal test server is down. Huh? We fixed a bug with maxing out the SQL server connection pool a couple of weeks ago, but the same symptom is back. My colleague who built most of the SQL infrastructure says it happened between 10:05 and 10:23 AM. Netmon logs show a spike of traffic from Test Box 11 at 10:22 AM. Test Box 11 ran a ramping load test from 10:15 to 10:25. At 10:22 the tests started failing all over the place. Aha! The first of several planned improvements to our connections pooling have already gone in.

12 noon. Standup meeting. One of my two proposals for this release is Certified Projects. I want to create tools for Popfly customers to verify that their projects are runnable, tweakable, ripable, and embeddable. These tools will leverage the logic of our internal test automation. They will also dovetail with our initiative to create JavaScript unit tests that can run in the browser. Heads nod, project is on the list, give us more and let's see if this makes the final cut.

5PM (ok this isn't exactly "24"). Live Meeting and phone with one of our engineers in Shanghai. I start to explain my frustration with our 350 or so automated test cases that drive the browser to test Popfly functionality and guard against regressions. They do catch regressions but more often they just have to be updated frequently to keep up with feature changes. She volunteers to come up with a proposal to consolidate some test cases.

6PM. Check in on our engineer working on performance test automation. SQL Reporting Services looks promising with many templates that dovetail with Visual Studio Team Test - Load Test. However it is taking a long time to set up and today is our deadline for answering the question of whether performance regressed or improved in our latest round of search enhancements.

10PM. The search results come in. Used Excel rather than wait for Reporting Services. Looks like a 14% regression in Search Users, but the search transaction is still sub second. Do we need to pursue this further? Let's see in the morning.

2AM. Another engineer in Shanghai is trying to sort out test automation failure on VerifySignOutFromAllPages. Is it due to feature change on one page or known sign in issues that never showed up on the case before? Looks like some internal network issues are resulting in a new failure pattern.

9AM. The proposal from Shanghai to consolidate test cases looks promising, but I want to go much further: consolidate 350 detailed cases down into 12 end to end scenarios and push the detailed functionality testing down to the unit test level. Meeting at 10AM with our feature crew to hash this out.

In 24 hours I've slashed through bug hunting, customer-oriented testing, load testing, technical sleuthing, test tools for customers, scenario vs. unit testing, and performance testing.

Just another day in the life of an agile software engineer.

Labels:

Wednesday, May 07, 2008

Creating a Computer Game with My Granddaughter

As one of the software engineers building Popfly Game Creator (GC), I had the chance to sit down with my 4 year old granddaughter and create a computer game together. It was part of testing GC, but the results were a revelation to me. My granddaughters are 4 and 6 years old, and they both like playing on the computer but mouse operations are tricky for the younger one. I thought it might be possible to create a game that would appeal to her and be fairly easy to master. Little did I know that this would lead to two 1 ½ hour sessions with her on my lap while we designed the game together. I had to work quickly to keep her interest and to be inventive in response to her very specific design ideas. It was very engaging for both of us as we created the Rainbow Duckies game together. I realized that designing games with a child could be far more engaging for both of us than just playing them, and that together we could make games that were suitable for her skill level – something not true of most of the games available on the market.

I started the ball rolling with an idea for a game. This idea was inspired by the lovely rainbow background and the cute duckies that are built in to GC.


Intro Scene



I built this opening screen myself, showed it to my granddaughter, and read the question to her, "Big Duck and Little Duck are lost! Will you help them find their way back to their home at the end of the rainbow?" She responded with a firm committed “Yes.” I clicked the screen for her (operating the mouse is too difficult) and we moved on to the first scene.


Scene 1



At this point the 6 year old jumped in and played the scene several times. She immediately mastered it and asked, “Where is level 2?”

The younger girl took over the keyboard and carefully manipulated the arrow buttons to keep the ducks safe. She played the game 10 times, winning every time, and then got a bit distracted, let the ducks hit the mushroom, and lost the game. After that point she refused to play the game herself any more. Instead she insisted that I play several times while she watched. Then she went and got her toy ducks and started to play with them.

I learned a lot about motivation from this episode. She bought in to the premise of the game, was committed to keeping the ducks safe, enjoyed working on how to use the arrow keys, and enjoyed the game, until she lost. She didn’t like losing at all. I decided that there was no reason for this game to have winning or losing as the end of the game. There could simply be different consequences for different actions as shown in Scene 2. This proved to be a good choice for making the game motivational.


Scene 2



Instead of losing the game, the consequence of letting the duck eat the mushroom is that the duck is now sick. It becomes a challenge to help the duck get well instead of a feeling of having failed by losing the game. Again she bought into this premise and was eager to help the duck get well. Now she started to get her own ideas of what should happen next in the game, as shown in Scene 3.


Scene 3



We browsed through the backgrounds available for the next scene and the 4 year old was attracted by the beautiful sunset scene. When looking for characters for the scene to go with the duck, she gravitated to the butterfly. She said that Little Duck is afraid of the butterfly, and that the butterfly just wanted to get something to eat. The fruits and vegetables available in GC didn’t appeal, but cupcake frosting did. After laying out the scene together, I used GC to enable the butterfly to move, eat the frosting, and attract another butterfly. If Little Duck bumped into the butterfly then the scene just starts over, and if not then Little Duck moves along to the next scene.

My granddaughter’s idea for Scene 4 was night time.


Scene 4



She loved the Starry Sky in GC, but she insisted that the stars have to be pink not blue. It took a little ingenuity for me to figure out how to replace the colors in Starry Sky, but fortunately GC made it easy once I figured out a little trick. Little Duck also had to be pink instead of purple in this scene, and there should be a monster, but a nice monster. The monster should bring a bag of presents to Little Duck, but the best we could find was a garbage pail to carry the presents in. We just called it a pail. For presents, a big red heart and heart candy sprinkles seemed perfect. Finally I hooked up all of the movements and gift giving. My granddaughter worked quite a while on playing the scene before she eventually mastered how to have Monster Girl push the pail of presents to Little Duck.

Now it was time for Scene 5. The duckies are almost home!


Scene 5



At this point the 6 year old jumped in and said that when they get home, the house should back up and the whole family should appear. I won’t spoil the ending by showing Scene 5, but suffice it to say that when she played the game later, her contented happy sigh was priceless. The girls now vie for playing the game and giving demos. And the 4 year old and I are working on our next game, “I Know the Butterfly.” Stay tuned.

Monday, January 14, 2008

How to create a display block in Popfly just got a lot easier!

Check out Tim's blog.

Labels: , ,

Thursday, October 18, 2007

Popfly Beta is Here

I’ve worked for almost a year on Popfly, and today we announced our beta release. Invitations are no longer required – go to http://popfly.com/ and have a look!

Popfly excited me from the first time Paramesh Vaidyanathan showed it to me, because I could see how it makes the power of programming accessible to so many more people. My first task on Popfly was to make it work on a Mac. I’m happy to say that today it does work on Mac (except for a few cosmetic issues) mostly because of subsequent hard work of other software engineers on our team. I proved to myself that it works by publishing my blueberry pie recipe using Popfly’s nice web page editor which came from Office Live. Check out my recipe at: http://www.popfly.ms/users/RealHeartMozart/Blueberry%20Pie.


Popfly Web Editor on Mac OS 10 with Firefox 2


Now I’m responsible for testing of Popfly’s features, performance, and security. The main challenge is how to verify that we got everything right while also remaining agile and pushing out significant improvements every month. It constantly forces me out of my comfort zone because we want to take risks – exactly the right risks! I’m learning a much higher degree of trust in my teammates. Often when I’ve missed a meeting I hear later that someone expressed exactly the “test” point of view that I would have expressed.

Here are some highlights of my experience on Popfly:


  • It used to be there was a manual for the language you were programming in. That book became a dog-eared “bible” – like a friend because you knew it so well. Common Lisp by Guy Steele was such a book for me. I loved that book. Now the bible is the whole world. The essence of mashups that you can create with Popfly is pulling together a variety of web sites and other sources to create something of value to you.

  • The immediate Popfly team comes from four continents and there isn’t a given first language that a majority of the team speaks. Our team is a “mashup”!

  • As the oldest member of our team at 47, I find myself asking a lot of questions, like “what exactly IS Web 2.0?” “What is the object of the game in Halo?” Etc. etc. Somebody at my recent 25th college reunion recalled the old saying that “youth is wasted on the young.” I don’t know about that, but it sure is a blessing to grow and learn with this group of people.



I also have a lot of questions, like what will our customers want to do with Popfly? It’s thrilling to read the Popfly forums and see our customers trying to do all kinds of things. It’s a blessing to be able to work with them and our team to define where Popfly will go.

Wednesday, October 17, 2007

Watching the Web 2.0 Summit

I'm watching the Web 2.0 Summit on the Popfly kiosk from home: http://www.popfly.ms/Users/Team/Web2summit.small.

It's exciting to participate vicariously but I'd rather be there. :)

Labels:

Tuesday, October 16, 2007

I'm connecting my blog to Technorati.
Technorati Profile

Labels:

Thursday, October 19, 2006

Creating a Component Factory with Scorpus

I recently took some time to explore Scorpus. Scorpus is an asset repository intended to make software reuse easy. It is based on the Reusable Asset Specification standard from OMG. I have a vested interest in Scorpus because I'm a partner and member of the board of Canarys Automations Ltd.

Initially I spent about an hour with Scorpus beta 1.0. I was able to set up the portal and an assetifier. The portal is a web site where you can view and download the assets. The assetifier is a program that you use to create and update assets. I was able to create and publish an asset but there were so many bugs that I couldn't get very far exploring the features of Scorpus.

Then about a month ago Scorpus beta 1.1 was released. Many of the bugs were fixed and now I was really able to get into it. I wanted to create an asset that would be of pretty wide interest so that everyone could see the value of Scorpus and see how it is different from other approaches to software reuse. After playing a little bit with the four built-in assets, I struck out on my own. The results so far are shown below. Click on the image and make sure you are viewing it at 100% size in order to see it clearly.


First I tried the idea of a Java Component Franchise. I picked Java because I had just installed Java as a prerequisite for Scorpus and I wanted to see how difficult it would be to create and publish my first Java program, the ubiquitous "Hello World!" Java was easy as expected and I published my Java Component Franchise asset including the sample code for Hello World and how to learn Java and modify the component. However, I wasn't satisfied with the value of a Java Component Franchise. How would that idea showcase Scorpus?

After some thought and experimentation, I came up with the idea of a Java Component Factory. If you were an experienced Java Programmer and were interested in parlaying your skills into a self-sustaining business, then Scorpus might be the catalyst you were looking for. I kind of liked this idea but it seemed too limiting. Why only Java? Why only for experienced programmers? Scorpus accomodates components in any language. And I believed it should be possible even for non-programmers to build a component factory (my Ph.D. dissertation on Learning Computer Programming is another story).

This line of thought led to Component Factory. If you click More on Scorpus Portal you see the idea described as shown below.


(to be continued...)