Corey Coogan

.Net, C#, ASP.NET MVC, Architecture and Design

Archive for February, 2010

What does a Proof of Concept Really Prove?

Posted by coreycoogan on February 23, 2010

The company where I’m working right now likes to invest resources in Proof of Concept, or POC, projects.  The intent is admirable enough – prove that a concept/process/technology/etc. works by spiking some small portion of it and evaluating the results.

This sound really great in theory.  But if it was all gravy I wouldn’t be writing this post.  So here’s the rub – it has to be crystal clear exactly what is being proved.  If management is vague and just wants to see some documents or a demo, the risk in moving from POC to a production project becomes very high.

Let’s look at an example.  A project that I’m involved in right now is proving that legacy code can be taken from the outdated, purchased system with a proprietary-language and migrate core functionality to .NET – specifically WCF services.  Sounds simple enough, right?

The code in the existing system is a tangled mess, as one might expect, and all the logic is buried in the 3GL-type forms.  The database is also a rat’s nest and the converted code must use the legacy database.

The project is moving along and things are working, but an all too common dismissal for the quality of code that’s being written is “hey, it’s POC code”, which leads me to the point of this post.

Because the goal of this POC is only to see that it is possible to move legacy code to C# on WCF, it’s acceptable to the team that the code being written is a house of cards.  It is so brittle and hard to test that the smallest change could send it tumbling down.  My worst fear, however, is the possibility that a number of bugs and issues that result from a change could go undetected.

I don’t believe, in this example, that the concept is truly getting proved.  By not specifying that the project should prove the concept in a manageable way, following established practices for creating highly cohesive and loosely coupled code that is testable and continuously integrated with automated testing, the project sponsors have essentially said “build a house of cards” – hence the attitude that quality doesn’t matter because it’s just POC code. 

It’s my opinion that if one wants to prove a concept like the one I’ve been talking about, it has to be proven to be a viable solution in some real world capacity.  At the end of the project, the POC may be deemed a success but few will know if it is actually possible to build with a sense of confidence and stability.  The other angle is that management may expect that since the POC has already been completed, it shouldn’t take much more time to get it ready for prime-time, which is this case would be a fantasy.

In conclusion, when drafting POC project document, make sure to specify some degree of real-world expectations.  Build in the extra time to ensure that the concept can be built to withstand the pressures of real-world change.  Otherwise, you may not know the truth until you’ve either deployed a fragile system or found yourself sinking more resources into a project than you ever would have expected. This may not be applicable to the smaller projects, but for larger ones, I think it’s worth the investment.

Posted in Consulting, Developer Life, Software Management | Tagged: , , , , | Leave a Comment »

ReSharper Coupon Code and Extended Trial

Posted by coreycoogan on February 21, 2010

