Objections to Agile development – level 300

Whether you love or hate Agile development methodologies, you need to read a whitepaper by Jim Highsmith entitled “Objections to Agile Development”. 

Jim addresses objections that stakeholders make to Agile development.  The categories are:


  • Buyer reality

  • Bad or no design

  • Doesn’t work with our business partners

  • No documentation

For each of the objections above, Jim does a fine job of explaining why these objections are unfounded.  I’ll address the “no documentation” bullet from my own experience, but please read the whitepaper as well.  I’ve battled many objections to Agile at a previous job.

If you’ve ever created design documentation (UML diagram, etc), you know that it is out of date as soon as it’s printed.  Developers make design decisions throughout the coding process (Coding is design, and Jack Reeves take).  It takes a lot of time to keep a design document current, and it just never happens.  Design documents get created; they are shown to management; they look pretty, and they are plain wrong.  They never describe the actual structure of the system.  A manager may like them, but they are looking at a picture, not the actual system.  The actual system ends up structured in a different way, but the manager doesn’t know.  The manager isn’t reading the code.  The manager goes on in ignorant bliss with a picture of something that doesn’t exist.  Arguements can be made about how the process is “supposed” to work, but there’s also reality.

The time for documentation is when the project is finished, and it’s time for it to be mothballed.  This is when documentation should be created for maintainers who may come later.  The system has stopped changing and is actually in a state where it can be documented.  This is maintenance documentation.

Throughout the project, the code and tests should be the documentation for the code.  This is the only thing that is guaranteed to remain current.  Developers should be able to look at the structure of the system in the IDE and understand it.  The whole solution layout also has documentation qualities.

I’d be interested in finding out if anyone has created a design document before the system was created where the document actually stayed current and meaningful.

How to develop an ASP.NET web project without IIS binding – level 200

If you’ve every shared an ASP.NET project or worked on one on multiple computer, you know what a pain it is to ensure that all computers have the same IIS virtual directory configured.  If you don’t, the project won’t open.

For ASP.NET 1.1, it’s easier to use a class library project instead of a web project.  You lose a bit of designer support, but you gain project portability.  If you are like me, you don’t use the designer at all, and it’s all gain and no loss.

The trick is to delete the *.csproj.webinfo file,  take your web project and open the .csproj file in notepad.  Then find the following at the top of the file:

<VisualStudioProject>
    <CSHARP
        ProjectType = “Web”
        ProductVersion = “7.10.3077”
        SchemaVersion = “2.0”
        ProjectGuid = “{09E1A7E2-B51D-42EA-A2BE-4A5991BDF2A7}”
    >. . . . . . .

And just change “Web” to “Local”

<VisualStudioProject>
    <CSHARP
        ProjectType = “Local”
        ProductVersion = “7.10.3077”
        SchemaVersion = “2.0”
        ProjectGuid = “{09E1A7E2-B51D-42EA-A2BE-4A5991BDF2A7}”
    >. . . . . <snip/>

Literally, that’s all it takes.  Now your poject opens as a class library, and you just set up IIS to wherever the project is.  You can debug just like before, and you can use pages and user controls just like before.

One note:  Change the project type back to “Web” before upgrading to .Net 2.0 or the project conversion wizard won’t properly create a website.

Steven Smith as RD – level 000

Congrats to Steven Smith, who has recently become a Microsoft Regional Director.  Steve is the second (that I know about) .Net community leader to have been deployed to Iraq.  He was deployed shortly after I returned from being in Iraq for a year.  I was able to give him some tips, and I had the opportunity to meet him in person at Tech Ed.

For those who don’t know, a MS Regional Director is a volunteer who assists the MS developer community in a specific area.  If you have a question or issue, call them up.  Shoot them an email.  They are there to help.  If you live in Texas, there are several:  Go to this page, http://www.microsoftregionaldirectors.com/Public/rdFindNC.aspx, and search for US – Texas.  I’m disappointed that the website is designed so poorly.  You can only get to information through form posts, so I was unable to get a link directly to a filtered list.

AgileATX lunch meeting tomorrow (Austin, TX) – level 000

