Tuesday, September 25, 2007

Adopting Agile Slides

Agile Houston tonight was a pretty good turn out. There were over 30 people, so it was a good number to get people talking.  If you came, I’d love to hear your feedback in the comments!

I was able to talk to a number of agile folks from Houston and it’s really cool to see this type of enthusiasm at a local level.

You can download the slides here.

(Matt recorded the whole thing, so if I can get the audio bits I’ll post those as well).

Adopting Agile @ Agile Houston Tonight

I’m speaking on Adopting Agile at the Agile Houston meeting tonight.  The meeting will be held at PROS Revenue Management downtown on Main street.  Check out the agile houston website for more details.

Hope to see you there!

Sunday, September 23, 2007

Certified ScrumMaster Training - Day 2

Day 2 of the class went right into it and had a lot of good, hands-on excercises.  Here are some notes from the day:

Team

  • Includes everyone required to deliver the “slice of the pie”  (the functionality for the sprint)
  • Extended teams are teams that you have to interface with to deliver your software.  Peripheral teams may be doing waterfall and include vendor and/or teams external to the company.
  • The core team should all be co-located, and shouldn’t be interrupted during a sprint
  • All teams go through the forming, storming, norming, and performing phase… even teams built with experienced scrum members.  Team dynamics are always different.  Mark (the trainer) wanted to stress that there is an additional phase here called “Adjourning.”  This implies that you have to let go of your previous team if it’s not bringing value.  Don’t do things a certain way just because “that’s how we did it last time.”
  • Good Scrum Coaches address problems by holding up a mirror rather than a stick.  Get the team talking and let them come to a solution.  Good coaches know how to set things up to get them talking and then shutup.
  • Recommended books:  Project Retrospectives by Norman Kerth, and Agile Retrospectives by Esther Derby, Diana Larsen, and Ken Schwaber.
  • Role of Managers often comes into question in Scrum.  Are they pigs or chickens?
    • Most of the time chickens
    • sometimes the product owner / customer, but depends on the project
    • Managers still have forsight of team impediments, so they can be very valuable.
    • Managers help the ScrumMaster remove impediments to the team
  • Scrum scales via Scrum of Scrums
    • 1–2 Members from each team are part of Scrum of Scrums.  Important to get the right people in the room (need problem solvers and cross-functional SMEs)
    • goal is to re-sync team efforts, share impediments (find common ones)
    • helpful to have someone of VP level present so that common impediments can be taken care of quickly
    • “Distributed teams are hard.  Period.  Scrum doesn’t make them any easier.”
  • Distributed Teams
    • NEVER as productive as co-located teams.
    • 90% of communication is non-verbal so stand-ups over the phone are hard
    • Effective distributed teams START co-located, then distribute.
    • Spend the investment to bring people together or “accept it and have bad teams.”
    • The best distributed Scrum teams share a product backlog and task list (via tools or Spreadsheet) so that they still feel part of the same team.
  • User stories
    • Stories are not contracts.
    • Rather they are a placeholder for future conversation
    • Stories are not Requirements!  Requirements are meant for defined system behavior for contractual purposes and not business-user friendly.  User strories are meant so that business users understand them.
    • INVEST in good user stories that are
      • Independent
      • Negotiable
      • Valuable
      • Estimatable
      • Small
      • Testable
    • Stories can be large at first (called Epics) then are broken down into (Themes), then finally into stories. Epics or themes never make it into the sprint, so break them down as soon as you can.
    • Purpose of stories:  (3 C’s)
      • Card
      • Conversation
      • Confirmation
  • Estimating
    • Use story points (or gummi bears… whatever) rather than hours.  Hours decay.  You don’t want to have to re-estimate because your initial estimates were wrong.  If you estimate that you can accomplish 24 story points and you only get 18, then you can only count on getting 18 the next sprint.  If you estimate a task at 4 hours and it takes 8, then what about the other 4 hours tasks on the board?
    • Planning accuracy
      • 20% of the efforts gives you 80% of the benefit
      • Planning beyond that yields little return
      • “Plans are useless. Planning is everything.” – Eisenhower.

The course was AWESOME and I strongly encourage others to take the course if you are interested in agile/scrum.

Afterwards we took Mark Pushinsky and Kert Peterson out to dinner and shared some stories and laughs.  I hope to see these guys again in the future.

(oh yeah, and Jimmy and I worked on something super secretive during our free time on this trip… more on that later on)

Thursday, September 20, 2007

