notsotrivial.net

Non-trivial matters of interest to software architects and other like minded geeks.

Building strong teams has always been important to me. Over the years I’ve had successes and failures and spent a lot of time reflecting on the ins and outs of attracting, motivating, and growing talented developers. Major influences in my thinking have come from Joel Spolsky (Smart and Gets Things Done)  and George Leonard (Mastery), Marcus Buckingham (First, Break All The Rules), and most recently Andy Hunt (Pragmatic Thinking & Learning).

 

In Pragmatic Thinking & Learning, Andy Hunt provides an overview of the Dreyfus Model of Skill Acquisition. The Dreyfus model is a cross disciplinary study of technical people and their skill levels. The results of the study call out specific skill levels and identify the characteristics of people at each level. I’ve listed some highlights below and bolded the characteristic that I think best exemplifies someone at a particular level:

 

Novice“Just tell me what you want me to do.”

  • - rigid adherence to rules
  • - no discretional judgment
  • - does not feel or accept responsibility for outcomes

 

Advanced Beginner “I’m ready for my next task.”

  • - lacks perception of big picture or larger context is seen as irrelevant,
  • - all situations are treated with equal priority.
  • - still does not feel responsible for outcomes
  • - rules can be applied situationally

 

Competent“I’ll have it done by the end of the day.”

  • - still follows rules but begins to encounter and cope with crowding and conflicts (multiple activities, information, rules)
  • - begins to explore the reasoning behind rules
  • - sees actions as part of larger, long term goals
  • - forms deliberate, organized plans
  • - feeling of responsibility begins to arise from active decision making

 

According to the Dreyfus study, most people don’t get beyond Competent at most skills. There’s just no need or not enough challenge in a particular activity once our goals are met. To go beyond this level requires dedication and concerted effort to get better. In other words, it’s time to go pro!

 

Proficient - “The XYZ pattern can solve that problem perfectly.”

  • - can distinguish important elements of a situation and ignore irrelevant details
  • - can learn from the experience of others (e.g. case studies)
  • - uses pattern recognition and past experience to identify a problem and maxims (as opposed to rules) to solve them
  • - intuition begins to take over for rules

 

Expert (aka Master or Wizard) - “Did you need anything else?”

  • - no longer reliant upon rules, pattern recognition and maxims are baked-in
  • - can formulate possible outcomes and future visions of what is possible
  • - can very quickly establish an intuitive grasp the situation and solve problems seemingly without effort

 

I’ve quickly come to love this model for its clarity. It cleanly describes the increasing scope of awareness and how experience gets baked into our consciousness. It provides a discrete set of criteria upon which to assess the current skill set of our teams and more importantly, it’s actionable. We can plot the next steps to our team improve and grow.

 

If you’re involved in decisions related to team management it behooves you to take a moment to asses your team members and build a quick skill level inventory based on the criteria above. Based on that inventory you can begin taking action. Stay tuned for part 2 where I will share some thoughts on optimizing the team lineup.


The organizers have announced that registration is officially open for this year’s highly anticipated St. Louis Day of .NET conference and there’s a special surprise – it’s two days! That’s right  - two full days of technical content. The the highlights are listed below and you can get all the details and sign up here: http://www.stlouisdayofdotnet.com/.

 

Please join us for this awesome event and pass the word along to your friends and coworkers as well.

 

clip_image002


Architecting Applications for the Enterprise by Dino Esposito & Andrea Saltarello

If you’re an .NET developer looking to get a better understanding of software architecture you’re in luck. This book offers a superb hands-on introduction to all the aspects of application architecture you’ll need. You’ll get an introduction to software architecture as a discipline as well as an overview of UML and a review of commonly accepted industry design principles. From there Dino and Andrea dive right into the heart of application architecture – designing your data, business, service, and presentation layers. There’s a TON of guidance on the options available for each of your layers and when to choose which. The greatest strength of this book - it's all proven out in a real world working example that you can download and try out. I can’t underscore how important this book is to the working developer. I applaud this book for it’s greatness and curse Dino and Andrea for writing the book I wanted to write. Highly recommended!

 

Check out my Architect Bookshelf compilation for more recommendations for software architects.


