Tuesday, May 13, 2008

Speaking at Austin Code Camp this Saturday

I must be crazy.  I submitted four sessions for Austin Code Camp and they were all accepted!  It will be a long weekend for sure.  You can find out more details here:  http://www.austincodecamp.com.

If you're going to attend, be sure to hit up one of my talks:

  • ReSharper-Fu
  • Inversion of Control Quickstart
  • Advanced CSS and Javascript
  • Domain Driven Design w/ NHibernate

I'm sure that we'll put together some sort of geek dinner to unwind afterwards.  If you're interested, drop me a line in the comments!

Saturday, May 10, 2008

Cage Match: Gantt Charts vs. Burndowns

A large majority of the projects that I come into contact with start out with some sort of Gantt Chart.  Whether it comes in the form of Microsoft Project or just Excel, this is something that is very common in the software development industry.

A typical project plan looks like this:

project-plan

There's a list of tasks on the left, which are things like "Create Component X" or "Build Customer Search Screen."  The next column shows the estimated duration of the task.  These are time estimates that somebody (or some group) decided on at some point in defining the project.  The chart shows the critical path of tasks in order to get an estimate of when the project will be completed.  You can see that some tasks can be run in parallel, so sometimes delays on these will not result in delays of the overall project.

What's wrong with this?  Under the right environment, one could argue that this would be very effective.  This "right environment" generally looks something like this:

  • You know exactly what you're going to build
  • You know exactly how long each task will take
  • The project won't change while it's underway

Hrm, this sounds a lot like bridge-building to me.  But software development is different.  We aren't building the same thing over and over again.  If we were, custom software development would be almost non-existent.  We don't know what we're going to build because our customers often don't know what they want!

There's a large component missing from this diagram.  Something that our customers care deeply about.  Do you know what it is?  That's right, it's business value!  Where is the business value depicted in this chart?  Surely it's important.  How else can we make scope changes and reorder the work if things aren't going as planned.  This graph has everything already ordered.  According to Gantt charts the business value only comes at the end of the project.  Our customer doesn't know what "Code Component X" means.  This is a developer task, and has no value statement associated with it.

Instead, what if we were to organize our work in terms of features.  A feature certainly has some notion of value.  You customer can easily tell you whether one feature is more important than another.

One could imagine a conversation like this:

You:  George, we're looking at our current progress and it looks like we're not going to meet our May 18th deadline for your demo with the VC guys."

Customer: What?!  Oh no this is terrible!  They might cut our funding!  We have to demo this stuff!

You:  Well, if we were to remove one of these 3 features, we could finish on time and have a demo ready.  Which one of these can wait a bit?

Customer: Well, it's critical that we are able to cancel a reservation.  And I think that we also really need to be able to see the most recent reservations placed, as that is something that the client will do daily, but searching reservations seems like it will be important, but not critical.  For now they can just find the reservations from the list.

Did you see what happened?  Magic just happened, that's what.  You and your customer just had a conversation about features and value.  You're able to adapt to the project's progress and work on the most critical features first.  The demo with the VC guys will happen and the most valuable features will be there.

How could this have happened in the Gantt chart above?  We might be in the middle of "Code Component X" when the demo comes.  Can we have the same conversation?

Lesson #1:  Task-based plans don't convey business value.  Feature-based plans do.

Okay, so now we have a list of features instead of tasks.  Don't we still need to know what is required to implement each feature?  Well yes, but not necessarily at the start of the project.  Breaking features down into tasks is an ongoing activity throughout the life of the project.

What's next?  Let's say we have 2 tasks on our project plan that look like this:

  • Build the New Reservation screen (3 days)
  • Build the New Booking screen (3 days)

Bookings and Reservations seemed like similar concepts, so we estimated them the same.  So we go off and build the New Reservation screen and we get hit with some complexity.  It takes us 5 days instead of 3.  What do we do about the New Booking Screen?  Is it likely that this screen will take us 5 days as well?  Or do we suck it in and try and work twice as fast to get this one done in 1 day, so our project plan doesn't go off track?