Certified ScrumMaster Training - Day 1

So my buddy Jimmy and I are in Austin right now taking a Certified ScrumMaster course by Mark Pushinksy. 

I’m ecstatic to be earning this certification, and while I won’t be getting a “Get out of my way, I’m a ScrumMaster” T-Shirt, I am getting incredibly valuable, practical Scrum training from two experts.

Excellent Quotes from today:

Mark (trainer):  So what do you see in the Waterfall model that you don’t see in the agile model?
Guy: You mean “Waterfail” ??

 

Mark (acting as a troubled PM who hasn’t seen any results in 7 months):  Well, I need ALL of those features.  They are all important.
Jeff Palermo:  What if I told you that your budget was reduced to 1/10th of what it is now.  What would be  most important then?
Mark:  Umm, well all that is important.  I need it ALL.
Jeff Palermo:  Ok, so if I could give you something in 30 days, what would you like to see first?
Mark:  You can give me something in 30 days?!?!?!

This dialog was very valuable to me.

Mark:  You can’t heal, what you can’t feel.  (not going to sell agile if they aren’t already feeling pain with current process)


 

Here are some notable points:

  • If you tell a customer that it’s going to take 12–18 months to deliver his software, what kind of features do you think he’s going to ask for?  He’s going to think “Well if I’m not going to get it for over a year, I better get the everything and the kitchen sink!”  Contrast this with telling the customer that you can deliver in 30 days, what is most important?
  • Scrum demands transparency on the project.  Why would some people resist this?  Lack of trust, Fear of failure (or appearing as a failure).
  • Shu, Ha, Ri (martial arts terms — Learning the Rules, Applying the Rules, Adapting and Combining the Rules)
  • Waterfall separation of analyst, architects, developers, testers breeds lack of trust.  In the extremem these groups become “enemies” — Ever heard “ Oh if we ever got good requirements we could deliver”  — or “the developers are delivering tons of bugs to us!  What are they doing?!?!”
  • Agile/Iterative teams self-organize and fill needed roles to meet the sprint goal – this fosters trust between team members
  • The class had some trinkets and creativity toys which I thought was a nice touch to break the monotony of sitting in the same place for a long time
  • There were many hands on activities, many requiring us to stand up.  These were awesome!
  • Think of scrum as a snowman.  The head is the daily activity (24 hrs), the middle section is the sprint (2–4 weeks) and the base is the release plan (3–6 months)
  • Don’t make squirrel burgers (don’t deliver software that is low quality.  Low quality means sloppy code, no unit tests, any corner-cutting.)

Role of Scrum Master

  • Remove barriers
  • Increase transparency
  • Help Customer/Product Owner realize ROI by prioritizing product backlog
  • Educating those involved about scrum rules
  • (Silent) leader / facilitator
  • Improving engineering practices to meeting shippable goal at end of sprint
  • empower team to make decisions and get stuff done (self organize)
  • look for “coachable moments”

More to come tomorrow…

Tags:
Wednesday, September 19, 2007

Using UserAgentSwitcher to Access Members Only Sites

Ever gone to a site that you found via google that seems to have the EXACT answer to the problem you are looking for?  Then you click on the link and you are shown a page that basically says "You must be a member to access this article."

I can't stand sites like this.  In addition, they are in clear violation of Google's TOS, and they should get dropped from indexing unless the open up the content. 

Why are they in violation of Google's TOS, you ask?  Well basically they are sniffing for googlebot (or any other web crawler) and serving up real content to them.  The data gets indexed, the site's PageRank goes up and the site starts showing high up in the google search results.  But when you or I access the page, we get a different page, telling us that we should pay them money to see the content.

So if you want to give these sites a big middle finger, go download the user agent switcher Firefox extension.  Then add the googlebot useragent to the list.  You can get a huge list of commun useragents here.

Now, find a site that blocks articles to non-members, such as this one:



Change your user agent like so....



And refresh.  VoilĂ ! you're in!


Tuesday, September 18, 2007

I'm on to you, Microsoft

There's a conspiracy going on here.  We all ignored the first signs of it, but now it's too apparent to ignore.   Microsoft is engaging in some devious master plan that will affect most of us.

We all read with shock and awe, Scott Hanselman's post where he announced he was becoming a blue badge.  People wondered what this would do to his blog content, or his contribution to DasBlog.  This was the first sign.  And we did NOTHING.

Today, I saw the 2nd sign, and I'm going to expose this Microsoft conspiracy for what it is.  Phil Haack just announced that he is joining the ranks as a Microsoft employee.  That's right, you heard me. 

