0

Building Software, One Room at a Time

by Angela 30. November 2013 21:33

Comparing software development to “building a house” is one of those analogies that sets my teeth on edge. It oversimplifies everything that goes into designing and building a good product, and it also creates some unrealistic expectations in terms of estimation and effort, both for development and testing. I heard it yet again recently, and it just shocked me that it’s still being bandied about these days. C'mon, don’t act so shocked, you probably have said it yourself or heard it said at some point. I know I have, on both accounts. And you know what, it's OK, I’m not here to judge you. Unless you are still saying it, then I will judge you quite harshly :)

There was a time when this was far more true of an analogy than it is today. As someone whose original passion was "architecture", as in, creating blueprints for houses, it made a lot of sense.  Plans are good, and who doesn't like structure and rules? You see, there was a time when software was created by pouring over designs for the right "feel", sometimes for days or weeks to establish a solid foundation. Remember when SOA and OOP were the hot new things?  Before a single line of code was written we had UML diagrams and if we were really fancy stubbed out methods for the developers. And sure, when building a house every angle is inspected, measured and re-measured, the location and size of every supporting wall is verified, every window placement is compared to housing codes, all before a single piece of wood was sawn or hammer was swung. Then contractors are set loose with the specs to build the house according to a well laid out plans. Except what if by the time it was delivered, the homeowners didn’t want to actually live in the house they asked for in painful detail without some major rehab? The colors are all wrong, the yard is too small, the garage is too narrow, there aren’t enough bedrooms. Could you imagine?! In home construction, nobody sane would do that, and yet it happens all the time with software. Well, there you have it, the analogy is already somewhat blown. But there's more.

You know you've been on THAT project. You know the one - late, way over budget, customers are screaming that it isn't what they asked for even though you have signed requirements specs that say it is. Heck, even if you are just NOW getting into software development you're probably going to experience this still at some point. Particularly if you work someplace that is still stuck in a Project Plan driven mentality, a.k.a. "Waterfall" ::cue dramatic music::  Who just let out a little shudder? Now don't misunderstand, I'm not a hater, waterfall-based methodologies can work well in some scenarios, but generally even waterfall enthusiasts are not following a strictly traditional waterfall approach. And to be fair, even "real" waterfall, as I learned it back in college in the late 90's, dictated iterative practices. But often that little nugget gets lost in translation in favor of forever marching forward through a seemingly unending tunnel of quality gates, attempting to hit arbitrarily established milestones. So back to my original point. Building software is not just like building a house, or maybe the more correct way of conveying my thoughts is that building software SHOULD not be like building a house. And if it is at your company, I do not want to work there. Unless you're looking for me to facilitate an intervention of sorts. Let me explain...

Imagine you want to have a custom house built. And let's say you already know more or less what you want. Tudor style, 3 bedrooms, 2.5 bathrooms, eat-in kitchen, with a detached 2 car garage. Maybe you even have an existing blueprint because plenty of houses like that already exist, so why re-invent the wheel right? Work begins, and the house starts becoming real. But even after several weeks of work, while things may start to look like a solid shell of a structure, you cannot live in it.  Well, not legally anyway. There is probably no plumbing yet, certainly no electricity, perhaps the roof is not even yet in place. You also cannot decide you now want something more Spanish style, single storied and sprawling, with an attached garage and a courtyard garden in the center. Well, technically you COULD decide to do that but it would require MASSIVE structural rework, new permits, perhaps a different construction crew, and of course SIGNIFICANTLY more time and funding to complete. OK, so I suppose this is one parallel you can draw to software development, but again this is more of an issue in waterfall shops, particularly if you are already deep into development before someone realizes a much earlier decision was a poor one. Many thousands of man-hours will get wasted, people may lose their jobs, customers will be unhappy, and you likely will end up with a Spanish tiled, Tudor style home with a semi-attached 2 car garage that has a courtyard in the center of it. So with building a house, you will not realize the value of the product and be able to use it until the last finishing nails are hammered into the last room, and major feature change requests will almost always be unfeasible to honor even early on in the construction process without MASSIVE negative consequences. Do you want to build or pay for software that is built that way? I certainly don't. 