Once an estimate proves incorrect, any other estimate based on that one is now incorrect.  We can assume with high probability that building the Booking screen will take 5 days just like the similar Reservation screen.  The problem here is that we've estimated these tasks in duration rather than size.

Instead, let's give the Reservation screen an arbitrary number, like 5.  5 What?  I don't know...  5 Bananas.  5 Gummy Bears.  5 Stars.  Whatever it is, a 5 should mean something.  What's a 5?  It's about the size of that Reservation screen.  Oh ok, so this Booking screen must also be a 5.  And this Order Fulfillment screen, that's twice as big, so let's call that a 10.  What we're doing here is estimating in relative complexity, which far more stable a number.

Human beings can discern the size of something much more effectively than the time it will take to build it.  And as things progress on our project, the size generally stays constant.  We won't have to re-estimate these tasks unless the size changes.

Lesson 2:  Estimate in size, not duration.

OK, I can already hear you saying "But how can we tell our customer how long it will take if we don't estimate in duration?"  -- Well we do estimate in duration, but we also convey the confidence in this estimate.

CustomerSo how long will this take?

YouI don't know, we still don't have enough information about what to build, so I can't give you a firm number.

CustomerWell I have to know, how long do you think it will take?

YouMy best guess?  3-6 months.

Customer3-6 months?  That's a big difference!

YouAbsolutely.  We are estimating this at the worst possible position in the project.  Let's assume it will take 6 months for now.  After every iteration (2-4 weeks, typically) we will give you a more educated guess.

Granted, not all customers will be willing to do this, but you can spend more time discussing the process than I have here.

This is where Burndown charts become so effective.  A Burndown chart looks something like this:

burndown

This chart shows the hours remaining to complete the work during a given iteration.  Let's assume we attempted to complete 67 points (or Gummy Bears, whatever you decided on) of features.  When planning for hour iteration we broke these down into tasks and the team estimated 420 hours worth of work.  At the end of each day, the developers estimated how many hours remained on the tasks they were working on.  This continues every day.  Sometimes we uncover hidden work and this chart goes upward, as you can see in the picture.  Regardless of what we planned to do with our best intentions, we want to see actual performance.  If you were managing this project, would you feel comfortable with the current progress?

Try plotting a slope line on this image to see where we're headed.  Also plot the ideal line if we were to be on track.

burndown-projected

We're about 1/3 done with our first iteration, and we can already make solid assumptions of where we're headed.  It's clear that we aren't going to make our target, so it's time to have that conversation with our customer on what to pull.  This graph might also depict that we'll finish way too early, in which case the customer would be invited to select an extra feature to be developed in that iteration (provided the feature would fit in the slack room we had).

This chart shows clearly what is going on in the project, and you can easily expand this chart to encompass the overall project, not just the current iteration.  What if this graph represented the overall project and we were 1/3 done.  What would you do?

  • you could cancel the project -- it sucks, but it's better to get out now than to start  a death march project that ultimately won't finish in time and won't help the business.  Better to lose $150k than $500k any day of the week.icon-cornflower-blue
  • you could cut scope -- maybe changing the icons to cornflower blue wasn't as crucial to the business as we thought.
  • you could remove impediments -- what if you found that the developers are all experienced ReSharper users and they could be more productive if they all had licenses?  What if we had trouble getting a hold of the domain experts and we were waiting too long to get answers?  We could make some changes there to streamline the process.  Most business have a ton of fat in the process.  We just need to find it and cut it out.
  • you could add more resources -- if the end date is firm, then we might add some new folks to the project.  This is a bit of a dangerous move, as adding too many people to a project tends to make it later, but in a lot of cases, and extra pair of hands will help.  We can ask the team what type of person they need and try to fill that role.

ed-harris-apollo-13This type of actual progress vs. planned progress reminds me of that great scene in Apollo 13, where Ed Harris' character is asking whether or not a spacecraft could do what they were asking.  A squeemish representative cowardly states, "The LM was not designed for this..."

"I don't care what it was designed to do, I wanna know what it can do!"

The original plan is only useful enough until it doesn't represent reality any more.  What is useful is our empirical data.  Our actual progress.  That allows us to make informed decisions about what to do next.