Last weekend after participating as a volunteer in the Coders 4 Charities event, I tweeted the following: “+1 to Sitefinity from Telerik - made it extremely easy to build our site this weekend at #C4C. Combines the best from Rails and SharePoint.” Several people have contacted me to elaborate on this statement so I thought I’d write up a quick post-mortem of the project I worked on and provide some reasons behind my statement.

 

We Care Ministries is a charity dedicated to providing spiritual, emotional and other needs to the elderly, the handicapped, and the needy. Their founders, Reverend Gary Barnes and his wife Carol Barnes, RN, petitioned the Coders 4 Charities committee to have their web site redone. Their original site was already online but had never completed. The donation button was broken and there was no systematic way for volunteers to offer their time and services. Our goal was to give the site a face lift so it would look more modern and appealing and address the broken or missing features. Shown below are before and after pictures of the site.

 

image_thumb14       image_thumb10

 

What Went Right

Great teams do great work. I definitely want to call out my teammates: Chandra Yarlagadda, Cody Inman, and James Peckham, Ross Fuhlman. Everyone on the team showed up ready and eager to work and got along great. Each person brought great ideas to the table, took ownership of their tasks, and drove them to completion without any setbacks. Special mention for Cody - he was definitely the Chuck Norris of design and CSS styling.

 

Good customer and expectation management. Cody had met with our charity founders prior to the C4C weekend kickoff and had come up with a list of requirements. After initial review and discussion internally, we found that we needed clarification on quite a few points. When we met with Gary and Carol for the first time, we discovered that what makes them a great team were their different perspectives on their charity mission. This was confusing at first because we were having a tough time getting a coherent set of marching orders that we could execute on. It took us several rounds of discussion to determine how they’ve partitioned their responsibilities and put together a site design that met both their needs. After a couple of design iterations we arrived at a wireframe design of the new site that they were happy with. However, knew there was a high probability of change after the event was over so we wanted to make sure that we provided them with a solution that was flexible enough to change and grow with their charity. This leads me to the next item…

 

Picked the right tool for the right job. Having attended last year’s C4C event, I knew that teams would struggle to complete their projects under a 48 hour deadline. Successful teams had leveraged an existing platform rather than writing their application from scratch. Coming into the event, I knew this would be an early decision point in our project and I had two solutions in mind: SharePoint and BlogEngine.NET. Both were readily available and very customizable. SharePoint offered a great option for a content heavy site and BlogEngine.NET offered a good starting point for a site that might require some custom coded workflow and data storage. It turned out that we needed a solution that offered both: end-user content management and custom coding to accept volunteers electronically. Cody Inman suggested Telerik’s Sitefinity, a product he had used in the past with success so we all decided to check it out. We immediately encountered a small hiccup - not a single one if us could get the developer trial installed successfully using the packaged installer. We ended up downloading a zip file containing a blank Sitefinity starter web site, loaded it directly into Visual Studio 2008, and were off and running. After that we all gave Sitefinity the thumbs up and began digging into our tasks. 

 

Sitefinity turned out to be a great accelerator for us. It’s drag & drop content management features allowed us to build out the structure of the site very quickly and provided the flexibility for our customer to change any and all of the content after delivery. With regard to custom development, all we needed to do was create asp.net usercontrols and drop them into the site. Sitefinity detected them automatically and added them to its screen layout toolbox palette. For our project we created just one user control that hosted a form to allow volunteers to submit their contact information. We dropped it onto the Volunteer page using Sitefinity’s content management tools. It couldn’t have been any easier. Sitefinity also includes a simple database driven list engine which we leveraged to store volunteer information. The list engine is primitive in that it stores just one big string for each item but that was enough for our needs. If we had needed more complex data storage, we could’ve just added our own tables in the Sitefinity database (SQL Server Express, btw) and written our own database handling code. Sitefinity was a pleasant surprise and met our needs perfectly. So there you have it: we got SharePoint like content management and database driven list management and a very simple, easy to learn programming model much like a framework such as Rails. (Note: I don’t want to mislead anyone. Sitefinity does NOT provide the same programming capabilities as Rails, just a straight forward development paradigm that you can learn in less than one day). If you build custom sites I suggest you check out Sitefinity. It just might help you accelerate development on your projects as well.

 

PayPal integration was a breeze. The two most important requirements were accepting volunteers and donations. Luckily, We Care Ministries already had a PayPal account and we were able use PayPal’s tools to set up a donation link with no coding whatsoever. We simply needed to embed a URL link containing the their appropriate account information into the site. Couldn’t have been any easier.

 

