Skip to content

The importance of trust in Agile teams

I came across an old post at On Agile concerning the importance of trust within Agile teams. You should read it in full (go ahead, I’ll wait).  Trust is such an important aspect of any relationship that without it, your relationships are being built on a foundation of sand and you will not get far.

Within your team, do you see the following characteristics:

  • When something goes wrong, the first question is “Who messed up?” rather than “How do we learn from this and stop it from happening again?”?
  • Is documentation created as a way to defend against the “Who messed up?” question being asked in the future?
  • Are individuals focused on ensuring they do not mess up rather than ensuring that the team’s commitments are being met?
  • Are individuals afraid to take action on bold ideas because they are too concerned about what will happen if the idea hits some roadbumps on the way to implementation?

Even if you are best buds with the members of your team, if the type of characteristics above are present, you do not have a sufficient level of trust to function as a team.  As a result, productivity is taking hit and you are probably focused on tasks that are more about process adherence rather than product improvement/innovation.

Do you find yourself in this type of gloomy situation?  While team members themselves can focus on avoiding “CYA” type of behavior, your managers can have the biggest positive impact on the situation.  Imagine if a team meeting is called and the key managers come in and say “Going forward, we do not care if mistakes occur.  However, we do care about you learning from your mistakes and improving.  In addition, we care about you meeting your commitments more than having the proper paper trail”.  Now imagine when the first mistake after this meeting occurs and managment follows through on their statements!  By establishing the fact that  continuous improvement is valued over the blame game, teams are now enabled to build a trusting environment for themselves.

A version of Muppets that my kids love

When I was growing up, The Muppets Show was required viewing. When I had children, I tried to get them to comprehend how great the Muppets were but they really did not like the old shows. In addition, getting them to watch a Muppets movie was worse than a trip to the dentist.

If you don’t already know, Muppets Studio has started a YouTube channel and the Bohemian Rhapsody cover is very popular.  However, there are two Beaker videos that have finally flipped the switch in my kids’ heads.  These two videos have exposed them to the genius that is Beaker/Muppets and all weekend they have been singing “meep meep meep…”.  Enjoy!

The part where the Monster is attacking Beaker in the following video has had all three of my kids bursting out in uncontrollable laughter.

Well why didn’t you say so?

I have been lobbying for a key addition to our product to allow us to optimize traffic that comes to our site via a very distinct channel.  To date, this  channel has shown an extremely dramatic increase in traffic to our site (year over year) – without us optimizing the experience for the user or having a distinct message for this channel.

Up until today, I had not gained much traction in getting the changes approved.  However, after I stated the opportunity as “we pay people to manage channel X.  This other channel that we do nothing with and serve a “hostile” user experience to accounts for 1.5 times the traffic of channel X.”, people took notice.   Once the opportunity was stated in a way that used easy to understand measurements, the initiative moved from the back burner to “how do we fix this?”.

This change in direction would not have been possible without a proper web analytics platform being in place.  However, even if you have the “best in class” tool in place, it means nothing if you do not actively research and leverage the data being delivered to you on an ongoing basis.

Governor’s Land 5K results

My daughter and I ran the Governor’s Land 5K on 11/21/09 (watch the virtual tour).  In the week leading up to the race I let her know that, for the first time, we were racing each other.  Previously, we would stay together and look to push each other.  This time, since she has never run competively, I wanted to see how she would react.  After an intial “oh no” from her, she spent the week getting jazzed up and even started to talk a little smack to me!

It was a beautiful day for the run.  My wife and middle daughter ran the 1 mile fun run first.  My middle daughter’s running has improved and she finished in 9 minutes.  As for the 5K, after a slow start from the back of the pack, my daughter and I overtook many people.  Near the end she started to pull away but I was able to overtake her in the last 50 meters.  I ended up beating her by 1 second.  This time next year she will probably kick my butt since she is starting to catch the running bug on top of the full blown case of volleyball fever she has come down with over the last year.

During the awards ceremony I did have one moment of anxiety.  In the 30-34 age group, the third place runner had a time of 30 minutes flat.  For a second I thought “Uh oh, they are going to call out my name and time in the 35-39 age group”.   This race is a course where you set your PR since it is so flat.  the majority of runners are pretty fast.  I finished in 24:09.  For some reason I was embarrassed by the slow time.  My wife was completely enjoying this moment of anxiety!  However, the other runners in my age group came through and the third place runner had a time of 21 minutes and change.

After this episode passed, I set my 2010 running goal – a sub 20 minute 5K.  This will serve two purposes.  One, it will get me somewhat close to where I was in terms of speed back in high school and college.  Two, if my daughter trains as well, it will position her to be a top-tier cross country runner as she moves into high school based on the times posted by the top tier female high school runners that ran this race.  We’ll see how it goes.  I do know that I would much rather train for speed over a short distance than grind through another marathon training regimen.