Lesson 3:  Actual progress is infinitely more important than planned progress.

At the end of a few iterations we'll get a pretty good idea of how many points we can complete in an iteration.  This number is our velocity.

If we have identified 600 points of features to complete until we're "done," and we're completing an average of 60 points per iteration, then it doesn't take a rocket scientist to tell that we'll be done in 10 iterations.  That's a powerful statement.  After a few iterations you can tell your customer, "based on our current velocity and the amount of work we've identified, we'll be done July 27th."  The next iteration this date will get closer and closer to the actual "done" date.

Lesson 4:  Calculate your velocity and use that to plan for the future.

Burdowns (along with other related practices and ideas) are an incredibly effective tool to help you reign in your out of control projects.  Plans, road-maps, and timelines are all effective tools until they're not reality.  Learn from your past performance and project this onto the future.

I've only scratched the surface on how to effectively use burndowns on a project.  Some other important aspects are defining what "done" means and continuously improving the process.  If you're interested in implementing burndowns, I highly recommend you read these books:

Saturday, May 03, 2008

ASP.NET MVC Preview 2 Update

I’m upgrading Code Camp Server to the latest drop of ASP.NET MVC (which is just an interim release, so you might not yet care) but I wanted to get some first hand knowledge of how the new changes work out.

I won’t go over every change, because The Gu has a great writeup already.  But there are a few thoughts I’d like to share.

Routing

Routing is getting mature, and quick.  The fact that we can use this in our WebForms projects is really cool.  With routing getting more and more features, it is critical that you have extensive tests around your routes.  Imagine that you have an application already deployed.  A single change to the routing assembly (or the registered routes) can have a drastic effect on your application.  Existing links could be broken, new links might not work the way you expected, and you will severly cripple your search engine ranking.

Code Camp Server definitely needs to get an exhaustive set of routing tests to verify each of our URLs is functioning properly.

ActionResult

Instead of having controllers directly render views or redirect to another action, they have extracted this into ActionResult classes.  While the syntax is a bit quirky (“return RenderView”) this is a good design choice in my opinion.  If C# were as flexible as Ruby, we could still have the single “RenderView” method call, and the last statement would actually get returned to the calling method.

Our tests for Code Camp Server will be a lot cleaner.  No more test subclasses.  A lot less mocking as well, since now you can rely on plain old Asserts on the ActionResult .

This ActionResult change never made it to ComponentController though, but it will likely be there in the next drop.

Aside from the readability hiccup with “return” I don’t see any downsides to this change.  Anybody else experience any?

Validation Love from Steven Sanderson

Some people wonder how to do validation, since the existing ASP.NET Validators don’t work with ASP.NET MVC.  I ran across this, where Steven Sanderson shows how to do Model-based Client-side Validation in ASP.NET MVC using Castle Validator.  There’s even a 6–minute screencast!  Keep that kind of stuff coming Steve! 

Friday, May 02, 2008

I'm an Insider

Quick update:  I've been invited to join ASP Insiders!  I'm proud to be part of a select group of ASP.NET professionals who reach out to the community via forums, blogs, conferences, etc and are generally recognized experts in ASP.NET.



Some of the benefits of being an ASP Insider is to get in on some private discussion about design, new features, etc.  While I cannot publish any of this on my blog, I will be able to provide feedback in some areas (such as ASP.NET MVC).

Now, to go learn the secret handshake..
Monday, April 21, 2008

ALT.NET - Day 3

Day 3 started out with some breakfast at the DigiPen campus.  The first session was on Lean Software Development.  Evan Hoff was supposed to convene this session, however he had to leave for the airport.  Dave Laribee filled in.

Lean Software Development

IMG_0262

Notes:

  • Lean really refers to lean manufacturing
    • manufacturing is a much more appropriate metaphor to software development
    • focus not just on software development, but on entire value stream from inception to delivery
    • Everything is a pull.
      • i pull requirements off of a “shelf” someone should put the next one up there for me to grab it.  If there isn’t one there when I go to pull, waste occurrs, because I am waiting on something that I need. 
      • This concept goes all the way down the chain
      • everything is a customer/supplier relationship
    • Goal of any business is to make $
    • focus on flow (value stream)
    • I need to read these books:
    • I think a good metaphor for this is to picture a rope that goes from the beginning of business actions (ie: a CEO makes a decision to create value for the business) to the end (business value).  A number of interactions take place along the rope, and anytime you are pulling what you need from your “supplier” you have to have the slack, otherwise the rope will go taut.
      • eliminating waste would mean to minimize the tension *and* the slack in the rope.

