Technology is a means, not an end.

ASP.NET MVC Reserved Words

A project I’m on recently encountered a little known bug that I had to share, mostly so I can google my own brain later on this. MVC has a set of reserved words that cannot appear in your URLs. This includes CON, COM1-COM9, LPT1-LPT9, AUX, PRT, NUL, etc.

So how do I disable this lovely feature?

    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

More details can be found at Phil Haack’s post about this same topic.

World Cup Tie Breakers

Alright, so Portugal pushed the United States into a tie in our match at the World Cup. I’ve seen some horrible reporting on what this means this morning, where clearly the journalists could not be bothered to read the regulations of the World Cup, specifically pages 25 & 26 where the tie breaking rules are explained.

In the league format, the ranking in each group is determined as follows:

a) greatest number of points obtained in all group matches;

b) goal difference in all group matches;

c) greatest number of goals scored in all group matches.

If two or more teams are equal on the basis of the above three criteria, their rankings shall be determined as follows:

d) greatest number of points obtained in the group matches between the teams concerned;

e) goal difference resulting from the group matches between the teams concerned;

f) greater number of goals scored in all group matches between the teams concerned;

g) the goals scored away from home count double between the teams concerned (if the tie is only between two teams).

I’m specifically looking at you NBC sports who indicated that we could be forced to draw lots in certain scenarios. Every time their article says that, please note that it would be a g) scenario, which is not great for us, because we were the Home team against Portugal, as such their 2 points would suddenly count for 4 points against us.

Please, read the rules people. Fortunately, for us, all of that only matters is the United States loses their match. A Win or a Tie ensures our advancement.

If you’re a Portugal or Ghana fan, then a United States v. Germany tie is your worst case scenario. Any other result leaves some hope alive, though you strongly prefer a United States loss because of Germany’s huge goal differential lead. Either that, or you want the United States to win by 4 or more goals against Germany.

Thursday is going to be awesome. #IBelieveThatWeWillWin

Start a Process as Another User in PowerShell

Got asked an interesting question today, and the answer is worth sharing with everyone. If you have the username and password of another user, and want to run a command using their account, how would you do that? Like so:

# Test Data
# ---------
$userName = "FooBar"
$password = "FooBar"

# Helper Functions
# ----------------
function New-Credential($u,$p) {
    $secpasswd = ConvertTo-SecureString $p -AsPlainText -Force
    return New-Object System.Management.Automation.PSCredential ($u, $secpasswd)

# Do The Work
# -----------
$cred = New-Credential $userName $password
Start-Process cmd.exe -arg "/k whoami.exe" -Credential $cred

The Hierarchy of Pain

Over the last few years I’ve given talks several times on what I call the “Hierarchy of Pain”. This pyramid describes the pains felt by most large development organizations and provides guidance in how to address them.

The levels of the pyramid

At the base of the pyramid we have Character, this fundamental concept that is talked about in so many business books. Simply put you cannot have a successful team, division, organization or corporation without making sure you have people of trustworthy character filling roles. This segment covers everything from personal work ethic to honesty, and so much more. If you have problems at this level, fix them now. Mentor, coach, discipline or remove whoever the problem is based on your view of how correctable the problem.

Next we encounter Team, the realm of personal human interaction. Team problems can result from an emotional or motivational problem, leadership or direction problems, and personality problems on the team. Most managers have at some point in their career encountered two brilliant developers who simply cannot work together, that is a Team problem.

Process describes all interactions that are codified into rules, be it SCRUM rules, KanBan rules, Waterfall rules, or just “the things we’ve always done”. In larger organizations this also is the realm of culture. If your process doesn’t match your business, or any of a large assortment of other problems, they fall into Process.

Technology finally there is technology problems, those problems which are exclusively the domain of the software and hardware.

How to solve problems

There are two large mistakes that most groups make, and they compound on one another.

  1. Most managers are inclined to blame things higher up the tree, than lower down the tree, as the root cause of a problem.
  2. Most managers believe that a problem is best solved by introducing a fix at the level it occurred, or higher.

If Bob the Developer fails to update the database during a deployment, Fred the Manager might look at that as a failure of Process, the team didn’t follow the process. Unfortunately, Fred is wrong, this is a failure of Character most likely, Bob didn’t follow the process, and he’s fallen victim to mistake #1.

But since Fred things this is a Process problem he decides he is going to purchase a large build and deployment automation tool, aka Technology, to correct this problem. But he won’t be successful. Why? Because since the problem is actually a Character issue, there is nothing but a Character solution which it.

Proper solutions

When looking at problems within your organization, remember these basic axioms:

  1. A problem should be assumed to be at the lowest possible level it could have occurred at. Most of the time, this means Character until it happens consistently enough that it becomes obvious it is really Team or Process.
  2. Problems can only be solved, truly solved, at the level they occurred or lower on the pyramid.

I’ll likely talk more about this in future posts, but that is your introduction to the Hierarchy of Pain.

Favorites Dumps 2

Time once again to clear out the Favorites section on twitter and inscribe some of their wisdom permanently upon my blog for all to see.

Software Announcements

Commentary on Life

Links to Save

Improving Is Looking to Pay You to Learn

My epic employer, Improving Enterprises, has a equally epic new program that we’re looking to hire some new people for. We’re looking to take people with minimal to entry level development skills, not anyone who is building large enterprise applications today, and to hire these people and then pay them to go through a Boot Camp led by our best and brightest, and then at the end, provide some criteria are met, hire them as either Associate Consultants or Consultants within our organization.

Frankly this program is a huge opportunity and one I’ve been wanting us to have for some time now. You’re likely a candidate for this program if you meet these meager requirements:

  • Some programming experience is necessary.
    • Web experience is not necessary, though it is helpful.
    • Lack the experience or expertise to be an Improver
  • Exhibit excellent potential, aptitude, and attitude
  • Are willing to work long and hard over the next few months to become an Improver.

If you meet these requirements, then you can contact me at Tim@TimRayburn.net and we’ll get you submitted for consideration to the program. Initially we’re looking for 6 people.

If you submit yourself and are accepted should expect:

  • The program is 9-6 plus homework assignments including user group attendance and supplemental online courses.
  • It is intended to be an intensive, ‚Äúdrink from the firehose” experience.
  • You will be paid a nominal salary.
  • The salary will increase once you pass the board exam and become billable.
  • There is an interview process.

If this excites you, then reach out to me at Tim@TimRayburn.net or on Twitter/GitHub @TRayburn and we’ll get you started in the process.