Should I close the cli_dev (altnetconf) Yahoo group?

RSS feed:

I have set up a poll on the cli_dev yahoo group here:

I feel an obligation to follow up on this issue since I am the group owner on record with Yahoo.

Here is a message I sent to the group just in case you no longer track the list formerly known as “altnetconf”:


I am the yahoo owner of this list. I originally grabbed it so that
we’d have a place for discussion after the October AltNetConf. I
deferred to David Laribee and Scott Bellware when it came to leading
and fostering the Alt.Net community.
It appears now that there are other lists where the Alt.Net dialog is
I have created a poll:
Please let me know opinions. It seems that spammers are auto-creating
accounts, and the relevant discussion here is very sparse.
If the poll results in a “yes” answer, I’ll take down this list.


I believe that it’s possible to shut down the list while keeping the history searchable, but that’s another decision to be made:  Keep the history or trash it?

Opening up Monorail’s SmartDispatchController for easy unit testing

Monorail’s SmartDispatchController is fantastic.  One small hurdle is testability right out of the box.  For instance, if I have a controller action:

public void Foo()
    Session["somekey"] = new object();
If I want to unit test this action, I need to get at the Session IDictionary.  It’s protected, so I can’t get at it in a unit test to ensure the object was added to session.
Here is a quick way around this problem:
Make your own controller base class that derives from SmartDispatchController.  Then add the following method to the base class:
public new virtual IDictionary Session
    get { return base.Session; }


Now, for testing you can get at the Session property, but at runtime, there is no change.

Going and speaking at Tech Ed 2008 Developers: session catalog available