I found a lot of value in this session because it seemed to pinpoint some of the issues that I face in my current project (ie: not technical problems, but getting customer involvement, prioritization of features based on business value, rather than tasks in TFS, etc).

I hope I didn’t steal the stage at this session, but I felt like Lean is probably going to be an area of study of mine later this year (once I dwindle down my book list!).

Advanced Techniques & The rest of the team

Some controversy surrounds development techniques such as IOC, SRP, ORM, AOP, etc.  These are all complex topics that solve complex problems.  For a team to not know how to deal with this, it can be fatal to a project.

Oren said that he tried to “hide” all of this from his team, so they woulnd’t have to learn it.  What happened?  A year later (this week) he received a call and someone asked him what “that windsor file was.”  I think it was obvious that this technique has a high “bus” factor.  (I.E. what would happen if you got hit by a bus?)

Scott Bellware noticed that we kept saying “Us” and “Them” — which leads to distrust and lack of empathy.  No really solid answers came out of this session, but a lot of folks concurred that an incremental approach to using very advanced techniques is ideal.

Oren recommended Release It! for the 100th time.  I think I need to buy that book  (but I already mentioned my reading backlog).

“Find the friction points and remove them” — Oren said this referring to abstracting away the infrastructure in an application.

Round table & lunch at Thai Ginger

The sessions came to a close and we all gathered in the main room again to do the final round table discussion of what we liked.  We passed around a stick and said what we liked about the conference.  The stick was much nicer than the sweaty putty we had last time.  It was a little sad to have the event come to a close, but as they say “When it’s over it’s over”

Endofday1

We met Donald Belcham and some of the rest of the Canadian Contingency (TM) for lunch at Thai Ginger.  The waitstaff was friendly and the food was excellent.  We even had a surprise visiter!  Hey, how’d you get there?

Lunch-endofday

Ending Thoughts

This 2nd ALT.NET Conference was so much more profound than the first.  There were no sessions on “Are we hurting feelings” or “Can we change the name?” and more topics like “Git” and “F#” and “Coaching Agile Teams.”  Doc was right when he said that in Austin we were very much a “storming” team.  This time around we were definitely “norming” and likely “performing.”  I think the next ALT.NET in Austin (dubbed “Continuous Improvement”) will be even better.

Bye ALT.NET Seattle!  See you in Austin this October!

Tags:

ALT.NET - Day 2 Continued

I’m sitting here at SeaTac Airport and really soaking in all of the events from the weekend.  Here is the finished recap of day 2…

Lunch was next, and Microsoft provided some really good sandwiches. 

Lunch

Lots of conversation continued…  I think these guys are talking about how to leverage SharePoint in all software development efforts.  Or maybe not

Conversations3

Some people took this time to do a little work…

Orenhardatwork

In this time Oren probably rewrote SVNBridge or something.  You know, about 30 minutes of work.

Here’s Phatboyg:

IMG_0217

and good ‘ole JP Boodhoo is always fun to chat with:

IMG_0218

Jeffrey Palermo was working on a Youtube video of the participants.  Somehow I was edited out of his video.  Intentionally?  I think so.

IMG_0222

I mean come on, just look at that evil smile!

Talking to Suits

IMG_0223

After lunch I went to “Talking to Suits” which was a pretty good discussion, however there was a lot of noice chat in my opinion.  I got the most value out of listening to Udi Dahan, Chad Myers, and Jim (effin) Shore (!).