First experience teaching about meteorites in a classroom

On Friday I had the opportunity to teach a unit on meteorites to a 6th grade science class.  The class was wrapping up a unit on Earth and Space and through my daughter, the teacher was very interested in me bringing in meteorite samples to show the class.  I had no idea what to expect so I created a simple set of definitions and fun facts (listed below) and I chose some representative specimens from the stony, iron, and stony-iron groups:  a 350g SAU 001 end cut that is also shows a great fusion crust example, an etched Campo del Cielo slice as an example for a Widmanstatten pattern, and a very large Pallasovka pallasite slice as an example of a stony-iron.  In addition, as the proud owner of the facecitiously named “World’s ugliest Halloween Meteorite” lot, I also brought in a set of NWA Unclassified specimens from this lot in order to hand out to the kids.

The session lasted for 40 minutes and started pretty slow.  I started going down the one-sheeter I brought while also circulating the SAU 001 and Campo items to the kids for them to feel and look at.  Most could not believe that it had come from outer space.  A few sniffed the meteorites (which I never thought to do!) and said they smelled metallic/coppery.   As they looked at the fusion crust on the SAU 001, I was able to get them to understand that the amount of friction/heat involved when a meteoroid enters our atmosphere is large enough to start melting the specimen.

Once I brought out the large Pallasovka, questions started flying.  The children were engaged and started asking some great questions:

  1. How do people find meteorites?
    1. I explained how many meteorites are found in desert like conditions due to the distinct color differences between the meteorite and the surrounding area
  2. How big of an impact crater would each sample make?
    1. While I could not give exact numbers, I was able to explain that a meteorite would make an impacat crater that is bigger than the meteorite itself.
  3. Why is it called a Widmanstatten pattern?
    1. This was a good time to explain a perk of scientific discovery.  If you are first, you have a good shot to have the discovery named after you.
  4. How does the meteor move through the atmosphere?
    1. This was an interesting one.  I did not understand this one at first ut he was interested in how the fusion crust formed uniformly.  I explained how it most likely rotates while falling, allowing the fusion crust to be somewhat uniform.  This was an off the cuff answer but seemed to suffice.
  5. Are we able to track meteorites before they hit us?
    1. Even though this just happened, I said that they are able to do this for asteroids but that they can’t do it as well for meteorites yet due to the size differences.  In addition, I was able to explain the concept of distance from an astronomical point of view.  Specifically, if someone says that an asteroid is “close”, it is not the same as “my house is close to the school”.  It is more like “Mars is close to Earth”.
  6. The ambitious boys asked if the NWA Unclassified meteorites could be sold on eBay.
    1.  I told them that it is possible but their best bet was to get it classified.  After raised their hopes, I let them down by telling them that classification costs money – more than a 11 year old would have most likely.

Overall, I had a great time and hope I can do it again.  Here is the one sheeter I used to guide my discussion:

Some Definitions

meteoroid, meteor, meteorite: A small rock in space is called a meteoroid. As the meteoroid passes through our atmosphere and generates light, it is called a meteor (or a shooting star). Once the meteor hits the ground, it is called a meteorite.

Fusion Crust: When a meteoroid is entering our atmosphere at high rates of speed, it compresses the air in front of it, generating massive amounts of heat and light. As a result, the meteor starts to melt. Once the melting stops and the meteor starts to cool down, a thin glossy coating forms on the meteor. This is the fusion crust

Widmanstätten Pattern: patterns formed by iron – nickel crystals as they cooled over many years in space. Once a meteorite is etched with acid, you can see the pattern.

Oxidation: when a meteorite with iron in it is exposed to oxygen (like in our atmosphere), the iron will turn to rust due to the process of oxidation

Impact Crater: A depression formed by the high velocity impact of a smaller body into a larger one (think of the craters on the moon – they came from meteoroids!)

Some facts

  1. Meteorites contain the oldest known rocks in our solar system.
  2. The Chesapeake Bay was formed by an impact from an object from space (perhaps a meteorite or comet) over 35 million years ago. The Bay is an impact crater. It is the largest impact crater in the United States!
  3. Meteorites are named for the locale, region, or nearby town in which the “fall” occurred (like Campo del Cielo, Argentina or Pallasovka, Russia).

Using DbFit and Fit fixtures on the same FitNesse page

A situation has come up at work where I want to use DbFit to test some business logic that is stored in stored procedures.  This is part of our company’s overall effort to reduce technical debt and to get all parties (Product, QA, Dev) talking the same language about our product’s features.