Microsoft has hired the technical and charismatic leaders of the two most popular open source blogging platforms for .NET.  This is all a part of a master plan to squash the multi-billion dollar market so that Microsoft alone can swim in the sea of money that is to be made from .NET open source blogging.  Don't kid yourself, there is buku (TM) money to be made in this area.

Sure, both Phil and Scott claim to stay committed to SubText and DasBlog, respectively.  But we all know better.  Soon they will be hard at work, developing the most incredible blogging platform ever devised.  I even have a name for this stealth-assassin project.  It will likely be called Microsoft Collaborative Team Works For Online Weblogs Framework Foundation System 2008.  I can just hear Microsoft Marketing salivating at that title.

All kidding aside, I think that Microsoft is going to be changing it's image, especially in the ASP.NET arena.  They've snatched up some key individuals in the community and they will definitely be making waves.  You can quote me on that.

Sunday, September 16, 2007

Speaking at AgileHouston Next Week

I am going to be speaking on Adopting Agile to our local Agile Houston user group.  Our last presenter, Robert Martin was excellent, and the speaker following me (who I shall not yet name for fear of jinxing it) is going to be stellar as well.  Maybe if I sandwich myself between great people I can be great by proxy.  We’ll see.

Anyway we’re not yet sure of the venue (might not be at UH this time), so keep an eye out on the agile houston website for details.  The date will either be September 24th or 25th, but I thought I would announce it now to give ample notice to those of you who are in Houston but don’t subscribe to the Agile Houston calendar.

My talk will cover some of the foundational principles that are deemed “agile” and why they are valuable.  We’ll also talk about the best way to go about introducing agile at a solo level, a team level, and a company level.  I’d like it to go off as a sort of dialog to get everyone sharing experiences and opinions.

Come check it out next week!

Thursday, September 13, 2007

Putting your Logic in Stored Procedures OR How to Create a Maze of Unescapable Complexity

My friend Azam just hit a nerve.  One of my pet peeves is the fact that some people clutch to stored procedures and claim it to be the one place to hold the true state and logic of a system.  I have worked with such a DBA, and it was not very fun.

Anyway, he makes the claim that it is easier to make a tiny change to a stored procedure than to make the change in code, recompile, and upload the new version of the application to the servers.  He gives this example:

Let's say that you have some code to display all the users who enrolled within the past 7 days. You implement it using some OR Mapper and the domain contains the logic for pulling out the users enrolled within the past 7 days. Everything worked fine! Now, the client comes and ask you that he needs to view the users enrolled in the past 14 days (Let's assume for the sake of discussion that we don't have the UI to select the number of days). Now, you have to change the code in the domain model and then upload the new version of the application.


I have to disagree.  While the impedance to making a change is usually smaller by updating a stored proc, a change is a change is a change.

Most production enviornments I have worked in are guarded by a machine-gun weilding fairy with a SOX t-shirt on that won't let me run an innocent little script without getting the blood of 14 virgins and my manager's approval.  So sometimes the actual process of making a change overshadows the change itself.

2nd, when the next developer goes to review the code, shouldn't he/she know EXACTLY where the business logic is?  I would argue that the largest cost in this scenario is the maintenance cost of the poor developer who doesn't know where to look for a change.  It could take an entire day of searching to find out exactly where that rule is being defined.

If the value in question (the number of days) was identified to be a possible changing value, then place it in a config file so that the application can change on the fly without having to jump through burning hoops of fire.

Anyway, like I said, this is one of my pet peeves, so if you enjoy working with elegant software, don't put logic in your database.  Keep it in your domain layer where it belongs.

Wednesday, September 12, 2007

GridView Cell.Text Versus Cell.Controls.Add

I'm sure I've come across this before, but I'm writing this down so that I don't forget it later.

I'm working with a pretty hefty custom GridView and it's really trying my patience for this control.  Yeah yeah, it's all great if you want to bind a list of data coming from a SQL Query written in your aspx in plain-text.  The minute you start to customize it all that goodness turns into a mess of weird templating and strange quirks about ASP.NET, but I digress.

Anyway, this post relates to the fact that the TableCell class has a Text property and a controls collection.

If you are creating custom rows of data, you have to choose between doing
cell.Text = "content";
or
cell.Controls.Add( new LiteralControl("content") );
The difference is that the two are mutually exclusive.  If you have controls inside the table cell, then the Text property will be empty.  If you have the Text property set, then there can't be any controls.