Notes from the session:

  • Problems:
    • Fear
      • lack of stuff (documentation, etc)
      • no trust
  • Some people suggested the subversive approach to agile.
    • can work for TDD, CI, etc. but those things are more about quality.  Your manager won’t care how you do things if you present it to them in their terms (ie: code quality, better maintainability, less bugs found in production, etc)
    • you can’t sneak in trust though
  • Need to exhibit empathy, respect and understanding
  • Convey the value in terms of the “suit” 
  • “Suit” was chosen deliberately to convey perception (back to respect & empathy)
  • The “suits” are not opponents
  • Good book:  Rules for Radicals

IMG_0224

IMG_0225

IMG_0226

Behavior Driven Development

The next session was a tough choice.  I started out in the BDD session.  Unfortunately Scott Bellware had some computer hiccups (I think Windows sabotaged him) — anyway he lost about 10 solid minutes just on setup. 

Points were:

  • TDD tests don’t prove any business reason why the test even exists in the first place.  With BDD, your tests are directly tied to a feature, so you are less likely to start building features that are not even needed.  TDD can’t protect you from that.
  • To Estimate user stories you must have some acceptance criteria for the story.  That can be technical or non-technical / functional or non-functional.  This drives your BDD Tests, or “specs.”
  • It’s ok to have very technical acceptance criteria like “An order table must be created to store the orders” — Stories are not a customer artifact, they are a team artifact.

IMG_0228

IMG_0229

IMG_0230

Yes that guy *is* wearing a utili-kilt.  He does that.

The material that I saw was pretty much the same as what I’ve seen before, so I decided to duck out and check out the NHibernate for Deadheads talk.

NHibernate for Deadheads (or with Cartoon Bears)

To my extreme disappointment there were no cartoon bears in this session, but it was a pretty good Q & A about what NHibernate is good at and why people should not cling to traditional stored procedure + datasets method of data access.  I was able to contribute to this session, so that felt good.

After Oren and I went back & forth for about 30 minutes about effective use of NHibernate he finally came up to me and noticed my nametag.  It looked like this:

Ben Scheirman
@subdigital
http://flux88.com

He finally put it together, as we have talked a bunch of times online, but he hadn’t put my name to my face to my blog, etc.  It was pretty comical.  Next time we should have everyone do nametags.

IMG_0231

IMG_0233

Notes from the session:

  • What about sprocs?
    • sprocs offer no perf benefits over properly executed dynamic sql, which nhibernate does.
  • What about the generated SQL?
    • most of the time it is quite good.  NHibernate is better at it than I am in a lot of cases.
    • The cases where you find that there is a specific query that you want to use and NHibernate chooses to do it a different way, you can provide these as named queries to NHibernate.  Use SQL Profiler and be aware what’s going on w/ your database.
  • NHibernate complexity
    • too steep a learning curve for new folks
    • once you “grok” it you can be incredibly productive.
      • the data access becomes a solved problem
    • irresponsible development leads to serious N+1 select problems.  Need to first identify where that happens then find out how to fix it.
      • to identify:  can use Ayende’s PagePerformanceModule and limit the # of queries at a per page basis.  This is very quick feedback.
      • to fix:  understand lazy loading and eager fetching.
    • object design can affect this
      • deep inheritance hierarchies (while generally painful in OO) pose big problems depending on the strategy you use
        • table per subclass: lots of joins & extra queries to get the data for 1 entity
        • table per concrete class: lots of duplication
        • table per hierarchy: flattened table with all columns for all derived classes.  Limits queries needed, but then you have strange db semantics and no clear way of putting not-null constraints on some columns.  Perf problems with lots of columns as well.
    • lots of people have seen NHibernate used poorly… including me
      • how to fix this?
      • NHibernate gets a bad rep
      • unfortunately we didn’t dig deep enough here.

Some people expressed concern with NHibernate XML mapping (learning, understanding deep concepts) –– Chris Ortman and Oren both mentioned using ActiveRecord attributes to manage this.  I interpreted this as saying Use ActiveRecord (as in, inherit your entities from ActiveRecordBase<T>, which is something that I don’t really like to do).  Chris later suggested that I look at RhinoCommons to see how Ayende does Repository<T> with classes that have ActiveRecord attributes.  They are not quite POCO’s, but at least the class doesn’t inherit from a persistence aware base class.  I will definitely be looking into this.  (Damnit, when will planes have wireless internet for us?!?!)

