Skip to main content

PMP, Agile and a true development process

Over the last couple of years, the PMP title has become the latest fashion accessory. Unfortunately, most of the people I've dealt with have tried to enforce every facet of PMP on even the smallest of projects. They've also mostly been freshly minted so they really don't have any experience. All this has lead to projects mired in paperwork, behind schedule and ticked-off users.

Over the years, I'd developed my own style that seemed to work and got a few requests to teach my style to some of the other developers. Problem was, I'd never really formalized anything. I just kinda did things. So over the last couple of months, I've been working on formalizing some things.

I spent some time looking into the PMP and can see where it would bring extensive value to lots of projects, especially construction or manufacturing. There are pieces that I can see would be beneficial to the contractual side of software development. The main thought I had was that PMP would never directly lead to even one line of code! Worse, a manager would never be able to tell the true status of a software project really because they don't work like that!

PMP is based on dependencies between segments and developers actively try to avoid those dependencies to prevent fragile designs. It also considers something complete when we know that change is inevitable! The specs from yesterday are not the specs for today. That library we completed yesterday can, and probably will, change today!

I'd looked at Test Driven Development and found I was doing some of the techniques but not all. I'd also looked at Agile software development and found the same thing. Further research into both lead me to a book that pretty much had everything I used. The book? Agile Principles, Patterns, and Practices in C# by Robert C. Martin and Micah Martin.

This book truly lays out a process for developing software. Manager, architect and developer will find what they need. For the developer, it has how to get stared coding now while still being able to answer the managers questions (can you say Status Report). The architect will find all of those things you've been thinking or saying for years neatly. Design patterns, UML, code smells and my favorite, design smells are all found in this book.

The best part about this book is not what is says to do but what it says not to do. The mantra carried throughout this book is "Don't produce a ton of paper that will be thrown away or change tomorrow". Since I hate wasting time on needless documentation, this book spoke my language. Before you say that your bosses will never go along, remember this. I work in a shop that defines anal. They believe that if you don't have it in triplicate, it's not real. This book gave me all the ammo I needed.

Another book you may want to invest in is Head First Design Patterns by Eric Freeman, Bert Bates, Elisabeth Freeman and Kathy Sierra. This presents the top design patterns in a funny manner. Head First books are definitely not your standard tech books.

Between these two books, I have been able to "formalize" my style and have actually enhanced it. Things that I did because they seemed right, I now can name and articulate the reasons for using or not using them.

What about PMP? Is PMP bad? No. Should I avoid PMP like the plague? No, but don't do it because it's cool. Pick the parts of PMP that bring value to the project and use them. If someone can't show or explain the benefit of a document, don't produce it! Most of all, skip the PMP checklist.


Popular posts from this blog

JavaScript function to automatically add slashes to date

In converting an old Windows app to a browser app, the user wanted to be able to enter dates without the slashes. Here's a simple jscript: 1:// Function to convert short date string (MMddyy) 2:// or (MMddyyyy) to a date string (mm/dd/yyyy). 3:// txtBox is the actual textbox control 4:// with the value to be processed. 5:function FixShortDate(txtBox) { 6:if (txtBox == null) { 7:return'' } 8: 9:var re = new RegExp(/(\d{6})(\d{2})?/); 10: 11:if (re.test(txtBox.value)) 12: { 13:if (txtBox.value.length == 8) { 14: txtBox.value = txtBox.value.substring(0, 2) + '/' + txtBox.value.substring(2, 4) + '/' + txtBox.value.substring(4, 8) 15: } 16: 17:if (txtBox.value.length == 6) { 18:if (txtBox.value.substring(4, 6) < 20)

Migrating Legacy Apps to the New SimpleMembership Provider

Asp.Net MVC4 uses the new SimpleMembership provider, changes the table structure and adds a new hashing algorithm. The reasons for the changes can be found in this article by Jon Galloway. This article shows how to migrate your existing apps to the new provider.I’m assuming that you stored your passwords in the unrecoverable SHA-1 format. If you didn’t, then you’ll have to change a couple of things. All of my apps are done this way so… I’m also assuming that you have created the basic skeleton of the new app and ran it once so the correct tables will be created.First, we’ll look at the new tables. Previously, we had all of those aspnet_xxxxxx tables. Here’s the new ones.UserProfileContains all of the elements relevant to the user. This is a combination of the aspnet_Users table and the aspnet_Profiles table.webpages_MembershipStores the password info when not using OAuth, Live, Facebook, etc. This table is somewhat of a match to the aspnet_Membership table.webpages_OAuthMembershipStor…

Get Asp.Net Profile properties from Sql

Ever wanted to include the profile information from an Asp.Net profile in a query? It’s not that hard once you understand the structure. I’ve written a little function that does all the work. Note: I’m using Sql Server as my repository.

First we need to understand how the profile data is stored. Looking at the aspnet_Profile table, we can see that it stores the information in two columns: PropertyNames and PropertyValuesString.

Looking at PropertyNames we can see that it has a basic structure of Property Name, Data Type, Starting Position and Length. For example, in the string “FirstName:S:0:4:Phone:S:4:10:LastName:S:14:5:” we can see that FirstName is of type string, starts at position 0 and has a length of 4. Notice the zero base for the starting position, we need to correct for that in our function. This means in the PropertyValuesString “John2175551212Smith”, we would start with the first position and proceed 4 characters to get the name.

You might be thinking …