So in my case I was setting the Text property, then trying to insert a LinkButton control right before the text.  So I diligently put
row.Cells[index].Controls.AddAt(0, theLinkButton);
Which happily wipes everything that was previously in the Text property.  Ugh.

Anywhere.FM - It's the Bee's Knees!

I don't know how they do it.  Somehow, the most-excellent http://anywhere.fm allows you to upload your entire music catalog onto their servers and play it on the web.  Their bandwidth costs must be outrageous.

On a side note, isn't it weird that these web2.0 startups such as this one or YouTube have the most backwards business model?  Let's spend an outrageous amount of money and give away our applications, ad-free.  I always laugh at the one-liner "Step 2: Profit!" but this is even worse than that!  I think the business model here is, build a gigantoid (that's my word, you can't take it) user-base, then hope that google will buy us out.  If all else fails we can start injecting subliminal messages to our advertisers. 

"How I wish, how I wish you were here (with Tylenol).  Cuz we're just... two lost souls looking for some Lysol.... year after year....Running over the same old ground, but have we found.... the same old beers, Wish you were here (with Viagra)"


The have a pretty usable flash clone of iTunes, and it allows me to listen to my music library wherever I am (which is great for a consultant).  Sometimes my Zune runs out of batteries, or sometimes I forget it at home.  Anywhere.fm rocks.  It's the bee's knees!

Here's a screenshot of the player:



You can also listen to my library as a radio station by navigating to http://anywhere.fm/subdigital.  Just don't make fun of my music :)

Monday, September 10, 2007

Hug Your Dog Today

My heart sank last week.  Our dog, Molly, was hit by a car…

She was chasing after our other dog (a puppy) and crossed a busy road.  We got the call and picked her up from a nice gentleman that kept her cool in his car (the Texas heat is around 100° F outside).

She had a nasty laceration on her head and a bunch of scrapes and cuts.  Molly had been rolled under a car and obviously suffered a large blow to the head.  We rushed her to the Emergency Animal Clinic of Houston and they took her in.  There was blood all over my car and my shorts.  We were in complete shock.

Until this moment I didn’t realize how much Molly really meant to me.  She was always a great dog and I loved her, but I didn’t take the time to pet her everyday and spend some time with her.  My wife and I were pretty shaken up at the thought that she had almost died.

Our children were nearly devastated.  None of us could believe that we almost lost her.

Molly was treated with 6 staples to her head-wound.  We picked her up the next day.

IMG_5838

IMG_5825

Her handkercheif reads “They saved my life at the Animal Emergency Center of Houston.”

She is still a little skiddish, but she has quickly returned to her normal self and we love her.  Take the time to hug your dog today.  Show them that you appreciate them.

IMG_5841

Sunday, September 09, 2007

I'm a todoist

I’m kind of a nut when it comes to nit-pickiness in applications.  I have always wanted to use Office Tasks as my todo list, however it was never effective enought to stick with.

The lifehacker recommended todo.txt is as lo-fi you can get before going completely non-tech, but I really don’t want to manage a text file.  I want the computer to work for me.

I recently discovered todoist.com, a minimalist, but oh-so-flexible todo-list application that really has me using it.  It’s got more umph than the excellent tadalist.com, and this is why it’s more useful to me.

Here’s a screenshot of my current list.  I have top-level projects called Work, Home, and Leisure and I drill down from there.

Todoist

Notice how I have recurring tasks in the @Home project.  (Also, notice that I didn’t mow the lawn or sweep the driveway this weekend.  Oops!  I guess this goes to show you that no matter how fancy your todo list is implemented, you still actually have to DO stuff to accomplish anything)

I also jot down little notes and things, such as what movies to rent or buy next, or what my reading list looks like.

Todoist has a pretty simple API as well.  Everything is token based, so you have a long token that serves as your credentials for making a call.  This is similar to the way that google does it.

Speaking of google, todoist integrates with GMail with a simple bookmarklet or firefox plugin.  Just open an email within GMail and click the bookmarklet and the email shows up as a task in todoist.

Another awesome feature is the Launchy plugin.  Everyone knows I loves me some Launchy, but now I can type todo | add “get some milk” to “Shopping” and todoist will pick it up.  Slick.

Anyway, I’m smitten with this tool.  What do you use to manage your todolist?  If it’s not Outlook, then I’d like to hear about it in the comments.  (If it is Outlook, I suppose you can comment as well, I’ll forgive you)