Double Double “D” (or Distributed Domain Driven Design)

I wanted to go to this session in hopes of getting some more structure around what Greg Young was actually talking about.  Right now I’m not really feeling the pain of what he’s talking about so I think the talk was a little over my head.  Some good take aways:

  • “How many of you have an EmailGatewaySerivce in your domain?”
    • about 15 people raise their hand
  • “That’s a noun.  But does it belong in the ubiquitous language?  Do you talk to your business experts about this EmailGatewayService?”
  • convert it to a verb.
    • Create a new SendEmailMessage, pass it to a message handler
  • DDDD can help you scale to extreme levels by decoupling your domain from itself.  (ie: internal messaging, not just over service boundaries).

IMG_0238

About this time I saw a tweet by Matt Hinze that the Pair Programming session was pretty cool so I snuck out and went to check that out…

Pair Programming (Ping Pong Style)

Chad Myers and Ray Houston paired up for this one to demonstrate how to use the ping-pong-pairing technique & TDD to build out a flash card system.

Ping-poing paring goes like this:

  1. I write a test.  I make it compile.  I run the test.  It fails.  I slide the keyboard to you.
  2. You implement the bare minimum code to get the test to pass.  Make sure you don’t add gold plating or nice-to-have things here.  Once the test passes, refactor to remove duplication and code smells.  Now you write a failing test.  Make it compile.  Slide the keyboard to me.
  3. I implement the features, following the same steps as #2.
  4. Repeat until feature is done.

In this sense there is a good rhythm to pairs.  Each person has a specific set of things to do, and the person watching can help them avoid pitfalls or shortcuts and generally keep everyone honest.  It’s like continuous code reviews.

I think a lot of people got some good info on TDD and RhinoMocks from this as well.  Ray Houston is a BDD Practitioner, so I noted his style of naming test classes & methods.  I may start doing this very soon, as BDD is just making more and more sense.

Chad and I did a screencast doing this same thing last week but CamStudio decided to crash while encoding the video and we lost the whole thing.  Some folks expressed interest in us doing this again.  I wish Camtasia had a community or personal license that was cheap.  That’s such a good tool.

Wrap up & Dinner at Mehfil’s Fine Indian Restaurant

We wrapped up the day with Doc admiring the amazing thing that is Open Spaces.  It’s so interesting to watch a group self organize and see awesome results emerge.

I could tell that most people were mostly drained.  It takes a lot of mental energy to engage at a high level like that the entire day.  Add to that the fact that probably half of the attendees were also at the MVP Summit last week.  What I’ve found after both ALT.NET conferences is that I need a couple of days to really let everything process and to make some goals about how I want to take that knowledge and energy to go do something good.

A good bunch of us went to Mehfil’s (an Indian Restaurant).  I sat at a table with Russell Ball (Caffeinated Coder)and Ian Cooper.  Most of our conversation was around world politics and history, which was quite interesting.

I went to the bar for a few drinks and to talk to Steve Harman about some SubSonic thoughts.  I was pretty beat, so I went up to my hotel to crash.

Stay tuned for my recap on Day 3…

Tags:
Sunday, April 20, 2008

ALT.NET - Day 2

And so Day 2 comes to a close.  One of the biggest problems with this conference is that at any given time I will want to attend 2–3 simultaneous sessions.  Fortunately, the open spaces format allows anyone at anytime to float (I think the term is “be a butterfly” or “be a bumble bee”).  I did this in a few sessions to maximize the amount of sessions I could attend.

We started out at Ruby’s Diner for breakfast.  I arrived at the event to see people looking at the schedule wall.  It’s really amazing to watch a conference self-organize like this.

Schedule-wall

Our facilitator, “Doc” List, did an excellent job of setting the ground rules and clearing up a few scheduling hiccups and quickly we broke out into sessions.

Opening-altdotnet

What’s with all the white guys?

