By Chris R. Chapman at December 28, 2009 00:39
Filed Under: agile, better practices

Interesting piece in yesterday’s NYTimes Business section by Mary Tripsas on how 3M partners with its customers to drive innovation and new ideas, as opposed to driving their innovation into them with a blunt instrument:  Seeing Customers as Partners in Innovation.  While 3M should be immediately familiar to most folks, it’s even doubly-so for software development professionals who employ lean delivery techniques since one of the acknowledged thought-leaders in the space is Mary Poppendieck, a former 3M employee.

The article references a Harvard Business School professor, Ranjay Gulati, who has recently completed a book I need to pick up:  (Re)(Organize) for Resilience: Putting Customers at the Center of Your Business.  His approach is definitely in simpatico with the agile/iterative/lean philosophy:

“Being customer-driven doesn’t mean asking customers what they want and then giving it to them,” says Ranjay Gulati, a professor at the Harvard Business School. “It’s about building a deep awareness of how the customer uses your product.”

This stands in stark contrast to how many firms perceive their customers, developing a homogenous view of their base through their product lines and offerings.  In this environment, innovation becomes an ugly stepchild – something I’ve witnessed more and more in the industry.  Gulati has seen this as well, and shares my cynical perspective:

The terms “customer driven” and “solutions” seem to be in every manager’s lexicon. But as Professor Gulati notes, “it’s an execution problem.” Companies, he says, “aren’t generally structured to access, absorb or utilize customer insights since they are organized by product, not by customer.”

And so we have the defining challenge of our industry which I am flummoxed to explain:  Why we are retreating to view software development as the end-product of a manufacturing vs. creative process, especially in light of the failures the former view has wreaked.

Within MCS, I am seeing this increasingly coming to the fore with a shift toward fixed-bid projects that limit the ability of consultants to drive the kind of rich innovation Tripsas’ article describes or the deep partnerships that Gulati promotes.  When we view customers as fitting or shoe-horned in to categories, we begin to constrain our thinking around our products which shutters our view of more exciting opportunities that would otherwise come to the fore.

In my opinion, if we adopt an “Innovation Center” approach as Tripsas describes, we may in fact develop a defining competitive advantage and so break out of the constraints of being organized by product and not by customer.

By Chris R. Chapman at December 11, 2009 05:20
Filed Under: better practices, computer science

SEMATIn my inbox today was a copy of Dr. Dobb’s Update Newsletter (Dec 10/09) with the Editor’s Note on the recent SEMAT Initiative that’s been launched by the likes of Ivar Jacobsen (UML and Rational Unified Process), Bertrand Meyer (Eiffel language and Design by Contract paradigm) and Richard Soley (Chair/CEO of Object Management Group – Standards around distributed OO systems, CORBA). 

SEMAT is an acronym for Software Engineering Method and Theory, and has been pitched as a community of professional, leading software industry researchers and computer scientists “united” with the aim of providing a unified theory to re-establish “software engineering as a rigorous discipline based on a solid theory, proven principles and best practices.”  Already, my eyes were rolling and my BS sensor was tingling.

However, in an attempt to woo folks to their island, they list some of their signatories, including folks like Scott Ambler, Barry Boehm, Alistair Cockburn, Larry Constantine, Erich Gamma, Capers Jones, Robert C. Martin, Ken Schwaber and the like.  Very impressive.  Also a dead giveaway that this effort will be largely symbolic and not bound to produce anything substantive.

What I find troublesome about SEMAT is its aims – I really do not subscribe to the notion that there is a single theory to describe software development and engineering because of the almost infinite variability of its primary inputs:  Human creativity and collaboration.  This is why I subscribe to agile/iterative/lean practices that emphasize incremental delivery with frequent inspect/adapt feedback loops.  It’s the best way to manage the chaos and drive value.

Not good enough for SEMAT – they see the need for a revolution:

Software engineering is gravely hampered today by immature practices. Specific problems include:

  • The prevalence of fads more typical of fashion industry than of an engineering discipline.
  • The lack of a sound, widely accepted theoretical basis.
  • The huge number of methods and method variants, with differences little understood and artificially magnified.
  • The lack of credible experimental evaluation and validation.
  • The split between industry practice and academic research.

What a poor choice of words overall to build a case for a call to action to come up with some rigid specification and theory about how people come together on a complex endeavour to produce working software.  And of course, what we need is more research and theory rather than practical, readily-applicable strategies to build software.

They go on:

We support a process to refound software engineering based on a solid theory, proven principles and best practices that:

  • Include a kernel of widely-agreed elements, extensible for specific uses
  • Addresses both technology and people issues
  • Are supported by industry, academia, researchers and users
  • Support extension in the face of changing requirements and technology

And other mom & apple pie things. 

Lessons Learned from ALT.NET

While these a laudable goals, they’re impractical and not likely to be achieved, if for no other reason than the folks involved (personality clashes and the like).  However there’s another reason I think this will not go far, and it’s because I’ve seen it all before in the ALT.NET initiative.

ALT.NET was (is?) a loose confederacy of software development professionals, founded by NY developer Dave Laribee in early 2007.  The intent was to provide a community for “alternative” .NET professionals: Like-minded folks who used .NET technologies, but weren’t slavishly dedicated to a Microsoft-centric view.  The mantra of “the best tool for the job” was frequently repeated in the early days.

They scored some early wins with Microsoft’s Scott Guthrie announcing the release of ASP.NET Model-View-Controller (MVC) components at their premier open space meeting in October 2007, and there were lofty plans to help open chapters around the world.  A wiki was set up and the community (me included) began to help build a repository of best practice reference material.

Things went well until later that year and into 2008 when the community began to descend into infighting and a lot of rather harsh criticism that they were becoming to “cliquish” – some of the founding members ended up walking away and today, after taking the development world by storm and spawning dozens of podcasts, ALT.NET languishes in relative obscurity. 

The chief problem became the perception that ALT.NET was issuing decrees about what it was to be truly “ALT.NET”.  As a result, it became quasi-religious and so began to take on a spectrum of adherents with varying degrees of dogmatism.  You were either “with us” or “agin us”, a nary the twain shall meet.  Thus, I foresee the same problems hampering SEMAT:  It will collapse under its own weight as the signatories and signers-on get spun out in debates over whose methodologies or practices are better and what should be tested and what should not, and how and for how long.  In the end, it will winnow down to a small cadre of dogmatists who will have forced a good many people away.

And for what?  A fantastical “unified theory” of software development that doesn’t exist, nor will it ever.

Footnote:

For an excellent critical treatment of the out-of-the-gate problems with SEMAT, see Jorge Aranda’s Nov 29/09 blog post, Against SEMAT.  He raises some excellent points that I won’t bother to reiterate here.

By Chris R. Chapman at December 10, 2009 23:56
Filed Under: .net, sharepoint2010, skills

Earlier this month (Dec 2/09) the Director/Product Manager for SharePoint, Arpan Shah, posted a wealth of resources on his blog to aid in ramping up on the new platform.  I encourage going over and taking a look – and add his feed to your aggregator.  Here are some of my favourites:

White Papers – The closest thing to “books” before the release next year:

SharePoint 2010 Overview Evaluation Guide 
SharePoint 2010 Professional Developers Evaluation Guide 
SharePoint Server 2010 Evaluation Guide for IT Professionals
SharePoint 2010 and Office 2010 Scenarios

When to use ASP.NET vs. SharePoint:

SharePoint Server 2010 as an Application Development Platform 
SharePoint 2010 Developer Platform

For the Visual Learners: 

Learning Snack for Developers: Developing solutions with SharePoint 2010

Sharepoint_silverlight_learningsnack

Getting Started Developing on SharePoint 2010

Sharepoint_developer_center

Hands-on-Labs (HOL) Getting Started with Development on SharePoint 2010 C# & VB.NET – These are quite good as they get you the fundamentals in a follow-along-with-me format.