I don't see housing contractors ever building homes one fully functional room at a time, allowing the home owners to live in it long before it is finished. I do not see them redesigning the blue prints and only ordering enough supplies for each room about to be built to incorporate changing design trends, evolving safety codes, nor do I see them accommodating the ever-changing whims of the owners.  "Oh. You've decided you want an open floor plan instead of separate kitchen and dining rooms? No problem, we're just finishing the main bathroom and haven't even framed the rest of the first floor yet..." Yeah, no. I also do not see those contractors getting the homeowner's signoff on each finished component before moving on to the next one, incorporating feedback and change requests, continuing this iterative process until the house is complete. Maybe you're thinking, "well, we don't have the ability to do any of those things today when we design, code, test, and deliver software either". I'm sorry to hear that. We should talk, there's a 12 step program to help you, and you've already admitted you have a problem which is the first step to recovery. Well, there ISN'T a program, sadly, but I often joke that there *should* be.

Now this is an easier problem to solve in software. Software teams CAN be flexible, adapting to changing needs of end users. Software can be delivered in small, working, usable pieces to deliver value as soon as a few weeks after the project begins. And it doesn't have to cost more. It can actually cost FAR less if you do it right. This is part of the reason I am such a proponent of Agile and Scrum. But honestly that is another topic and this post is already long enough so we'll defer that conversation for now.

So here is one place where building a house and building software ARE remarkably similar.  Estimates. Regardless of what a contractor tells you, no one knows for sure exactly how long building a house (or software) will take. Sure we can ballpark it, but every job is different. People will sometimes push back and call that a copout consulting answer, but it's the truth, and I try not to make a habit of lying to the people paying me to work for them. And if you demand exact delivery dates, are unwilling to compromise on features (maybe the rotating shoe rack in the closet really isn't NECESSARY), and have immovable end dates, well, you may want to refer back to the 12-step program that I mentioned earlier. No one can account for bad weather, people getting sick, catastrophic hardware failures, or that the latest version of the .NET framework that was just released has added complexities that cause even the most experienced programmers to take 50% longer to get things done for a few weeks. Should you go so far as to expect the team to commit to dates, deliverables, AND cost - to the point they take a hit if any of those things slip - well, prepare yourself for a sandbag big enough to hold back a hurricane, or to have people eventually seek alternate employment. NO ONE wins. And yet these kinds of unrealistic expectations reoccur everywhere I turn in the tech world. Maybe someday more software teams will be able to hold stakeholders and end users accountable for the quality of requirements, and refuse to take on change requests after work has begun without serious concessions, seems logical and fair. Ahhh, dare to dream :)

So now can we stop comparing software to building houses? Please and thank you.

Tags:

Application Lifecycle Management | ALM | Agile | development | Process Methodology | Scrum | SDLC

0

These are a few of my favorite things about TFs 2013: Part 2

by Angela 12. November 2013 07:53

So hopefully you already caught part 1 where I extolled the virtues of Work Item Reporting. This time, I have moved into new territory!  I am in the middle of a big, slightly nasty, TFS upgrade and TPC consolidation project.  First thing is first. Attaching a legacy Team Project (TP) to TFS 2013 “upgrades it” but only in the sense that it works on TFS 2013. So you get everything you had before, but not necessarily ALL of the new stuff in 2013.  You probably have very little of the new features in terms of the “agile planning tools”. There were changes made to the underlying TP Process Templates to support new features like, the “Feature” feature :)

I apparently had been taking the TFS Configure Features Wizard (CFW) for granted. “The what?” you say…  Yeah, the thing that gets launched when you upgrade to TFS 2013 and you try to open something like the Product Backlog while connected to a legacy (pre-2012) TP. So if you’ve seen this message, the link at the bottom launches the CFW:

image

Often if you have an older, customized template (like modified CMMI 4.2), you can run into issues with the wizard.  You may be familiar with errors like this “[Error] TF400654: Unable to configure Planning Tools. The following element contains an error: RequirementBacklog” or “[Error] TF400654: Unable to configure Planning Tools. The following element contains an error: TypeFields/TypeField[type='Order']“. Makes sense, there are some HUGE deltas between older templates and those in 2013.

