Passion * Technology * Ruthless Competence

Wednesday, September 10, 2003

Tool vs. Product

One of the things that makes ASP.NET great is it's "no black box" approach. Rob Howard describes the approach this way: "Provide customers with the ability to replace/customize/extend the core product" [ASP.NET Overview, Slide 25]. You can see this approach all over ASP.NET. For example, ASP.NET ships with three built-in authentication modules: Windows, Forms and Passport. Don't like those? Want something custom? Fine, write a module that handles the AuthenticateRequest event and handle authentication however you want. Heck, if you're doing a one-off solution, you can even skip the module and stick the code in Global.asax.

As is probably apparent to anyone reading this weblog, I've been playing around with Windows SharePoint Services quite a bit recently. WSS seems to be made up of three distinct layers:

You would think these would be mostly independent, but they're not. For example, the WSS docs describe how you can add a new field type to the default templates that ship with WSS. However, there's a field type enumeration that's part of the WSS object model. Obviously, adding a custom field to the template does not change the enumeration. What's interesting is that if you follow the instructions to add a new field type and then add that field to a list template, you can create a list instance from that template that features the field type you defined. But if you want to modify the column with the custom field type, the WSS site admin pages (i.e. under the _layout vdir) has no idea about the new field type. Likewise, you can't add your new field type to an existing or custom list since the WSS site admin pages are coded against the object model and the default enumeration of field types. This makes it very hard to black box replace/customize/extend the core WSS product due to it's tightly coupled nature.

Of course, one of the reasons that ASP.NET has been more successful at extensibility is because it is a tool and WSS is a product. There is no out-of-the-box experience with ASP.NET for end users the way that WSS has. Is shipping a product harder that shipping a tool? Is targeting end users harder than targeting developers? I would think the answer to both of these questions is yes. In the end, the WSS team had to ship something that works OOB, even if that means building something that's more tightly coupled and thus harder to extend. I hope that over future releases, WSS continues to improve (certainly v2 is a huge improvement over v1) and that it becomes easier to replace/customize/extend the core product.

UPDATE - Of course, it's Rob Howard not Ron Howard. Rob - Great job on ASP.NET. Ron - Great job on Apollo 13.

Posted By at 11:45 PM Pacific Daylight Time
Change Congress
Recent Bookmarks
Tags .NET Framework (2) __clrtype__ (9) ADO.NET (5) Agile (7) AJAX (3) Architecture (288) Guidance (6) Interop (2) Modelling (61) Patterns (7) Process (4) SOA (94) Web Services (5) ASP.NET (25) Async Messaging (2) Azure (1) Battlestar Galactica (3) BI (2) BizTalk (4) Blogging (117) dasBlog (11) Podcasting (4) BPM (1) C# (11) C++ (4) Capitals (5) CardSpace (3) CLR (2) CodePlex (1) College Football (10) Comedy Central (1) Community (81) Concurrency (6) Consumer Electronics (1) Database (13) Debugger (23) Dependency Injection (2) Development (122) C Plus Plus (1) Embedded (5) Lanugages (42) Media (2) P2P (11) Rotor (1) SharePoint (6) SOP (3) DIY (1) DLR (25) Domain Specific Languages (15) Durable Messaging (5) Dynamic Languages (12) Dynamic Silverlight (1) Education (3) Enterprise 2.0 (1) Entertainment (14) ETech (15) F# (51) Functional Programming (17) Game Development (2) Guidance Automation (3) Hardware (8) HawkCodeBox (1) HawkEye (3) Health (1) Hockey (31) Home Electronics (1) Home Network (5) Hosting API (1) Humor (5) IASA (1) Idempotence (3) Indoor Lacrosse (1) infrastructure (5) Instrumentation (4) Integration (2) IronPython (112) IronRuby (16) Java (2) Job (3) Kodu (1) LangNET (2) Lightweight Debugger (5) LINQ (23) Live Framework (3) Live Mesh (2) Lost (1) Master Data Management (1) Media 2.0 (6) Microsoft (31) MIX06 (2) Mobile Phone (1) Monads (5) Morning Coffee (172) Object Oriented (4) Office (5) Open Source (8) Open Space (2) Operations (3) Other (135) Art (1) Books (1) Family (33) Games (18) General Geekery (27) Home Theater (1) Movies (23) Music (20) Politics (3) Society (1) Sports (37) Working at MSFT (19) Parallel Programming (3) Parsing Expression Grammar (16) patterns & practices (2) PDC08 (5) Politics (48) Polyglot (3) PowerPoint (2) PowerShell (39) Presentation (7) Projects (1) HawkWiki (1) Pygments (5) Python (6) Quote of the Day (4) Refactoring (1) Research (2) REST (18) Reuse (5) Robotics (2) Rock Band (4) Rome (5) Ruby (23) Ruby on Rails (1) Sci-Fi (2) Scripting (4) Security (3) Service Broker (14) SharePoint (2) Silverlight (20) Social Software (1) Software + Services (2) Software Design (2) Software Engineering (1) Software Factories (11) Software Industry (1) Space Elevator (1) Spark (1) Sports (1) SQL Server (2) Stephen Colbert (1) TechEd (7) TechEd06 (1) TechRec League (1) Television (6) Travel (7) Unified Client (1) Unit Testing (4) USC (1) UX (1) Virtual PC (2) Visual Basic (3) Visual Studio (20) Volta (2) Washington Capitals (37) Washington Stealth (1) WCF (31) Web 2.0 (67) Web Services (7) WF (21) Windows (3) Windows Live (29) Windows Live Writer (3) WPF (8) Xbox (1) Xbox 360 (54) XML (11) XNA (15) Zune (4)
Disclaimer: The information in this weblog is provided "AS IS" with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my opinion. Inappropriate comments will be deleted at the authors discretion.