Admins – We Got You Covered, Too:

Check out the IT Pro 2010 video & top features
Walk through the
Learning snack for IT professionals: Experiencing the Microsoft SharePoint 2010 user interface 
Walk through
Learning snack for IT professionals: Managing and troubleshooting with Microsoft SharePoint 2010 
Read the
SharePoint Server 2010 Evaluation Guide for IT Professionals 
Take a look at the training and videos @
http://www.mssharepointitpro.com

By Chris R. Chapman at December 08, 2009 11:49
Filed Under: sharepoint2010, windows7

The answer to the riddle from my first post on this case isn’t nearly as exciting as I thought it would be.  Prior to resolving the problem, I disassembled PSCONFIG.EXE and Microsoft.SharePoint.dll using Red Gate’s (nee Lutz Roeder’s) Reflector and thought I had made a startling discovery, as shown in the sequence diagram below:

SPS2010_PSConfig_SequenceDiagram

It appeared that PSCONFIG was deliberately coded to throw an exception when the Central Admin site was created under Step 2/10.  My “smoking gun” was a snippet of code within the CreateDefaultInstance method of the Microsoft.SharePoint.Administration.SPAdministrationWebApplication object:

using (SPSite site2 = application.Sites.Add(string.Empty, "$Resources:core,nav_CentralAdministrationHome;", null, (uint) SPGlobal.ServerCulture.LCID, "CENTRALADMIN", ownerLogin, null, null, null, null, null))
{ …snip… }

In particular, I was interested in the last three nulls of the Sites.Add() method which correspond to the secondary owner’s login, name and email address respectively.  I’d been burned in the past by programmatically creating sites without secondary owners – exceptions get thrown.  And this intuition seemed to be reinforced when I looked at the SPSiteCollection.Add() method overloads in detail – all roads eventually lead to an internally-scoped overload where we see the following:

info = SPUtility.ResolvePrincipal(this.WebApplication, null, secondaryContactLogin, SPPrincipalType.User, SPPrincipalSource.MembershipProvider, false);
if (info == null)
{
  throw new SPException(SPResource.GetString("CannotFindUser", new object[0]));
}

However, this turned out to be more a false-positive than a positive conclusion:  I allowed some confirmation-bias to slip into my troubleshooting.  Bah-humbug.

Case Closed:  Run PSCONFIG While Connected to Corporate Network

The true solution turned out to be of the Occam’s Razor variety:  On the advice of a colleague, I logged on to my corporate network while running PSCONFIG.EXE which allowed the utility to resolve my domain credentials which I thought were cached.  Ta-daa.

Sps2010_psconfig_console_success

As to why the problems with a null secondary owner don’t come to the fore, I’m not sure.  I will have to dig deeper.  However, for now, I have successfully installed SharePoint 2010 + SQL Express 2008 on my Windows 7 workstation with 4GB of RAM. It runs, but it runs slowly.  Double ta-daa.

Sps2010_its_alive

I will need to boost myself to at least 8GB of RAM to make the workstation usable as at times I am finding my memory peaking at 92% capacity.  It has settled down to 74% after exercising it a little, but this is still a little high for my liking.

I’ll be dedicating a future post on how to manage 2010 and the rest of your apps – I’m thinking a little PowerShell is in order to automate startup/shutdown of the SharePoint services so you can reclaim memory with the flick of a switch.

By Chris R. Chapman at December 08, 2009 03:05
Filed Under: sharepoint2010, windows7

Update:  See the anti-climactic conclusion to this case here.

For the past several days I’ve been struggling mightily to install the standalone version of SharePoint 2010 on my Windows 7 workstation.  Since the announcement went out at the recent SharePoint 2009 conference, all the cool kids are doing it.

So, I downloaded the beta bits from MSDN, got a copy of Setting Up the Development Environment for SharePoint Server from MSDN and settled in.  First stop was to get SQL Express 2008 installed – this was relatively simple, although I did have some issues around permissions that were easily and quickly resolved.