What Went Wrong

No source control or build management. We knew we would need to produce a single deployable site by the end of the weekend and discussed source control and configuration management early on Friday evening. Due to the lack of resources we were reluctant to set up a source repository and perform a full software engineering build cycle. As a result, we struggled throughout the weekend trying to integrate and redistribute all our changes. We had at least one occasion were some work was overwritten while copying between machines and had to be redone. Our final solution was to just integrate everything onto a USB memory stick and run the final “build” directly from it. Less than ideal but we were pressed for time. The proper approach would have been to set up a dedicated stand alone “build” machine and have each team member integrate their work onto it and then copy back the entire project back to their local machine before beginning the next task.

 

Not enough time. Let’s face it – 48 hours to build a fully functioning web site is just not enough time. We iterated through several site designs through Saturday afternoon before settling on a winner. We were able to complete all the interactive elements and programming but getting the site’s look and feel flushed out and the CSS built was too time consuming. Hats off to Cody Inman for putting in a herculean effort. He carried the bulk of our design load and was working right up until the bell to try to get the site completed. The final result demo’d well but there were still some kinks to work out.

 

We didn’t go live. The weekend would have been a home run for us if we had been able to go live with the site by Sunday evening. Alas, the old site was hosted on Lunix servers and with all the development work we had to do, we simply did not have enough time to find an alternate hosting provider running windows servers and get DNS name resolution rerouted. Major bummer for us and hopefully better pre-event planning will help us get there next year.

 

All in all, both the Coders 4 Charities weekend our project were a success. The new and improved should be going live within the next week or so at www.wecareministries.org. I hope this short post-mortem provides a glimpse into what it was like to participate at C4C and will serve as a record of lessons learned that we can apply next year to make the event even better.

 

   


Back to back events this month and I’ve got another great report for you.

The Kansas City .NET User Group held its 2nd annual Coders 4 Charities event this past weekend. The volunteer driven event paired teams of web developers, designers and analysts with representatives from local charities to receive "extreme makeovers" of web sites or full online applications for their use in just 48 hours. In total there were 8 local Kansas City charities seeking assistance and 35 volunteers from the KC metropolitan area who participated. The charities involved spanned a wide range of concerns from church ministries to crime prevention to job clubs. High definition coverage of the event launch can be seen below:

 

 

The event kicked off on Friday, April 24th with a dinner and introductions between the charities and volunteers. The first evening was spent reviewing existing applications and requirements and choosing strategies and technologies for the makeovers with the doors closing at 10:30 pm. The doors opened again on Saturday at 7:00 am and teams eagerly attacked their charity projects until well into the night with the doors closing once more at 10:30 pm. Sunday was crunch time with all the teams hammering out their final features as the 5:00 pm deadline approached. At the conclusion, each team was given 15 minutes to present their solution to the group and receive their well deserved applause for their efforts.

 

 

Highlights

Incredible teamwork and cooperation. Teams came together very quickly and delivered under pressure. The level of professionalism and dedication to the projects was inspiring. There was a Rock Band room set up for blowing off steam but, by and large, it was quiet most of the weekend. There simply wasn’t time to relax when the stakes were so high for the charities. I was extremely proud of everyone who participated. It was an event like no other I’ve attended this year.

 

Great 2nd year effort. With 8 charities and 35 volunteers, there was excellent growth from the inaugural event last year (5 charities, 25 volunteers).  It’s expected that at least 7 of the 8 projects will go live within the next few weeks.

 

More designers added to the mix. Last year’s teams struggled due to the lack of design skills so this year there was a concerted effort to recruit more designers. This helped balance the workload among teams and the end results were substantially more usable and complete than last year. Developer art is NEVER pretty and CSS does not come naturally to most C# and VB developers.

 

Fantastic facilities. Centriq Training Center of Kansas City provided first class facilities. Each team was given their own training room complete with whiteboards and plenty of room to spread out and get to work. Sponsors came through big time with fully catered meals and there was ample food for everyone throughout the weekend.

 

This was an incredibly successful event by all measures and I want to especially call out Doug Butscher, Lee Brandt, and Jeff Julian for organizing and leading this great effort.

 

More Photos

More photos can be seen on the C4C flickr stream: http://www.flickr.com/groups/coders4charities/