DbFit provides a lightweight and quick way to test this logic.  One of the many benefits of DbFit is that, if you connect to the database in flow mode, DBFit will do transaction management for you.  The DbFit documentation states that when you are in flow mode, “the current transaction is automatically rolled back at the end of the page”.  The alternative to flow mode is standalone mode.  In standalone mode, you need to specify when you want to commit or rollback the transactions (using the DatabaseEnvironment fixture).  In both flow mode and standalone mode, the transaction automatically starts when you connect to the database.

As I was building my DbFit tests, I realized I needed to set up some test data beforehand in the database so that the stored procedure could operate on the test data.  In addition, I would need to delete this data when my test completed so that the test did not leave a footprint.  In my case, I needed to set up a full customer account.  To do this, about 16 tables need data inserted into them.  While I could add all the necessary sql statements to the DbFit test in order to add this data, my group and I had previously created Fit sequence fixtures that we use in other areas that take care of setting up and tearing down a test customer account.  These Setup/Teardown fixtures were already in use in the more “traditional” parts of our FitNesse test suite where the bulk of test pages have been created.

At this point, I am feeling pretty good.  I have a Fit fixture library that can be used to set up a full account and I have DbFit tests that can operate on the test data via the respective stored procedures under test.

However, using database aware Fit fixtures and DbFit fixtures on the same page opens up a slightly thorny issue.  The DbFit tests were originally created to connect in flow mode in order to take advantage of the built in transaction management.    The Fit sequence fixtures I used also created transactions.  As a result, it became very important for me to know what DbFit considers the “end of the page”.

Consider the following flow of my test.  In this example, each line also has a reference to what transaction the statements will run in.

MyAwesomeDbFitTest.SetUp
DBFit:  connect to database in flow mode (TRANSACTION 1)
DBFit: set up a small piece of test data  (TRANSACTION 1)
Fit Fixture:  set up full test customer  (TRANSACTION 2)

MyAwesomeDbFitTest

DbFit:  run queries, execute stored procs, other testing (TRANSACTION 1)

MyAwesomeDbFitTest.TearDown
Fit Fixture:  teardown the full test customer (TRANSACTION 3)

If DbFit considers the test page “the end”,  I am ok.  The DBFit transaction will be rolled back and will not collide with the statements running in Transaction 3 when the Fit fixture is looking to teardown the test account in the database.

However, what I found is that DbFit considers the TearDown page (whether it is a TearDown page for just that page or a TearDown page at the Suite level that is used for each test) as part of the test and thus my overall test started to create blocks in the DB.  Specifically, TRANSACTION 1 was blocking TRANSACTION 3.

As I wondered how long it would be before the DBA police came to my door and revoked my access rights due to the blocks my tests were creating (it was all in a DEV environment, I swear!), I started to think about what I could do to solve this issue.  I thought of two options:

1.  Port the Fit Fixture setup/teardown code to sql statements that could be executed as DbFit fixtures.  This was quickly discarded due the fact that I am not keen on maintaining two copies of code that do essentially the same thing.

2.  Drop into standalone mode for the DbFit tests so I can maintain a tighter level of control as to when the transactions rollback/commit.

After experimenting with option 2, I found that the following test flow will allow for the transactions to commit/rollback as needed and not create any blocks.

MyMoreAwesomeDbFitTest.SetUp
DBFit:  connect to database in standalone mode (TRANSACTION 1)
DBFit: set up a small piece of test data  (TRANSACTION 1)
Fit Sequence Fixture:  set up full test customer  (TRANSACTION 2)

MyMoreAwesomeDbFitTest
DbFit:  run queries, execute stored procs, other testing (TRANSACTION 1)

MyMoreAwesomeDbFitTest.TearDown
DbFit:  issue rollback statment via the DatabaseEnvironment fixture (TRANSACTION 1)
Fit Sequence Fixture:  teardown the full test customer (TRANSACTION 3)

After making the necessary tweaks, the tests ran fine.  However, I still have concerns about the maintainability of this approach.  In order  for other developers to leverage this pattern, they need to understand when the transactions are being created and they need to explicitly manage the transactions.  This is not optimal.  Ideally, a FitNesse page will contain only one type of database aware fixtures, DbFit or homegrown Fit fixtures.  By doing this, transaction management can be pushed to the background and the developer can focus on test writing.

In an ideal world of my own making, another DbFit fixture would be available called QueryUsingFile (this is in addition to the free beer that would be present in this ideal world as well).  It would allow me to specify a path to a file and would execute the SQL statements within the file.  By doing this, I could organize a set of scripts to be used by any DbFit test and I could keep the test page code to a minimum.  DbFit already has a ConnectUsingFile option so it  seems a QueryUsingFile fixture would not be a big leap.