I then followed the guidance in the doc for pre-requisites.  Actually, a better source is Jie Lie’s blog post, SharePoint 2010 Pre-Requisites Download Links.  A key trip-up for me was obtaining the right version of the Windows Identity Framework (Geneva) – silly me, I got the latest version (3.5.0.0) rather than the version Lie has on his blog, 1.0.0.0.  The Microsoft SQL Server 2008 Native Client is also a must-have, as it creates a named-instance SQL database called SHAREPOINT that is required for the standalone install.  Other than this, I followed the instructions in the MSDN article for setting up my machine, altering the XML config file and tweaking IIS.

So, the installer ran smoothly until I hit a couple of snags:

Win2k10_install_fail_3

If you search for “Error 1935 HRESULT 0x80070020”, you’ll find that it is a broad error code that essentially means another process has a lock on an assembly that you need access to.  The solution turned out to be calling up msconfig and disabling all the non-system services and restarting (see Aaron Stebner’s blog post from Nov. 25/06 on how to do this).

After I resolved this problem, the installer finally ran without a hitch.  So, the next step was to run the Configuration Wizard.  And so my troubles began.  The wizard would run until reaching 2/10 tasks for creating the configuration database.  Then it bailed:

Sps2010_wizardfail_2
The exception had me puzzled:  “User cannot be found”.  This got me thinking that maybe permissions in the database were not what they should be.  So I opened the Security/Logins node in SQL Server Management Studio to add the dbcreator role to the NT AUTHORITY\NETWORK SERVICE and NT AUTHORITY\SYSTEM accounts (these are used by the installer when running a standalone setup for the primary admin accounts).  I should add that I had issues earlier than this that required me to add the roles just to get the wizard to turn over.

I verified that the databases were indeed being created:

Sps2010_databases

So, I deleted them and decided to try running PSCONFIG.EXE from the “14 Hive” (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\BIN) by opening a command console using “Run As Administrator”.  Same issue:

Sps2010_psconfig_console

I looked into the specifics of the exception via the Event Viewer and found these details:

An exception of type Microsoft.SharePoint.SPException was thrown. Additional exception information: User cannot be found.

Microsoft.SharePoint.SPException: User cannot be found.

at Microsoft.SharePoint.Administration.SPSiteCollection.Add(SPContentDatabase database, SPSiteSubscription siteSubscription, String siteUrl, String title, String description, UInt32 nLCID, String webTemplate, String ownerLogin, String ownerName, String ownerEmail, String secondaryContactLogin, String secondaryContactName, String secondaryContactEmail, String quotaTemplate, String sscRootWebUrl, Boolean useHostHeaderAsSiteName) {SNIP for brevity}

Given that everything up to this point was working well, I decided to open the assembly up in Reflector to determine what code was being executed that would throw this exception.  This required looking into the GAC where the assemblies are stored which is easily done via the View GAC as Folder registry trick.

Sifting through the overloads on the SPSiteCollection.Add method, I finally came across the root method and noticed this:

Sps2010_spsite_add

The plot thickens:  This code fragment attempts to resolve the secondary contact login information which is passed into the SPSiteCollection.Add() method into an SPPrincipalInfo object.  If it fails to resolve, null is returned and a generic SPException is thrown.  Ta-da.

So, this mystery appears to hang on what information is being passed in for the secondary contact login – one would think that since this is a standalone install it would be the same as the primary contact, ie. NT AUTHORITY\NETWORK SERVICE or my credentials (which is a member of BUILTIN\Administrator).  But it’s apparently not.

I’ll post a follow-up once I unravel this part…

About Me

I am a Toronto-based software consultant specializing in SharePoint, .NET technologies and agile/iterative/lean software project management practices.

I am also a former Microsoft Consulting Services (MCS) Consultant with experience providing enterprise customers with subject matter expertise for planning and deploying SharePoint as well as .NET application development best practices.  I am MCAD certified (2006) and earned my Professional Scrum Master I certification in late September 2010, having previously earned my Certified Scrum Master certification in 2006. (What's the difference?)