Food and agile development talk at the Central Market Cafe at Lamar
and 38th (http://tinyurl.com/brxsz). Upstairs in the gallery.

Tursday, July 21st, 11:30 AM

This is a group local to Austin, TX, and while we happen to be more .Net focused, we’re more concerned with common-sense development, and that leads us to Agile.  This group is made up of many members of the Austin .Net User Group as well as some Java folks who are interested in Agile development methodologies and design.  I’d also like to Welcome Jeremy Miller, an AgileATX practitioner who has recently joined CodeBetter.

Check out the Yahoo group at

http://groups.yahoo.com/group/AgileATX/

How to tag with Shadows.com – ASP.NET showcase

As I mentioned before, I’m at a new company, and I’m one of the .Net developers working on Shadows.com.  This is all ASP.NET with C#, and we’re doing a lot of cool things inside the site.  Shadows.com is centered around community tagging, rating, and commenting.  It then faciliates searching on the community’s tags.  With the commenting feature, any page on the Net could be the start of a discussion thread.  Tagging allows similar sites to be grouped together. 

If you look at my blog: http://www.jeffreypalermo.com, you’ll see that I’ve added an image link on the left and a text link on the right.  The image link will take you to my profile page on Shadows.com, and the text link on the right will take you to a shadow page for the current post you are reading.  Every page on the Internet can have a “shadow” page, which is a page about that page.  The shadow page contains tags, ratings, and comments about the source page, so the shadow page is an extension of my blog post, or any other page.

Most developers don’t get the chance to work on an application that gets very high usage, like those on the public Internet, so I feel fortunate that I have this experience.

I’ll surely be posting any ASP.NET lessons learned throughout the life of this project.  I’ve already posted some:

Be sure to download the toolbar for IE or Firefox.  It’ll allow you to tag sites on the fly.

How to make an ASP.NET user control behave like a custom WebControl – level 200

If you’ve used User Controls for any amount of time, you’ve lamented that there is no containing control for attributes.  With any other custom controls, you have WebControl as the base class, and that allows you to use a <span/> by default or change the TagKey to another tag, and when you declaratively set an attribute like [style=”padding:10px;”], the attribute automatically gets added to the tag.

Not so with User Controls, but they aren’t designed to work that way.  They are meant to be pagelets: a portion of a page.  A User Control can contain anything and doesn’t have to be encapsulated in any control, so there is no tag to add attributes to.

I have made a hybrid User-Custom web control.  It inherits from UserControl, so I have the nice declarative layout, but I needed functionality of a WebControl as well.  I added a WebControl as a member of my user control, and on PreRender, I wrap all my user control contents in this WebControl.  Then I bestow all the attributes of the user control on the WebControl and add the WebControl as the only 1st-level child of the user control.  The end result is that I have a user control that wraps itself in a <span/> or whatever tag I want, and I can set attributes on the Page, and they will get rendered to the browser.  This is especially useful when I need to add a style property or “class”.

Here’s my code-behind.  Feel free to copy/steal my code:


   14     public class Magic : System.Web.UI.UserControl


   15     {


   16         private WebControl _frame;


   17 


   18         public WebControl Frame


   19         {


   20             get {


   21                 this.EnsureChildControls();


   22                 return this._frame;


   23             }


   24         }


   25 


   26         protected override void CreateChildControls()


   27         {


   28             base.CreateChildControls ();


   29 


   30             this._frame = new WebControl(HtmlTextWriterTag.Div);


   31         }


   32 


   33         protected override void OnPreRender(EventArgs e)


   34         {


   35             base.OnPreRender (e);


   36 


   37             Control[] ctrls = new Control[this.Controls.Count];


   38             this.Controls.CopyTo(ctrls, 0);


   39 


   40             foreach(Control ctrl in ctrls)


   41             {


   42                 this.Frame.Controls.Add(ctrl);


   43             }


   44 


   45             foreach(string attribute in this.Attributes.Keys)


   46             {


   47                 this.Frame.Attributes[attribute] = this.Attributes[attribute];


   48             }


   49 


   50             this.Controls.Add(this.Frame);


   51         }


   52 


   53 


   54         private void Page_Load(object sender, System.EventArgs e)


   55         {


   56             // Put user code to initialize the page here


   57         }


   58 


   59         #region Web Form Designer generated code


   60         override protected void OnInit(EventArgs e)


   61         {


   62             //


   63             // CODEGEN: This call is required by the ASP.NET Web Form Designer.


   64             //


   65             InitializeComponent();


   66             base.OnInit(e);


   67         }


   68 


   69         /// <summary>


   70         ///        Required method for Designer support – do not modify


   71         ///        the contents of this method with the code editor.


   72         /// </summary>


   73         private void InitializeComponent()


   74         {


   75             this.Load += new System.EventHandler(this.Page_Load);


   76         }


   77         #endregion


   78     }

Here is my user control markup:

<%@ Control Language=”c#” AutoEventWireup=”false” Codebehind=”Magic.ascx.cs” Inherits=”MagicUserControl.Magic” TargetSchema=”http://schemas.microsoft.com/intellisense/ie5″%>
This is a tag.
<asp:Label Runat=”server”>Yo, buddy</asp:Label>

And here is my Page markup (where my User Control is used):

<uc1:Magic id=”Magic1″ style=”margin: 10px;” myAttrib=”Palermo” Frame-CssClass=”myClass” runat=”server”></uc1:Magic>

See how easy it is now to add any sort of attribute and have it render?  I created this control out of necessity because I wanted the simplicity of user controls with the power and flexibility of a WebControl-derived control.

New Microsoft Certifications (~Dec 2005) – level 000

For a while now, Microsoft has had:


  • Microsoft Certified Systems Engineer (MCSE) – wow, Engineer!

  • Microsoft Certified Solutions Developer (MCSD)

  • and the new Microsoft Certified Application Developer (MCAD)

There are plenty of people with the MCSD that went along with the VB track, and now you pretty much have to use MCSD for .Net to be clear if you have the new certification.  You’ve probably met someone with one of these certifications that was a blabbering idiot, and the cert has lost credibility in your mind. 

I have the MCSD for .Net certification, and I can say from experience that earning the cert was similar to earning a college degree.  As long as you stuck it out, you’d get it.  After all, how many blabbering idiots do you know with a college degree?  If we can’t keep idiots from getting degrees, then how can we possibly expect Microsoft to solve the same problem with their certifications?

Even so, Microsoft is _attempting_ to improve the certification program, and will be introducing some new choices for developers.  For right now, the title is planned to be “Microsoft Certified Professional Developer”.  MCPD.  For us MCSDs, two exams will be required to upgrade the certification.  According to the article at MCP Mag, MCPD requires the person to first earn MCSD.  It seems to me that the new certifications are aimed toward correctly identifying those that can deploy a specific Microsoft technology.

You can do the MCAD now and get certified in either Windows or Web (pick your language), but there is no distinction for those who might be super integration developers:  those writing web services and windows services and class libraries that integrate other systems.  That is just as important, but for now, Microsoft only has the UI tracks. 

Another hole is design.  All the certifications (current and planned) identify those who can use a Microsoft tool or runtime, but they do nothing to ensure that the person understands anything about software design.  Where are the OO questions?  What about other things in software like cyclomatic complexity?  Besides just using .Net to crank out an application, what about the things that differentiate mediocre developers from great ones?  What about security?  These questions go past Microsoft certifications, however, and they apply to every software developer in the industry, not just .Net devs. 

I think industry certifications will come as the software industry matures (but I think back to how many years railroad venders made tracks of different widths).

I expect the certification plans to change a bit before December, but whatever they come out with, I’ll bite:  have to keep that resume current!

Visual Studio Team System presentation at the Austin .Net UG meeting tonight – level 000

Tonight, Chris Menegay will be presenting on Visual Studio Team
System.  As usual, a healthy supper of pizza and soda will be
provided at the Austin Microsoft Technology Center.  Go to
http://www.adnug.org for more details.  In case you might be new to the
group, I’m one of the officers as well as the South TX INETA
liaison.  More details below:

 Topic:  Implementing Process – Visual Studio 2005 Team System
Overview

Software projects fail for a variety of reasons. Most of the
difficulties are not due to technology, but due to lack of visibility and
predictability. Microsoft’s forthcoming Visual Studio 2005 Team System will
improve on these challenges as well as impact how applications are designed,
developed, tested, and deployed. Visual Studio 2005 Team System will offer
advanced application lifecycle management tools and processes that will assist
organizations in delivering their solutions on time and under budget. In this
session, you will get a glimpse of these new tools and gain an insight into
Microsoft’s approach to this market.

Speaker:  Chris
Menegay

Software projects fail for a variety of reasons. Most of the
difficulties are not due to technology, but due to lack of visibility and
predictability. Microsoft’s forthcoming Visual Studio 2005 Team System will
improve on these challenges as well as impact how applications are designed,
developed, tested, and deployed. Visual Studio 2005 Team System will offer
advanced application lifecycle management tools and processes that will assist
organizations in delivering their solutions on time and under budget. In this
session, you will get a glimpse of these new tools and gain an insight into
Microsoft’s approach to this market.

Date/Time7/11/2005 5:30:00 PM –
7/11/2005 7:30:00 PM

LocationMicrosoft Technology Center
Stonebridge Plaza,
Building One, 9606 N. Mopac, Ste. 200, Austin, TX
78759
512-795-5300