In prepping for tomorrow’s presentation on Social Media for the Shenandoah Ruby Users Group, Jennifer Till asked me where else we were going to be appearing at. I feel like a concert promoter who’s failed to promote his band’s concerts. We have several upcoming appearances; here are a few of them!
Last week I finished Module 1 of the UVa McIntire School of Commerce grad school program I’m in, for an MS in Management of Information Technology. It was a great 2 weeks, and a lot of fun and hard work.
The MSMIT program at McIntire is a 12 month program for working professionals, where we typically meet for 3 long days a month, with group work, projects, and lots of reading and research in between the monthly sessions. Module One (or Mod1 as we call it) is different however. This is our full time 2 week residency at UVa, where we study various foundational IT topics in class for 8 or 9 hours. Topics like: Database design, Data network design, UML modeling, the Zachman framework, Business strategy, Web 2.0, Datawarehousing, IT security, and more.
But that’s just during the day. At night we work on a group project, in addition to some homework assignments, guest lecturers (we had some great speakers visit), and social events to network with our classmates.
The group project for Mod1 was to come up with a Web 2.0 initiative for a health insurance company, design the product, research and estimate its business value, and prepare a presentation for the class. At the end of the two weeks, we had two things to deliver. First, we had to turn in a complete Zachman framework design of the product. Second, we gave a presentation to our classmates as if they were the Board of Directors of the health insurance company and try to convince them to fund our project.
I had the pleasure of being on a great team. At the beginning of Mod1, each group had to complete some team building exercises, where we decided what the ground rules for our group would be, what our group and individual goals were, and how we wanted to operate as a group. I found this to be a more valuable experience then I expected, and I plan to use it more often in projects at work.
One important decision that our group made right from the start was to use a lightweight version of Scrum to organize our team. Our team’s goals were to be very efficient, and to focus on the quality of our work, not the quantity of time we spent on it. Since two of our team members had previously used Scrum, and a third is a rugby player (Tim), using Scrum was a natural fit.
We ran 1 day sprints over the two weeks. We didn’t keep a burndown chart, since that would be too much overhead. Our planning sessions basically were to update a list on the wall with everything we were going to do that night, and then go around the team and let everyone pick their own tasks until all tasks had been assigned. We didn’t bother with estimates on those tasks since the granularity of the sprint was already down to just one day.
At our next meeting, we would do a quick stand up to update the team on where we stood on our assigned tasks, and then we usually did a demo of our tasks. This “lightweight Scrum” helped keep us very focused on our work and the tasks assigned to each of us. At OpenSource Connections, we did a similar thing for the Rails Rumble last year, which is a 48 hour coding competition. During the Rails Rumble, we would plan sprints of 2 or 3 hours each, at the end of which we would demo our progress to each other. It was lightweight enough to work in a very tight timeframe while still keeping just enough process that we all stayed focused on the job at hand.
The other efficiency thing we did was to “time box” every discussion we had. Many parts of the group work involved design discussions about what we wanted to do for our projects, debating the pros and cons of it, reviewing each other’s work, etc. To keep these discussions from going on all night, or wasting our time debating things in detail that might not even end up in the project, we would put a time limit on everything.
Every day we tried to rotate a facilitator role, and that person’s job was to keep the discussions going smoothly, and they were usually the person who would pipe up with “how long do we want to spend on this topic?” We might set a time limit like 15 or 30 minutes, and then Adil would set the timer on his iPhone. When the timer went off, we would cease debate on the topic and try to make a decision. If necessary, we would extend the time, but the goal was always to stay within in a timebox so we wouldn’t be up all night and could get some rest (or at least head over to the bar!).
We had a lot of different personalities on our team, and lots of different perspectives. But we got along great as a team and I think the agreement on ground rules and the use of Scrum helped out a lot with that.
I think the way we came up with ideas worked pretty well too. We started by encouraging everyone to write any idea they had on yellow post-it notes, and stick it up in one corner of the wall (you can see Adil pointing at the post-it notes in the photo below). It didn’t matter if it was a good or bad idea, the point was to generate as many as possible and get them on the wall. Similar to the way people propose sessions at an open spaces conference, each person would read their idea as they posted it to the wall. No criticism or debate was allowed at that point.
The next day we grouped the post-it notes together by ideas that were similar or could be easily combined together into the same project. It was clear that we had a lot of ideas around mash-ups, since that was the largest number of post-it notes. But we didn’t choose the idea based on quantity.
Arash had drawn a map on one whiteboard of the goals, strategies, and problems at the health insurance company (see pic below), and we began to move the post it notes onto the whiteboard, lining them up with what goals/problems they addressed.
At that point we finally started voting on what idea to go with. Everybody picked their 3 favorite ideas, and the three with the most votes were the finalists. We debated those three ideas in more depth, bounced ideas off Prof. Grazioli, and then picked our project idea.
Although it sounds a little complex, I liked this process because it encouraged us to all be creative, to consider all ideas, to map those ideas to the goals of the project, and ultimately to create a consensus around the final idea. I have a tendency to push for my favorite ideas, and this process helped make sure I didn’t force my ideas on the team, and ensured that we carefully and creatively considered all the ideas.
In the end, our team ended up proposing an incentives program based in part on an iPhone app that would record your exercise and upload that data to the health insurance company, which would then convert that data into “health points” for use in contests with fellow employees to encourage healthy lifestyle changes.
All the presentations were given on Friday, and the professors split the class into three different classrooms of 4 or 5 teams each (there were 13 teams total). Each team presented to their classroom, and then the room would pick which team should “advance” and be one of only three teams to present to the whole class in the afternoon.
Our team was really honored to be picked as one of the final three teams to present to the whole class. It was a lot of fun. I have to also tip my hat to the other two final teams since their presentations were not only excellent, but I was also very impressed with the depth of financial analysis they incorporated. (I’m looking forward to future modules where I’ll learn the finance skills to be able to do the same since finance is not my background).
Just for fun, I also took a few clips from our filming and made an “out takes” video. We got to show the outtakes to the whole class too after our presentation, which I hope added a little playful humor to the end of Mod1. (Prof. Grazioli showed some very funny retrospective slide shows that were the real hit of the afternoon however!)
Mod1 was a great experience. I advanced my IT skills, teamwork and leadership skills, but perhaps most of all made some great friends through the shared experience of great professors, very interesting classmates, and of course sleep deprivation. I’m looking forward to Mod 2!
Team 11 was: Tim Bucher (Booz Allen Hamilton), Adil Qazi (Freddie Mac), Arash Sadati (International Monetary Fund), Arin Sime (OpenSource Connections) and Mark Widener (Virginia Air National Guard).
The book Solr 1.4 Enterprise Search Server by David Smiley and OSC’s own Eric Pugh will be published next month from Packt Publishing. You can find out more about the book at the Packt Publishing website. Some of the topics that the book covers include:
Blend structured data with real search features
Import CSV formatted data, XML, common document formats, and from databases
Deploy Solr and provide reference to Solr’s query syntax from the basics to range queries
Enhance search results with spell-checking, auto-completing queries, highlighting search results, and more.
Secure Solr
Integrate a host of technologies with Solr from the server side to client-side JavaScript, to frameworks like Drupal
Scale Solr using replication, distributed searches, and tuning
Working with Packt has been a real pleasure, as they have been understanding about slipping deadlines and Eric’s propensity to abuse his apostrophe key. We’re looking forward to the feedback from the book and seeing growth of the adoption of Solr. Also, thanks to Dave Smiley for allowing Eric to work with him on the book!
I’ll be presenting the CBS19 Blog of the Week next Tuesday, June 9. If you want to watch it live, I’ll be appearing between 6:30 and 7:00 PM, and you can also watch it streaming on http://www.charlottesvillenewsplex.tv/. Fans of Marijean Jaggers need fear not, for she’ll be back in action on the 16th freshly tanned from her (20 years delayed) honeymoon in Maui. I’ve already picked a blog for next week’s feature. Who do you think it will be? Who would you like to see featured in future episodes? Drop me a comment and let me know what you think!
On May 21, 2009 at the Charlottesville Business Innovation Council annual awards dinner, Arin Sime of OpenSource Connections was awarded the CBIC Leadership Award for demonstrating “exemplary leadership and [contributing] most significantly toward the organization’s mission.” Arin has served for the past year as CBIC’s treasurer as well as serving as the Chairman of the Awards Committee for the past two years.
We at OpenSource Connections are thrilled with the well-deserved recognition that Arin is receiving for a job well done. We look forward to continued great things from Arin in the future!
At OSC, we have a well developed methodology that we apply to our client work, and one of the core tenets is using Continuous Integration to ensure our code behaves the way we intend it to.
However, recently we’ve had two projects were the usual CI solutions such as CruiseControl etc haven’t worked out well, and we had to develop our own internal CI tool that we are ready to publish to the world called MonkeyCI.
On the first project, which was a PHP based application with 5 full time developers, we used CruiseControl with the phpUnderControl addon. However, we were running CruiseControl on what turned out to be an underpowered hosted Windows server, and we kept getting build failure errors related to environmental difficulties. Now, if you’ve seen my talk about CI, you know how big I am on speccing a beefy server for CI, and this experience reinforced that lesson. We decided that migrating the CI environment to a bigger server was something that we felt was in the “nice to have” category, and that it could wait till the next iteration. But we needed something immediate. Enter MonkeyCI.
The heart of CI is all about building the code, running the tests, and publishing the results frequently. Everything else, the reports, the red/green lava lamps, the pretty JavaDocs etc are all gravy. To meet the needs of your developers, you need to know if the “bar is green”. So MonkeyCI does that in a decidedly low tech way:
Everytime someone runs the full suite of unit tests they record the day and time, and put their initials. If the build is failing then they immediately fixed it. We’ve played with writing the results in red for failing builds and green for successful builds as well. Then, each day at the standup someone highlights how the CI is doing, and verifies that multiple folks are initialing, which means that the tests are running on multiple systems successfully.
While this does mean you have an additional manual process, it’s also really easy to do, requiring just a whiteboard! And for small project teams, the overhead of maintaining a reliable CI system is too much.
We’re doing another two developer project right now, and at least so far MonkeyCI has been great. We haven’t seen integration issues yet such as database scripts that don’t run, or busted code being checked in. I’ll post a picture of our whiteboard once we have a bunch of checkoffs recorded!
We call this simple low tech process MonkeyCI because typically we refer to anything manual, such as testing by pounding keyboards as Monkey testing. Also, somewhat of a reference to the great developers at the Primate Programming Institute who I am sure would use this approach to CI!:
I don’t normally post blog articles that are reposts of other content, but this email thread answered a question that I’ve struggled with, which is how do you render a web page and save it as an image. I do this on HighTechCville, and our Fish4Brains RailsRumble entry a couple of years ago via thumbshots.org, but I’ve never been happy with that service:
At Sun, 3 May 2009 11:19:17 -0400,
Eric Pugh wrote:
Cool!
It’s one of those things that seems like everybody wants it, but no
one has quite figured out. And the various “services” like
thumbshots all feel kinda “seedy”, I am always expecting to see
advertisements for viagra stamped on top of the screenshots and
other questionable business practices.
It seems like you should be able to have the pages be render inside
of a library such as WebKit, but I guess rendering is very
intertwined with monitor displays and resolutions etc.
I have a research projects that aggregates info about people,
events, and organizations and I’d love a better solution for linking
in screenshots of the organizations and individuals site. Here is an
example using the thumbshot service for now..: http://www.hightechcville.com/organizations/318-worrell-water-technologies
Here is the text (thanks to Mark Phillips for this):
Khtml2png - http://khtml2png.sourceforge.net/ “Khtml2png is a
command line program to create screenshots of webpages. It uses
libkhtml (the library that is used in the KDE web browser Konqueror).
In khtml2png 2.0.5 to 2.5.0, “convert” from the ImageMagick graphic
conversion toolkit is used to create the output files in various
image file formats. 2.6.0 and future development will use the built-in
conversion of the Qt library.” – from the Khtml2png website
Pearl Crescent Page Saver - http://pearlcrescent.com/products/pagesaver/ “Pearl Crescent Page
Saver” is an extension for Mozilla Firefox that lets you capture
images of web pages. These images can be saved in PNG format or (with
Firefox 2) in JPEG format. The entire page or just the visible portion
may be captured. Options let you control whether images are captured
at full size (which is the default) or scaled down to a smaller size.
Page Saver uses the canvas feature that was introduced in Firefox 1.5.”
– from the Pearl Crescent Page Saver website
Webkit2png - http://www.paulhammond.org/webkit2png/ “Webkit2png is a
command line tool that creates PNG screenshots of webpages. …
webkit2png makes use of webkit, the rendering engine used in Safari.”
– from the Webkit2png website This utility is only available for Mac
OSX because of the dependence on Safari.
Webshot - http://www.websitescreenshots.com/ “WebShot is a program
that allows you to take screenshots and thumbnails of web pages or
whole websites. It comes with a command line interface for advanced
users. The following image formats are supported: JPG, GIF, PNG, BMP.”
– from the WebShot website WebShot uses Internet Explorer as the
engine for creating thumbnails of HTML files.
This past weekend was my first as a graduate student at the University of Virginia’s McIntire School of Commerce, where I am working on a Masters degree in Management of Information Technology. It was a great 3 days of intensive classes on IT strategy, and I really enjoyed it. Over the next year as I continue my studies, I will try to blog regularly about topics we are learning about.
As part of the program, the faculty regularly bring in interesting guest speakers with CIO experience. This Saturday was a great example, since Jill Singer joined us. Ms. Singer was formerly the Vice President for Project Management at SAIC, and is now the deputy CIO of the CIA. She gave a great presentation on the role of the CIO, and the process they use at the CIA for evaluating, architecting and implementing their internal IT projects.
The CIA, despite the mystique and the fact that Ms Singer was not free to answer all the questions we asked, is still a lot like any other IT shop. The process they follow for IT initiatives could easily be found in any Fortune 500 company. In short, they follow these steps: understand the mission, establish the vision, develop the architecture, define plans, resource plans, execute plans, and measure progress.
Sounds pretty traditional, right? Many other federal agencies probably follow a similar approach, which sounds a lot like a spiral development method. But even within the constraints of this process, I was very pleased to hear Ms. Singer talk about regularly using Agile methodologies.
According to Ms. Singer, the CIA regularly uses Scrum, most often in 4 week development cycles. Their customers, which would generally be some sort of internal analyst, really like the fact that Scrum encourages regular and tangible deliveries. This allows them to try out the prototypes, and their customers also enjoy being able to add features and change priorities during each iteration.
This has worked very well for them on many projects, and Ms. Singer feels that the move from a more waterfall style to Scrum has really helped them improve many of their projects, though with an interesting side effect.
The biggest challenge she has seen on their is knowing when they are done, or as she put it, “defining what 1.0 is.” They can’t fund their projects forever, just like any other IT shop. Sometimes they end up doing iterations indefinitely though, and then realize they have gone longer than they originally thought because they keep adding features. But unlike most project methodologies, if they slip on a project schedule using Scrum, Ms. Singer has found their customers are much more forgiving then when a waterfall project is late.
The reason for this is simple, and it is one of the fundamental advantages of Scrum and Agile, regardless of whether you are a start up company, a government agency, or even the CIA. By engaging your business owners with burndowns, daily stand ups, and short iterations for which the customer helps set the priorities, you are empowering your customer. It’s important to note that this is done in a way that does not infringe on the creativity of your development team. Your developers are likewise empowered by choosing what they work on and in what order within a sprint, setting their own estimates, and providing regular feedback and ideas directly to the customers.
It’s never good when a project is late, but if the customer has seen constant progress along the way, and they are empowered to help decide what features should be added or removed, then you have successfully created a collaborative environment between your customers and your IT staff.
Determining “what 1.0 is” can be a real challenge - we just had a good discussion on that today with one of our current clients. By employing Scrum, it sounds like the CIA has also learned the advantages of a highly iterative and collaborative process, and it is helping them to stay efficient and productive. By the very nature of what they do, the CIA must be innovative, and so it should come as no surprise that they are using the latest in software development methodology. I hope that other federal agencies will follow their lead.