image

So the CFW is super easy to use if you can upgrade with the OOB templates, especially if you’re just upgrading one version behind. And how often does THAT happen in the real world? Right. In our case we have TPs coming from TFS 2005, TFS 2008, AND TFS 2010 and all the templates are customized versions of CMMI. Oy. I decided to begin by upgrading the 2010 TPs since they were the most straight-forward and had the least amount of differences as compared to CMMI 2013. So, that is the main focus of THIS post.  I will share experiences IRT other template versions later.  So if you start with MSDN you’ll see a tangle of different articles when it comes to upgrading to new templates. A few important points about process templates:

  1. A) In case you did not know, you can’t just swap templates out once you have created a Team Project and started using it, you HAVE to upgrade the underlying template of a team project itself to make changes ::opens giant can of worms:: OR if it’s a major change, like going from CMMI to Agile, just trust me on this -- migrate to a new Team Project.
  2. B) Template upgrades can be scripted but at the end of the day it is very manual, and fairly time consuming because of all of the testing required.  XML can be tricky for even the saltiest of us developers.  In the old days it was ALL manual all the time and all command line, but over the years a host of helpful add-ons have become available like the process template editor in the TFS Power Tools, and the TFS Team Project manager tool.
  3. C) Changes to a base process template (so at the TFS Collection level) do not automatically filter down to TPs created with that template, wouldn’t that be awesome and terrible at the same time?!  You must manually apply any template changes to all TPs that used that template, if you want them to remain consistent.  I bet now you really regret spinning up new TPs for every single one-off project your IT group dreamed up huh?

 

But now there is another way, the Configure Features Wizard ::duh duh DUUHHHH:: I will admit, I did not thoroughly RTFM the first time through and missed out on the full power of this little tool myself. To be fair, the last time I had a massive mutli-version TFS consolidation this tool didn’t even exist.  Of course now that I know what to search for, I turned up this AMAZING post of Edwald’s on how the wizard works, as well as this MSDN article that details how it is working its beautiful magic under the covers.  To sum up why it is so awesome, it allows you to specify your template changes once, and then easily rinse and repeat with a click of a button. No scripting or command line necessary. Unless you like that sort of thing, or have a bajillion TPs, then have at it, but use this handy script to iterate through all of your projects.

So how does it work? I still contend there is some black magic involved, but more likely it was a lot of late nights by some wicked smart TFS dudes. Essentially, you need to create a new copy of the legacy template that was used to create the team projects that you wish to upgrade to 2013, and then retrofit some new shinies from both 2012 and 2013 into it. I first downloaded CMMI v5.0 (which they had customized and re-uploaded without renaming – ACK!). Next I had to do things like add in a handful of work item types (Code Review and Feedback for 2012, Features for 2013), update my WIT categories, as well as add the Process Configuration file specific to 2013.  For all other work items I was able to simply replace the 5.0 WIT definitions with the 2013 versions, and then retrofit the client’s customizations back in. I used the heck out of the Team Project Manager Tool to compare them and see exactly what was customized.  Be careful here and read both the 2012 changes AND the 2013 changes that need to be incorporated, so you don’t duplicate effort.  For instance, the 2012 changes have you add 2 configuration files, but then both of those files are replaced by the single Process Configuration file for 2013. When I was done, I had a new version of the process template (with a new name!) that I could use with the wizard to convert the old TFS 2010/CMMI 5.0 TPs to 2013. It also contained all of the customizations that were done on the template before the TPs were created.  Last, I uploaded that bad boy to the TFS Server, navigated to my legacy TPs one-by-one, and launched the Configure Features Wizard. I ignored the recommendation of CMMI 2013, and picked my updated CMMI 5.0 template:

clip_image002

When the wizard runs, the super-simplified explanation is that it performs a DIFF on the team project and the modified process template, and applies the changes to the TP so it now matches the template. I KNOW!! So update the template once, run as many times as you need.

clip_image002[5]