This year, Tech Ed has been divided into two conferences.  June 3-6, 2008 is for developers, and June 10-13 is for IT Pros.  I’ll be speaking at the developers conference and giving three sessions (rss feed:

  1. Black Belt Software Configuration Management: Source Control, Builds, Database Migration, Testing, and Deployment (Development Practices track):  As part of the new “development practices” track, this session will focus on all the ways to make the development process speed up.  So many of these practices are emphasizes in extreme programming, and I’ll be sharing the combination I and my company use to make software projects manage themselves.  All tools demonstrated with only require the VS 2008 Pro sku.  You can have an awesome SCM process without purchasing VSTS.
  2. Data Access Layer: Architectural Concerns for Object/Relational Mappers (O/R-M) (Architecture track):  All examples will use NHibernate, but that’s not the focus of this session.  This session will speak to the architecture of a system that uses and O/R mapper.  One of the common, early mistakes of folks starting to use O/R mappers is mixing data access and domain logic.  Having used NHibernate for over 2.5 years, I’ve worked out how to build an application that uses an ORM without the whole application knowing about it.  Lessons in this session can be applied to LINQ to SQL and EF as well.
  3. Model View Controller (MVC) Architecture Pattern: Considerations for the New ASP.NET MVC Framework (Architecture track):  There will be plenty of talk at Tech Ed about the new ASP.NET MVC Framework, but this is the only talk scheduled that purely addresses architectural concerns.  I think it’s fairly easy to pick up Monorail or ASP.NET MVC and start using it, but it’s not easy to immediately understand how to set up the presentation layer when leveraging the MVC pattern, regardless of framework used.  This session will cover project references, early and late binding, testing architecture, and builds.

All of the techniques I demonstrated in my sessions will use VS2008Pro (not VSTS).  My goal is to maximize the audience that can benefit from the session, not just those whose companies have purchases team system.  With that, I’ll be showing lots of other tools, some free, some commercial.

I’ll also be planning a Party with Palermo for Tech Ed that will be held on June 2nd at 7pm, so stay tuned for those details.

This will be my first time speaking at Tech Ed, and I’m a bit surprised that they accepted all my session proposals given that I’m not one to openly evangelize the latest and greatest from Microsoft.  Each of my sessions will be focused on how to get work done, not tell you how great products are.  The ASP.NET MVC Framework is new, and lots of people are in love with it. I’m an early adopter, but I also am compelled to address challenges of the framework and how to get around them.  It’s not all gravy, so prepare to get your hands dirty if you come to my sessions.

I have an Agile/XP focus in software development as well, so that will come through regardless of the topic on which I’m speaking.  If you are planning on going to DevTeach, Toronto, I’ll be giving the Blackbelt SCM and ASP.NET MVC talk at that conference as well.

Announcing ASP.NET MVC in Action (from Manning)

ASP.NET MVC in Action is a book from Manning that covers the newly-released ASP.NET MVC Framework. Jeffrey PalermoBen Scheirman, and Jimmy Bogard teamed up to write this advanced volume.  It is not a beginner book.  It is not a professional book.  It is an advanced book for ASP.NET professionals.  These three Alt.Net authors share best practices, patterns, and lots of opinions on how to use the new framework. 

UPDATE:  9/21/2009 – The book is published now.  You can find more information here.

[tags: aspnetmvc mvc palermo] 

Pain-Driven Development: uncovering the motivation

To subscribe to my feed, add the following Url:

Kevin Hurwitz and I talk at length about pain-driven development.  For those who don’t know, Kevin is my lead architect and .Net Practice Manager at Headspring Systems, and we’ve worked together since mid-2006.  We both have the same mindset about PDD.  If we are motivated to put time into changing some aspect of the software, it has to be related to one or more areas of pain.  For instance, if the build is taking too long, we might look for ways to speed up the build.  If a particular interface has too many responsibilities, it may annoy us enough to break it up. 

Now, we do have a low threshold for pain.  We expect our software configuration management to be frictionless and go completely smoothly, including automatic database migrations; therefore, pain points that pop up are obvious, and we tend to kill the pain by fixing the source very quickly.

The point of this post is to think of pain reduction as ROI.  In business, we might spend money on software for some expected return on investment.  While working with the software, we also have returns on investment, but in the form of productivity.  Pain kills productivity.  Over time, we might learn to live with pain through parts of the process by taking a constant does of <insert painkiller here/>, but that only hides the pain.  It doesn’t cure it. 

Pain-driven development is a mindset where developers react intensely to pain and solve it so that it goes away once and for all.  PDD practitioners don’t just cover up the pain.  We eradicate it.  PDD leads to a completely frictionless software process that is a joy to experience.

Note:  I’m not advocating another XDD acronym, but I wanted to share our mindset.

First make it right. Then make it fast.

To subscribe to my feed, add the following Url:

I spent the first part of my career on the side of the fence where I want to make it fast first.  In fact, I wanted to keep it fast all the way through.

I’m talking about software.  Performance optimization.  Speed. 

There was a time when every time I concatenated a string I weighed the theoretical pros and cons of using the plus operator vs StringBuilder vs. string.Format().  I even measured differences.  I’ve now come to the point where I realize that PDD (pain-driven development) is the real decision-maker.  It’s no longer worth my time to think about what concatenation method might be faster.  Compared to a single database call, the speed different is irrelevant.

Point:  A well-designed application can be tuned at any conceivable place after it’s working correctly.  An application that has “performance optimizations” coded into it from the start has less flexibility for the inevitable bottleneck that surfaces unexpectedly.

Point:  I will not guess at what part of my code will be a bottleneck unless I have past experience in the exact same scenario.  Rather, I will lead the team to create correct software that _appears_ to be fast enough throughout the project.  At an agreed-upon time we’ll profile (with the appropriate tools – yes, I mean _measure_) the application and find any bottlenecks that are not acceptable for production.  Then, with real data in hand, we’ll tune exactly the right parts of the application.  We will not guess before measuring.  After measuring, guessing is not necessary.

Point:  First make it right.  Then make it fast.

In general, out of process calls are performance bottlenecks, not in-process logic.  Either way, measuring tells the truth, not guessing.

NAnt 0.86 beta 1 nightly build seamlessly supports .Net 3.5 and a host of other platforms.

To subscribe to my feed, add the following Url:

With the original 0.86 beta 1 release, there was a small problem with folks who only had VS 2008 installed because there was a dependency on a registry key that was installed with the .Net 2.0 SDK (or VS 2005). 

The latest nightly build has fixed this, and a clean machine with VS 2008 can now use NAnt just fine.  CodeCampServer is using NAnt 0.86.2909.0, and it’s working well so far. 

I have to say that over the past 2.5 years, I have been very pleased with NAnt.  It is a great open-source build tool, and it integrates with every other command-line tool I could want.  I normally <exec/> out to msbuild.exe for the compile.   I have a NAnt build template available in my public source code repository here.

Use caution with anonymous types and other new C# language features

To subscribe to my feed, add the following Url:

I think Microsoft is making a huge mistake by leaning so heavily on anonymous types as API parameters, particularly in the ASP.NET MVC Framework.  Not only does this make the APIs in the system ugly and error-prone, but it’s not intuitive, and there is no intellisense for it because the API is untyped (typed as object) in the case where an anonymous type is expected.  I think we should stick with named types and named methods wherever possible.  I currently don’t see a problem with lamda’s if they give an advantage over regular arguments. I’m very cautious about automatically using new, unproven language features before we fully understand how they will affect the usability and maintainability of code.  Note:  we have NO track record for the maintainability of these new language features, and they were developed specifically for LINQ, so using them outside of that context is suspect, in my opinion.

I do have a conservative disposition on this, but this is through learning from the past.  I still remeber OpenXML is SQL Server 2000: how so many developers automatically converted stored procedure interfaces to be a single XML string rather than individual arguments.  We need to fully understand the long-term strengths and weaknesses of features in order to maximize the value of usage or non-usage.

Party with Palermo : MVP Summit 2008 edition – save the date

The time is upon us again.  Announcing Party with Palermo: MVP Summit 2008 edition on April 13th, 2008 from 7pm – 10pm in Seattle, WA

The last PwP at the MVP Summit in 2007 saw 235 wild and rowdy developers having a great time.

At this time, the registration website is not ready, but details will be coming soon.  Check back frequently, and subscribe to the party feed at

If you or your company is interested in sponsoring, please contact me at jeffrey [at]_ palermo d0t cc.

The purpose of this event is completely social and a fun way to kick off the week.  Anyone is invited, and the only cover charge is a single business card to keep our sponsors happy.