Fear and Loathing
Gonzo blogging from the Annie Leibovitz of the software development world.
-
Tyler Butler... SharePoint Style!
Tyler Butler isn't a mythical enigma created by The Narrator and played by Brad Pitt in Fight Club. He's a program manager on the Web Content Management team. These are the guys who are bringing all the CMS stuff into SharePoint and making it an ECM that plays well with in our 2007 SharePoint world.
Tyler's own personal site, tylerbutler.com, is powered by GeekLog. This is a PHP based content management system (much like Drupal, Wordpress and others) and quite nice to work with. Tyler has done a great job with his site but now is dipping his feet into SharePoint with his own pet project. Converting tylerbutler.com into a SharePoint site. This is going to be done via master pages, some clever code, and a lot of time.
So if you're looking to see how you might move from one web site platform (DotNetNuke, Drupal, RYO-ASP.NET, whatever) to SharePoint, follow Tyler on his journey. You can read his first entry here on planning and basic branding is up and there are many more to come.
-
The Programming Manifesto... brilliant!
If you're the type that prints out the Agile Manifesto and slaps it on your cubicle to evangelise to anyone who walks by, then head on over to CodeBetter.com. Jeremy Miller has put together what he calls The Programming Manifesto and it's simply brilliant.
It's simple, hits the points that need to be talked about, and is backed by a lot of common sense and goodness that everyone should have embedded into their noggin' at birth. It's not complete (although I'm can't think off the top of my head what complete would look like here) and I'm sure it will evolve (hopefully not into something big and ugly) but this is a great set of ideas to start with. Like Jeremy said, you might agree or disagree with some (or all) of these but it's something to go from. Why not create your own or adopt what you see here. I see maybe this evolving into "The Developers Manifesto" and perhaps a different one called "The Architects Manifesto", but that might be overkill.
In any case, a good read for any developer trying to "get it". Check it out here.
-
TestDriven.NET 2.0 RTM, what are you waiting for?
In this crazy age of monthly (and sometimes weekly) CTP builds, I see that Jamie Cansdale released the RTM version of his highly successful (and arguably the best damn add-in for Visual Studio hands down) of his TestDriven.NET tool. The screenshots kick the monkeys butt and I'm excited over some of the integration he's pulled off (with Reflector and other tools) and how the product just keeps getting better.
I personally bought a copy and recommend any developer worth his or her TDD salt to do so. Writing and testing code has never been easier. He's also got a deal going with the guys over at TypeMock with integration (and there's some bundling of both products to save some simoleans). I only wish he would include NMock2 support as I'm kind of hooked on that lately and don't need the Cadillac that TypeMock is.
Funny thing, when I was spell checking this post in Live Writer, here's what it suggested for TestDriven.NET:
In any case, go check it out and you won't be disappointed.
-
41 times around the Sun is a charm
Yes, today I turn the big "4-1". I guess it's bigger than turning the big "4-0" but it doesn't feel like it (although turning 40 didn't seem like it either). I'm not really sure what a 41 year old man looks like, but many people comment I don't look 40 (or 41 if you ask me that question today). Guess it's that baby face I still (kinda) keep or my girlish figure but if you cut me open and count the rings, there's 41 of them today.
As my Birthday present, the powers that be decided they would dump 10cm of snow in our backyard. It's a winter wonderland out there today while only yesterday (and I do mean yesterday in the literal sense) we were wearing light jackets and wandering around free and alive. Today it's big heavy coats and sweaters and boots that take decades to tie up. We're having a new fence put in the back (135 feet across the back, we have a 1/4 acre backyard) so while it's not only expensive it's a lot of work. Luckily for the lazy person that I am, you can fix this quite easily. Hire someone. They came out and put the posts in which need to set and while that was all going on, a crazy dude with a bobcat turned our weed ridden backyard into a flat, dirt paradise. I was commenting yesterday that we could probably build a go-kart track back there (yes, it's THAT big) but then there's the resale value issue, so that idea was nixed. Now however with the dumping of the Christmas cocaine all over, I'm not so sure about the fence and less sure about the sod we were going to plant. There is hope though, as this is Calgary. In Calgary the running joke is that if you don't like the weather, wait 5 minutes. By next weekend all the snow might be gone and it'll be construction as usual.
Also, since this is the 41st year of my existence on this planet I thought change would be good so I'm trying out Live Writer. Live Writer is a client side blogging tool. I've been very happy with BlogJet, buying a copy last year, and it's served me well. However as some people have mentioned, BlogJet hasn't really been updated much and I think on of the key things with software is agility. The ability to adapt to the community. BlogJet has the features you would want in a tool. Offline editing, WYSIWG look, inserting images, automatically uploading files via FTP, spell checking, retrieving old posts, etc. Sadly it falls short in the extensibility arena as there is none.
Enter Windows Live Writer, a free client tool that Microsoft put together to fill the niche for bloggers. While a little late on the market, it certainly is impressive. First off, it just feels better and looks more pleasing. However get past the glam and it's all about the features. OOTB it's a great tool and handles all of the basics needed for blogging. Categories are available and whatever properties your blogging engine supports are there. The editor is nice and lets you edit in the look and feel of your blog, pulling down the styles directly from your blog site so it feels much more at home than BlogJet does.
Where it really shines is the plugins. The API is open so anyone can write them and they're pretty easy to pull together. There are dozens of plugins out there now that you can see here. I'm using the Flickr one as well as one that let's me insert a file via FTP and an email link one. They're simple and sit in a task pane to the right while you're blogging. Just click on it and the plugin takes over, inserting whatever HTML it needs and performs whatever tasks it does. For the blogger that needs to cut down on the heavy lifting while writing a blog post, this is key and well received.
Another thing is tagging. You can insert tags like ones to del.icio.us, Technorati, and such but also design your own. Once I get some time I'm going to see how to configure one for DotNetKicks and SharePointKicks (or if you've already done it please let me know the format). That's slick as I don't have to do silly things like save a draft of my post, retrieve the URL, hunt down the snippet I need and reformat it to use the blog entry address. That's what I'm doing now and it's a PITA. With tag insertion you just pick the provider and when the entry is posted, it'll substitute keywords with your entry. One-click posting, that's the way it should be.
Best of all, Live Writer is free!
So goodbye BlogJet, hello Live Writer. Let's see what you can do.
-
Please help us keep SharePointKicks alive!
Okay, I know I haven’t posted a lot of SharePoint content lately and I won’t go into the million and one excuses for it but I wanted to reach out and see if I could get a little help keeping our SharePointKicks site alive and, well, kicking.
While there have been articles posted recently, there’s not much making it to the site. I am personally going around and trying to find time to hunt down those choice morsels to post to the site and they are out there, however we still need your help. Please continue to post article links to the site to keep it fresh and growing. If you write a SharePoint cool blog, kick it. If you see a cool SharePoint blog, kick it.
Remember you can add your own little piece of Kick it code to your postings with this snippet:
<a href="http://www.sharepointkicks.com/kick/?url=[URL]">
<img src="http://www.sharepointkicks.com/Services/Images/KickItImageGenerator.ashx?url=[URL]" border="0" />
</a>Which creates this image (with a dynamic counter) on your post:
Just place it at the bottom of your post, replacing [URL] in the HTML with the actual link to the post you’re kicking.I would really like to start posting a “Most Popular SharePoint Stories of the Week” entry based on your submissions. Gavin Joyce, who runs all the *kicks sites, has one going for DotNetKicks (see example here) so I figure I’ll reciprocate. Each week I’ll do a similar posting, using the most popular stories listed that week on SharePointKicks. Of course, we need your submissions to keep that task going so please help out.
Also remember to help out with DotNetKicks by submitting your .NET stories and the recently released SecurityKicks for all kinds of security goodness (run by my fellow plumber James Kovacs). Your login to one of the sites is good for them all. It’s kind of like a Disney Park Pass, only cheaper and the lines are a lot shorter.
Thanks for the help! Without you guys, the SharePoint community, keeping SharePointKicks alive and humming it’ll fast become a ghost town. Also if you have ideas for improvements please send them along as there’s always something better out there.
-
Simplifing the Scrum prioritization process, part deux
It never ceases to amaze me that as freakingly smart I think I am, how stupid I appear when someone like Ron Jeffries steps into the conversation. He suggested an easier approach to prioritization that Kent Beck and Ward Cunningham taught him:
- Write the ten items, one per card, on ten cards.
- Pick a card and put it on the table.
- Pick another card, and put it to the left of the first card, if it's higher priority, to the right if less.
- Pick another card. Position it to the right or left, or in between the preceding two.
- Repeat until all cards are down.
- Look at the cards pairwise, switching their positions until you're happy.
No muss, no fuss, no wear and tear on your calculator. Works in a group, too.
Brilliant.
Just to note that the matrix approach I posted about doesn’t really scale very well. As you get 50 backlog items you’re now comparing over 2000 individual items so maybe just looking at each item and doing something like the excercise above works better in this case.
-
Using a simplified Analytic Hierarchy Process with Scrum
I was having a discussion tonight with Mrs. Geek and we were chatting about prioritizing and estimating in projects. Yeah, it’s an odd relationship when you talk about this at home but then that’s what makes her Mrs. Geek. Anyways, she’s very scope focused and has done estimating and management on mega-projects but was never exposed to Scrum. I was trying to explain how Scrum works from a prioritization perspective and we got into this conversation.
As we got into it I explained how Scrum generally worked with prioritizing features. Not a lot of info is out there on *how* to prioritize, just that it’s part of the process. The Product Owner (PO) is meant to prioritize this list, however a lot of times while they may know what’s important to them, if it’s one person doing the prioritization you might miss some different perspectives.
Most people practicing Scrum say the PO does know his thing and will do the prioritization correctly, however a lot of times when new teams are adopting Scrum they may not have an approach other than something very traditional. For example Dmitri Zimine has a blog entry here on how to prioritize the work, but his technique is like most might think. Put the list up on a wall and assign values to each item (1–9, a-z, whatever). This is fine and produces a list but it’s hard to say if this is prioritzed very well or not.
Also there are many examples out there that show Product Backlog items like “Setup development environment” or “Provide Extract from Database to External Sources”. How is a Product Owner who has little or no knowledge of say the IT infrastructure or their processes supposed to prioritize this? To an IT guy, this is most important (and required to say do other things like oh, test the application) but for others that are more business oriented they might see this as low priority.
So let’s start with the traditional approach. Put together a list of items (our Product Backlog) and having the Product Owner prioritize it. Here’s our prioritized list:
Priority Backlog Item 1 Setup Development Environment 2 Ability to sign up for memberships 3 Ability to use credit cards to pay for memberships 4 Notify members with membership data 5 Generate receipts and certificates 6 Authoring environment for articles 7 Web site look and feel and initial navigation 8 Display sponsors and links to web sites 9 Organize and sort articles 10 Library catalog for articles Our PO thinks that the ability to organize and sort articles isn’t that important and more importantly is the ability to notify members with membership data (perhaps to publish a newsletter). We’re not sure based on these items what some of this means, or the method they went through to arrive at this order but we have to go with it as that’s what the customer wants right? I find the process to create this list to be flawed. While it’s great that the PO has put together the priorities, he does so by only looking one dimensionally at the values. Also whether they knew it or not, they’re probably not really looking at the entire list each time they try to prioritize each item.
For example, once you’ve gone through the first 5 items in our list you have their weights setup and assigned. Subconsciously I think you now dismiss those items for future planning. Sure, you’ve weighed those items against others (like Membership to Authoring) but when it comes to prioritizing Authoring, you ignore the inverse comparison of Authoring to Membership as you’ve already prioritized Membership. That’s cheating the process a bit and not giving the Authoring feature a fair chance. It only has to compare to what the left over items are and we know that inverse comparisons are not always just as simple as the opposite of what you’ve already looked at.
Enter a technique called the Analytic Hierarchy Process (AHP). This is an organization approach that focuses on the relative importance of objects to each other. This will take us from looking at our Backlog in one dimension to looking at it in two, and the outcome is a more well defined set of numbers that tells us what the priorities really are. In a nutshell, it does so by comparing each item to another item, then adding up the values for each item to arrive at a weight (or ranking, priority, whatever you want to call it).
Now, as Scrum is a simple process unto itself I wasn’t too happy when I read through the various explanations on AHP. Edwardo Miranda has a great white paper called “Improving Subjective Estimates Using Paired Comparisons” on how the process works. However once I saw those crazy mathematic symbols explaining the calculations behind it, my blurry college and university years came rushing back and I almost blacked out. James McCaffrey has a short MSDN article on using the process which didn’t get into as deep as Edwardo’s explanation, but I still thought it was too complex for Scrum.
Like I said, this whole conversation started tonight as we were talking about project estimates and priorities. Then it hit me that you could take the uber-simple process of tossing items into a list but apply AHP to it to get something a step above, but not as freaky as learning thermo dynamics or theoretical physics again. We went through this process while discussing the subject tonight so let’s take a look at how we can come up with a better list of priorities than what we have above.
Break out Excel (or do it on a white board for that matter) and set up your items as rows and columns in a matrix. Something like this (I’m using numbers for each item in the top row so it’s easier to read here, but you might want to use the full names set at an angle in your spreadsheet):
Feature Name 1 2 3 4 5 6 7 8 9 10 1 Setup Development Environment 0 2 Ability to sign up for memberships 0 3 Ability to use credit cards to pay for memberships 0 4 Notify members with membership data 0 5 Generate receipts and certificates 0 6 Authoring environment for articles 0 7 Web site look and feel and initial navigation 0 8 Display sponsors and links to web sites 0 9 Organize and sort articles 0 10 Library catalog for articles 0 The order isn’t important here so it can just be your raw Product Backlog. Now go to each cell and compare the Feature to the other Feature in each column along the row (comparing the same item is redundant so it’s ignored and indicated here with 0). For example we’ll start with Setup Development Environment (Item #1). Is it more important, less important, or just as important as the ability to sign up for memberships (Item #2).
Give it 1 if it’s less important, 5 if it’s the same, and 10 if it’s more important. I find the 1–5–10 combo to be easy to use and remember. It’s either obvious it’s the same or more/less important. While you can assign say a number from 1–10, it starts creating long winded discussions like “Should it be a 6 or a 7?”. That’s detrimental to the exercise and you really don’t want to go down that rat hole.
A couple of things to note as you go through the items. You can compare Features from any angle you want. Sometimes it might be the business value, other times it might be risk or cost or whatever. You have to decide what’s best for the overall product. Also make it simple but don’t spend more than a couple of minutes for each item. Don’t try to keep track in your head of what the last compare was as it might taint what you’re really trying to compare against. Just focus on each item to each item then move on. Plain and simple.
Once you’ve done the first comparison, do the next column over and keep going to the end. Then start the next row and repeat the process. You’ll end up with a grid that looks like this:
Feature Name 1 2 3 4 5 6 7 8 9 10 1 Setup Development Environment 0 1 1 1 1 10 10 10 10 10 2 Ability to sign up for memberships 10 0 5 10 5 10 10 10 10 10 3 Ability to use credit cards to pay for memberships 10 5 0 10 5 10 10 10 10 10 4 Notify members with membership data 10 5 1 0 5 1 1 1 1 1 5 Generate receipts and certificates 10 10 5 10 0 5 10 10 10 10 6 Authoring environment for articles 5 10 10 10 10 0 10 10 5 5 7 Web site look and feel and initial navigation 10 1 1 1 1 1 0 5 1 1 8 Display sponsors and links to web sites 10 5 5 10 5 5 10 0 5 5 9 Organize and sort articles 10 5 5 5 10 1 10 10 0 5 10 Library catalog for articles 10 5 10 10 10 5 10 10 10 0 Looks good and yes, it does take some time. For 10 items, you’re doing 90 comparisons but don’t cheat. Do the actual comparison. Think about if it’s really more or less important (or the same) and be honest. Just like you do an estimate on a task, think about it from whatever angle that makes sense. It does give you perspective on things and lets you look at your list in a different light. The heart of the application, the core functionality that’s most important will bubble up eventually. For example in our scenario here, the PO felt that item #2 (sign up for memberships) was more important than item #4 (notifying members with membership data) but about the same as using credit cards for membership. Maybe that was a revenue decision, maybe it was functionality. Doesn’t matter as long as there was some thought behind it. Also try not to look at the other values. You won’t be doing yourself any service if you just replicate the inverse of the other values as that’s no different than doing a one-dimensional list. If you’re capturing it in Excel, just hide the first row when you move onto the next.
Now that you’re done, add up the values across the columns. This is our weight for each Feature. Now sort the list based on the value for that total and you’ll have your prioritized list. It’s that simple. Here’s our result from this exercise:
OR Feature 1 2 3 4 5 6 7 8 9 10 R 2 Ability to sign up for memberships 10 0 5 10 5 10 10 10 10 10 80 3 Ability to use credit cards to pay for memberships 10 5 0 10 5 10 10 10 10 10 80 5 Generate receipts and certificates 10 10 5 10 0 5 10 10 10 10 80 10 Library catalog for articles 10 5 10 10 10 5 10 10 10 0 80 6 Authoring environment for articles 5 10 10 10 10 0 10 10 5 5 75 9 Organize and sort articles 10 5 5 5 10 1 10 10 0 5 61 8 Display sponsors and links to web sites 10 5 5 10 5 5 10 0 5 5 60 1 Setup Development Environment 0 1 1 1 1 10 10 10 10 10 54 4 Notify members with membership data 10 5 1 0 5 1 1 1 1 1 26 7 Web site look and feel and initial navigation 10 1 1 1 1 1 0 5 1 1 22 The “OR” column is our original ranking we did just by looking at all the items and coming up with the priorities. The “R” column is the weights calculated by adding up all the item to item compares.
Notice that after going through this, we find out that the all-important Setup Development Environment Feature is way down on the priority list, the Library Catalog for Articles that was the least important item now is somewhere in the middle, and the look and feel (when all is said and done) really is the least important item and should be done last. These are valid numbers as the PO went through and decided, on an item by item basis, what was important at the time.
Now this isn’t to say that this is gold. For example, we may need to setup the development environment in order to deliver the ability to sign up for memberships. This is where I belie the entire team, not just the PO, should prioritize the items (unless the PO really knows everything, which is rare). The PO should be telling the team why something is important while the team works out what’s risky or perhaps required for some items to be delivered.
A little negotiation goes a long way, but the main thing is that you get to see what’s really important here and why. Along with the why, you get to see the what. There are a lot of things that are 80 here but when you compare one item to the next, there are subtle differences. This will help when you have all those #1 items to deliver in Sprint 1 and don’t know which one to start on first.
Okay, this is a mythical example using made up values and such, but it really does work. It provides you a better weighting of what’s important and does put some pseudo-science behind it. As I said, AHP in it’s traditional form can be complex and what I’ve presented here is a simple version of it. In trying to keep with the tradition of Scrum being simple, I hope this echos that. You can, as you see fit, add layers to this process (or choose not to adopt it at all). For example, you can take those weights and apply them to estimates (costs) in your system to figure out what the best bang for the buck is (thanks to Mike Cohn for that tip).
Use what works for you but when you’re done the idea is that you might end up with a more accurate view of the prioritized world before you begin your Sprint.
P.S. Completely unrelated (but I found it while I was checking some references for this article) I noticed Mountain Goat Software, the site Mike Cohn runs got a major face lift. Looks a lot nicer now and easier to navigate. Check it out here as there’s lots of great articles and resources there on Scrum.
-
Get into some Microsoft e-Learning with Howard and Glenn
Lately I’ve been making Redmond my second home, working with the e-Learning folks on SharePoint stuff. Two cats that I dig are Howard Dierking and Glenn Block. They both are product planners for courses, exams, etc. but don’t let the title “Product Planner” (which really isn’t all that exciting is it?) fool you. These dudes are both hard core developers and really know their stuff. It’s very refreshing talking to them as I can chat them up about Domain Driven Design and whatnot, without having their heads spin around and explode like most people I meet.
So if you’re interested in how the whole e-Learning thing works with Microsoft, what these guys do, or just want to check out another couple of ex-developers-gone-crazy-who-want-to-take-over-the-planet, visit Howard and Glenns blogs. Hopefully they’ll live up to the reputation I’m making them out to be.
-
Free Community Edition of SharePoint Explorer
The guys over at Dot Net Factory have announced that they’re released a free community edition of their SharePoint navigation tool. This is a plugin for your browser that lets you navigate sites more easily. The blurb from the website:
The Dot Net Factory’s SharePoint Explorer is an IE add-in providing end-users and administrators the richest possible SharePoint usage and navigation experience for all SharePoint 2003 and 2007 versions. SharePoint Explorer provides a friendly tree-based interface allowing novice and expert users alike to see all SharePoint sites and content at a glance while providing right-click menus for all common functions.
Key Features
- Installed on your PC to work with any number of SharePoint servers and sites
- Visualizes all SharePoint Areas, sites, Document Libraries, and Lists to any depth
- Navigate to any location in a single click
- Quick search of any site
- Context sensitive right-click menus provide instant access to almost every function
- Items counts display for Document Libraries and Lists
- My Outlook functionality providing quick access to Outlook while working with SharePoint
- Add alternate credentials for accessing different sites with different user accounts
Software Requirements
- Internet Explorer 6 or higher
- .NET Framework 2.0 or greater
- Access to any 2003 or 2007 version of SharePoint
It fully supports 2003 *and* 2007 versions of SharePoint so something to check out. You can find the download here.
-
MVP day today, Architecture forum on Wednesday, launch next month
Spent most of the day hanging out with other MVPs in Calgary (including one that came in from Medicine Hat of all places) at Microsoft Canada. We had a regional event where all the little MVPs got together and talked. It was fun and we got to find out some more info about the upcoming 2007 Microsoft Launch Event which I’m sure you’re all registered for. If not, then please do as it’s going to be huge (Vista, Office 2007, and Exchange 2007). I’m personally going to try to get out to Edmonton and Calgary for the launch events and pontificate about SharePoint, Office, and whatever else I can dream up.
On Wednesday I’m a panelist at the Alberta Architect Forum at the Metropolitan Centre (333 4th Avenue S.W.) here in Calgary. I’ll be speaking along with my fellow Plumber James Kovacs (with Microsquishy John Bristowe in tow) on SOA in the real world. We’ll muddle through various aspects of Service Oriented Architecture and make some short presentations and try to bring up a lively discussion. There’s events going on all day about SOA and Architecture in general so I highly recommend checking it out.