Now, if after the team projects were created off of that old template, you had some template cowboys who went in customized the crap out of team projects in an inconsistent manner, or did not also make that change to the underlying base template as well, you may end up needing to upgrade those team projects by hand and/or resolve any issues encountered during the wizard to upgrade them to 2013 completely. No easy button there. And maybe start being more careful about who you let customize process templates and team projects going forward! ;)

Now you have a simple way to upgrade all of the team projects created off of that old, custom template up to 2013.  At least for 2010.  Next we tackle all of the 2008 TPs.  And my understanding is that if you have 2005 TPs, just play some Taps and migrate what you need to a fresh, new 2013 TP.

Tags:

Application Lifecycle Management | ALM | Power Tools | SDLC | Team Foundation Server | TFS | TFS 2013 | TFS 2012 | TFS Administration | TFS Power Tools | TFS Upgrade | Visual Studio 2013 | Work Item Tracking

0

St. Louis Day of .NET is Next Week - Sign Up Before It Sells Out

by Angela 5. November 2013 23:32

I’ve been hearing about St. Louis Day of .NET for some time now but up until recently I just hadn’t thought to attend.  I mean, we have TONS of events in Chicago, so I always made excuses.  This year, Polaris Solutions has stepped up to support STLDODN as a Platinum sponsor.  We're planning on not only participating, but we have a few folks speaking, and we are even hosting a booth so be sure to stop by and say hello! I’ll be the redhead, also, the only woman in the booth so I’m easy to spot :)  If you wanted to catch one of our talks, here is the run-down:

Chris Kadel will be participating in the TFS pre-compiler on Thursday Nov 14th from 8:30am to 5pm: http://www.stldodn.com/2013/pre-compilers.  It is a FULL-DAY hands-on workshop and it’s only $75 to attend, so sign yup fast. You can’t get training like this for such an amazing price anywhere else that I know of.

A Pragmatic Intro to Unit Testing by our very own Josh Gillespie

Advanced OOP by our newest team member and former Softie Clint Edmonson

Agile Testing in a Waterfall World by your truly!

Application Architecture Jumpstart also from Clint

Dude I Just Stepped into Your Code from Josh

 

If you haven't registered yet, click on "Register Now!" at the top of the website and find out why people love this event so much.  http://www.stldodn.com/2013/what-is-the-day-of-.net.

0

Visual Studio 2013 Launch Event Coming to Chicago

by Angela 4. November 2013 15:18

So in case you’ve been living under a rock for the past few weeks, Microsoft released a new version of its Visual Studio ALM Tools including Team Foundation Server, Microsoft Test Manager, and Visual Studio. I know! Feels like 2012 just launched doesn’t it? With their new release cadence, if you blink you could miss a new version, or at least a few updates. It’s pretty amazing actually.

While there is an official BIG launch party happening on November 13th in NYC, you can also logon for the virtual launch that day if you can’t get away to the Big Apple on such short notice.  Although right now you don’t appear to be able to actually register for the virtual launch – DOH!  For now you can at least add it to your calendar, hopefully they will fix that soon.

I also just heard that there are also some smaller in-person launch events around the U.S, possibly hitting a city near you.  Sadly I will miss the Chicago launch event on November 20th, I’ll be at the MVP summit in Bellevue Washington. Not a bad trade-off though ;)  But if you’re in town, check out the Chicago event details and register quick before it fills up! And check back with the events site often because more cities will be opening up soon.

Agenda

image

Location

Drury Lane Convention Center

100 Drury Ln
Oakbrook Terrace Illinois 60181
United States

image

 

Some events are not listed on the events site yet, so here are some other cities coming on-line and a link to get registered:

12/3

Boston, MA

12/3

Nashville, TN

12/3

Bellevue, WA

12/4

Washington, DC

12/4

Philadelphia, PA

12/4

Miami, FL

12/5

Phoenix, AZ

12/10

Atlanta, GA

12/10

Denver, CO

12/11

Concord, CA

12/11

Harrisburg, PA

12/12

Sandy, UT

1/15

Los Angeles, CA

1/21

Mountain View, CA

Powered by BlogEngine.NET 2.7.0.0
Original Design by Laptop Geek, Adapted by onesoft