If I get a chance, I’ll post a sanitized version of the DbFit test that illustrates the pattern above.

Interesting pics of new NWA 5437 meteorite

NWA 5437 is the provisional number of the first meteorite I have ever gotten classified.  It is classified as a LL3.5 ordinary chondrite.
The LL in the classification stands for low-iron and low metal.  These type of meteorites typically have fairly large chondrules.  This type of classification is rare and the meteorite also has a low total known weight, adding to the overall rareness of this fall.

While cutting a set of pieces today, I came across two nice specimens.  The first one illustrates the beautiful chondrules that are contained in this meteorite.

In the second item, I was pleasantly surprised to see a matrix that went from grey to brown.  The grey matrix is usually associated with meteorites that are not very weathered.  As a result, less oxidation has occurred within the meteorite.  A brown matrix is indicative of slightly more weathering.  In the pic below, the transition is pretty clean.  Perhaps part of this meteorite was buried or protected in some way?  Since I did not find this item in situ, I can only guess.  In any case, I am certainly pleased with the result of the sawing and preparation.  If I had cut this item in a different way, I may have never come across this part of the matrix.  This is definitely a case of being more lucky than skilled!

Thing2 Summer Project: Part 1

[note from GreenGuy:  my two older daughters (Thing1 and Thing2) have taken on summer projects to keep their brains from turning to mush over the school break.  Thing2’s summer project is to learn about and simulate a tornado.]

My summer project is on natural disasters. I will do an experiment on one natural disaster…in other words a tornado. I am doing this project because I want to know what harm tornadoes do to living organisms and the environment. I first got interested in natural disasters in third grade when our class did posters on natural disasters.

For my tornado project I will take every day items to represent a tornado. I want to to get 2 big empty plastic soda containers and put them together, top to top. I will put water in one bottle filled almost to the top. I need to make sure the 2 bottles are secured tightly. Then I put the bottles vertically and I’ll shake the bottles until it makes a tornado in the water.

In addition to the tornado experiment above, I will learn many details about tornadoes like

  • When tornadoes occur

  • Where tornadoes occur

  • What happens during a tornado

  • What happens to living organisms during a tornado

  • What type of storms make tornadoes

Thing1 Summer Project: Part 1

[note from GreenGuy:  my two older daughters (Thing1 and Thing2) have taken on summer projects to keep their brains from turning to mush over the school break.  Thing1's summer project is to learn about and build a computer.]

What am I doing for the project?

I am going to build my own computer with a little help from my Dad. My goal is to be able to access the Internet and other programs.

Why did I pick this project?

  • I think it will be a great experience
  • I have a big interest in computers now
  • I want to set a goal for myself to reach
  • I would like to have my own computer

How?

  1. Test the computer before it is taken apart to make sure it works
  2. My Dad will take it apart and give me the parts
  3. I will put it back together using diagrams/manuals
  4. I will test it to make sure it still works and I have succeeded

Sunday morning boredom

I watched the Andre the Giant biography on A&E yesterday.  As a result, I started to wonder about the other wrestlers that were burned into my brain back in the 80s when I was a young and impressionable kid.  Below is what I found over the course of about 1 hour on wikipedia.  I was flabbergasted that Jimmy Snuka was still wrestling.  He was old (for a wrestler) when I watched him 20 years ago.

Lastly, I have become way too knowledgeable about wrestling lingo (heel? facekayfabe?).  I need to read some Sun Tzu or Lao Tzu and get my brain cells back in balance.

  • Andre the Giant – died 1993
  • Big John Studd – died 1995 from liver cancer and Hodgkin’s disease
  • Bam Bam Bigelow – died 2007 of drug overdose
  • Hulk Hogan – alive
  • Jimmy “Superfly” Snuka – still alive and wrestling
  • Ricky ” The Dragon” Steamboat – still alive
  • British Bulldog – died 2002 from heart attack
  • Owen Hart – died 1999 during a wrestling stunt (fell 78 feet to ring)
  • Bret “the Hitman” Hart – still alive
  • Jim “the Anvil” Neidhart – still alive
  • Junkyard Dog – died 1998 from car accident
  • Ultimate Warrior – still alive
  • “Ravishing” Rick Rude – died 1999 from heart failure/ drug overdose
  • Randy “Macho Man” Savage – still alive
  • Ted “Million Dollar Man” DiBbiase – still alive
  • King Kong Bundy – still alive and wrestling
  • Hillbilly Jim – still alive
  • Razor Ramon – still alive
  • Jake “the Snake” Roberts – still alive and wrestling
  • Brutus “the Barber” Beefcake – still alive and wrestling

Now on to house chores.  I need to fish a HDMI cable through a wall.