The first one I went to was: “What’s with all the white guys? (Diversity)” convened by Scott Hanselman.  We talked more about women in computing and why there is such a low ratio of men:women.  Some argued that it was genetics, some argued that it was cultural or parental.  We also talked about how Computer Science curriculums have highly technical weed-out courses at very freshmen levels.  I think this breeds a group of smart people, but also tends to attract people with limited social maturity.  This can either make it not fit for most women (if I am going to make some generalizations) or possibly make it a difficult environment for women.  I think it’s also good to note that in software, there is very much a “people” aspect that a very large percentage of CS majors would not qualify for.  (MIS may be the answer to this, but at UH, some joked that MIS was for “CS Dropouts”).

Diversity

Scott talked about he has spoken at high schools to break down the technology behind MP3’s, for example.  Most of the audience wouldn’t care, but there would be that 2 or 3 people that would take interest and that can make a difference.  The 2 women that were in the room were encouraged to try that out.

I was happy to note that our female attendance this year rose 400% (to 4 women).  Hopefully this number will change in future events.  I think it’s important for our community to be accepting and diverse.

After the session ended, we gathered in the main room again to chat for 10 minutes or so before the next session began.  There were some really cool conversations going on around just about every corner.

Conversations1

Hallway-conversations

To Mock or Not to Mock

The next session I attended was about mocking.  It was a pretty good fish-bowl session and a lot of good conversation was had.  Towards the end it spun downhill due to some harsh arguments and I think this was the most “unprofessional” of all the sessions.  Overall though, I got some good information about how some people manage pain with mocks and whether or not Auto Mocking Container is a design smell.

To-mock-or-not-to-mock1

To-mock-or-not-to-mock2

I will finish up the rest of the day in a later post, because I have to get ready to go to brunch!

Tags:
Saturday, April 19, 2008

ALT.NET - Day 1

I’m up here in Redmond for the the 2nd ALT.NET Open Spaces gathering.  The first one was truly a great event.

Unfortunately I flew up Friday afternoon and missed the Friday night fish-bowl session.  I had to miss this last year as well, and next time I want to come up early enough to participate.  The fish-bowl session (from what I gather) is a rount-table discussion about the topics that should be covered in the open space the following 2 days.  If you want to learn about F# or Git, shout it out!  If you want to talk about jQuery or BDD, then let it be known.  People gravitate to the good ideas and that’s what’s covered.

I decided to rent a car and drive to my hotel.   I figured it would be cheaper than taking a taxi and easier than bumming rides off of others.  I checked in and quickly headed over to DigiPen, where the conference is being held.  Stupid me, I forgot my jacket and it was snowing!  I ran into Eddie Bauer next to the hotel and picked up a jacket to keep me warm.

digipen-nintendo-buildings

The campus is next to Nintendo, as you can see in the picture.  I’ve heard that DigiPen graduates are guaranteed internships at Nintendo.  That’s awesome.

I ran into Brian Donahue, Dave Laribee, James Thigpen, Raymond Lewallen at the front.  Inside the main room there were about 120 geeks all chatting intensely.  I glanced around and saw many known faces in the industry.

After a while a bunch of us headed over to Desert Fire, a southwestern grill near the hotel.  The room was probably going to exceed fire code and would definitely impede us getting some much needed food (and beer!) so a few of us decided to go get a different table.

If you’re on twitter, then check out the hashtag #altdotnet to see the live tweets about the conference.  For me, I don’t do much mobile tweeting, but I might post a thing or 2 during the day, so follow @subdigital if you’re on twitter.  Here is Jeffrey twittering on his phone at the restaurant:

IMG_0197

Next to Jeffrey was Jean Paul Boodhoo, who was chilling out with a large glass of milk:

IMG_0198

Here is the rest of the table:

IMG_0199

There’s Evan Hoff, Chris Patterson, Dave Woods (forgot your last name!), Dru Sellers (behind Dave), and one of Chris’ co-workers, (I forgot your name as well!).

After dinner it was drinks and geek discussion in Phatboyg’s hotel room.  Here’s the night’s progression:

IMG_0200

IMG_0202

(luckily only 2 of those were mine, otherwise I’d be hurting this morning!)

ALT.NET day one was pretty fun, but I’m looking forward day 2.  Right now I’m off to eat breakfast with some people at Ruby’s.  Until next time!

Tags:
Debt - Credit Counseling - Money - Credit Card Consolidation