UPDATE 6/1/2010:  I recently got an email from David Ridgway stating that the offer discussed in this post is no longer valid.  Sorry :(

I’ve been using the trial version of R#, but recently expired.  I’ve grown quite used to it and thought it to be a worthwhile business expense.  Because I’m cheap and figure there’s always a better deal, I immediately started searching for a promo code when I saw the “Coupon Code” field on the checkout form.

That brought me to David Ridgway’s blog, where he has a post about how to get 10% off and an extended 60 day trial license key.  The blog says to email him and he’ll send the info.

If you’re like me, this sounds a bit fishy and I was apprehensive to try, but the blog looked legit so I gave it a shot.  To my surprise, I received a response within 10 minutes at 1:30 AM.  The details were there and they are right on.

If you are thinking about buying or trying ReSharper 4.5, definitely send David an email and ask him for the scoop.  You’ll save some cash or get the longer trial (or both).

http://web2asp.net/2009/01/resharper-extended-trial-period-and.html

Posted in C#, Visual Studio | Tagged: , , , , | Leave a Comment »

Eggheads, Elite, Shills and the Mainstream

Posted by coreycoogan on February 12, 2010

Scott Bellware, a once prominent member of the Alt.Net community before seemingly denouncing it sometime last year, has been very busy lately with some interesting and thought-provoking posts.  True to his usual form, you may want to keep a dictionary handy while reading.

In his post, How Mainstream Lost Software, Scott really said some things that hit home for me.  He talks about Eggheads in the following way:

Eggheads write and speak for other eggheads. The language they chose and the names given to design principles, as well as practices and patterns are stimulating to other eggheads and yet utterly obstructive to the other part of the software development population. When you measure the Egghead population against the mainstream population, the Egghead population doesn’t appear to be much more than a rounding error. There’s a lot of work to do, and we can do it much better.

Eggheads preach to the choir, and this is often so stimulating that they never leave the echo chamber. They don’t learn how to reach the mainstream. They hope that the people they do reach will somehow reach the mainstream, but those people usually end up emulating their egghead heros and become eggheads themselves. The circle expands slightly, but not merely enough to have the meaningful effect on software development productivity that their knowledge and understanding should already have had.

The other end of the spectrum is who he called Shills.  It takes only one meaningful sentence to convey what a Shill is:

Shills convince the mainstream to buy snake oil solutions to problems that could be easily solved with plain old soap and water.

So why did all this hit home?  The fact is, I’m an aspiring Egghead.  I absolutely love this stuff and am passionate about all things Egghead.  I work all day.  I work at night.  When I’m not working, I’m thinking about this stuff.  When I’m not thinking about it, I’m reading about it and wondering how I can improve my craft.  I try to emulate my Egghead heroes like Jeremy D. Miller, Ayende Rahien, Udi Dahan and many others.  I know I’m not even on the same planet and probably never will be, but I’ll never stop trying.

Scott says that people who really care about this stuff are nothing more than “a rounding error” compared with the mainstream development community, who has bought into what the Shills are selling.  I see it all the time.  “Why write unit tests first, or even by hand, when I have a wizard to generate them for me when I’m done?”.  “Why write my own decoupled, testable authentication scheme when I have the AspNetMembershipProvider?”.  It’s tough to win those debates because this is just not how most people understand things.

The impending doom of the Northeast WI Alt.Net User Group is what really brought this home.  It’s not officially over yet, but I was very surprised to find out how very little of the local population is in learning about things NOT mainstream Microsoft. I advocated the group to almost every developer I met but nobody ever showed any interest.  They show up at the INETA sponsored .NET User Group to learn about SharePoint and Silverlight RIA, but not Alt.net.  In my opinion, we were talking and learning about things that could be implemented right away to.  Things that had immediate benefit.  Why wouldn’t this interest people?

Scott Felder covered NServiceBus to an audience of 5.  I prepared a presentation on the Spark View Engine, which was supposed to be for an audience of 7.  Unfortunately only one person was actually going to come so I called him from the parking lot to let him know not to bother.  Other topics were going to include SRP/S.O.L.I.D., StructureMap, S#arpArchitecture, NHibernate and so much more.  The fact is, people just weren’t interested.

There was a bunch of discussion on our group about marketing and branding to generate interest, but it honestly seems like too much work.  I am a very busy person and time is so precious to me that it’s really hard to justify investing my time and energy into getting people interested in improving their craft.  We are in charge of our own path as developers – nobody else.  If they aren’t willing or interested in seeing what else is out there, it’s their loss, right?   Right?

So that’s the nerve that was touched.  Scott’s closing words included this:

What’s needed is a new generation of productivity missionaries who are willing to master the field of knowledge and are willing to learn to connect with the mainstream.

Again, I am not claiming to be elite or even in the top 50%, but I do admit to understanding a lot of this stuff.  Reading his post makes me feel a little guilty for wanting to bail on the Alt.Net user group.  It really made me look at that decision and reflect on the current state of the mainstream development community and ask myself if I’m happy with where things are.  The answer is no.  It takes too much energy to get people to even consider possibilities beyond 3 Tier architectures with so-called BLL’s that act as a pass-through to a DAL.  I don’t want to explain why breaking a God class down into 10 separate classes in the name of SRP really isn’t “a lot of extra work”.  Yes, IoC containers use reflection, but most of it gets done upfront and you have to consider everything you get… etc…

Thanks Scott for giving me more to think about.

Posted in Alt.Net, Consulting, Developer Life | Tagged: , , , | Leave a Comment »