Skip to main content Home Help (new window) Eric Shupps
Go Search
Home
Blogs
Company
Products
Services
Current News
BinaryWave Announces Release of Sonar Standard Version 1.1
Upcoming Events
SharePoint Saturday - Ozarks
SharePoint Saturday - Dallas
DevLink 2009
Home > Blogs > Eric Shupps



The new home of The SharingPoint blog.  Refer to the previous URL(http://sharingpoint.blogspot.com) for older posts.

Great Article on High Performance Programming from Rob Bogue

Good friend and fellow SharePoint MVP Rob Bogue has a great new article on developer.com about general principles for developing high-performance custom code solutions. Rob and I have shared many a beer agonizing over these issues - especially related to SharePoint programming - so I applaud his effort to get as much information as possible on this topic out into the community for discussion. I'll be linking to this series of articles in all my scalability and performance talks from now on. Even if you aren't a serious developer there's a ton of information in here that can help you design better solutions (of all kinds, not just for SharePoint). Thanks, Rob!

SharePoint Saturday Dallas Sessions and Speakers Announced

Just a quick update to announce that Speakers and Sessions have been posted to the SharePoint Saturday Dallas site. July 25th is shaping up to be a very good day with great content for all types of SharePointers - Developers, Architects and IT Professionals. If you haven't already registered, you can do so here. We'll see you there!

SPTDD: SharePoint and Test Driven Development, Part Two

Since I released Part One of this series into the wild there have been many heated discussions around SharePoint and Test Driven Development. As always, Andrew Woodward has a great deal to say on the subject; in fact, we recorded a SharePoint Podshow on this very subject at the European Best Practices conference (and traded a few well-meaning jabs during his presentation). During the discussion we came to the conclusion that there are some fundamental software development processes lacking in most custom development projects and that TDD, while we may disagree on its overall value within the quality assurance lifecycle, plays an important role in helping to improve the overall quality of custom software.

Recently, fellow SharePoint MVP Sahil Malik authored a post in which he dismisses TDD as having little to no value in SharePoint development projects. He summarized with the following quote: "So, TDD + SharePoint 2007? Well – screw it! Not worth it IMO". As usual, Sahil is nothing if not incendiary, but his basic premise is that the actual amount of code written for the average SharePoint project doesn't warrant the overhead of a structured development process (he just happened to choose TDD in this instance). When considered from that perspective, I find myself in total disagreement with Sahil and in nearly complete agreement with Andrew's post in response (which might come as a surprise to some readers). Put simply, Andrew argues that any form of unit testing, whether it be TDD or something else, is better than nothing - and I concur.

I also take issue with the basis of Sahil's post; namely, that the amount of code written for any particular SharePoint project is comparatively small. I can produce two project plans for engagements we completed in the last year which demonstrate the exact opposite; in fact, the number of programming hours was greater than all other tasks combined by a factor of nearly 5. Why? Because we focus on building line of business applications on the SharePoint platform and not simply installing the product and whipping up a few web parts. It's all a matter of perspective; it pains me when people make blanket statements about SharePoint who have never worked on a project outside of their little bubble. Everyone does something different with the product based on their area of expertise, which is one reason why governance is such a tricky thing to implement; one man's intranet solution is another woman's public facing media site and never the twain shall meet. Saying that code is a small part of most SharePoint products is ludicrous - just because it's a small part of your work doesn't mean it's a small part of mine.

Getting back to the original point, if we alter the question from "Is TDD worth it?" to "Is Unit testing worth it?", I believe we arrive at an altogether different conclusion (assuming, of course, that you're not a drone who thinks TDD and unit testing are the same thing - see my previous article). If one is truly interested in producing quality code then one MUST perform some level of Unit testing in order to insure atomic validation of compiled production code. Notice that I have never once taken issue with unit testing; in fact, I call it out as the first item in my Quality Assurance Lifecycle chain because that is where it belongs. I am a big proponent of unit testing and believe it should be included, as much as is practicable, in every development project. My issues are with TDD (and its adherents) not with the basic tenets of unit testing, which simply stipulate that all classes and methods must pass some sort of granular test case before being released to the next phase of the cycle. B-I-G difference.

Getting Back to Basics

Before we can determine whether or not the implementation of a particular process delivers value we must first determine what it is we're trying to achieve. Andrew and I both argue that the point of all quality assurance methodologies is to produce better code. "Better" is defined, at least by my team, as fewer bugs, fewer failures, fewer exceptions, and fewer iterations through the subsequent QA phases than were encountered during the last cycle; or, in the case of a very mature process, similar metrics which are at least on par with an established baseline. There are, of course, numerous ways to make your code "better". If, for example, you are not doing any unit testing, then simply adopting this methodology will lead to improved results. Likewise, if you currently fail to perform integration or performance testing, doing so will increase the success rate of your code drops. But before you do any of that you must decide what, exactly, you are trying to achieve.

Let's revisit the QA lifecycle again for clarity. Any successful software project moves through basically the same set of test phases: Unit, Functional, Integration, Regression, Performance and Usability. Often these phases are combined, especially the middle two (Integration and Regression) and the last two (Performance and Usability), but the first two always stand alone in isolation. As a general rule, Unit and Functional testing are mutually exclusive; that is, they are completely separate test methodologies requiring different test cases and different result metrics. It also stands to reason that while Integration testing may be combined with Regression testing it may never be combined with either Functional or Unit testing.

200906301543.jpg

The inherent ROI of any single testing phase is dependent upon where in the underlying pattern the affected code resides. If, for example, a piece of Model layer code is being evaluated, then the importance of Unit testing is much higher than if the code were to exist at the Presentation layer (for any MVC- or MVP-like pattern). This is due to the fact that the multiple other layers build upon the basic Model code; get it wrong, and the ramifications will ripple throughout the entire project. But for Presentation code, the greatest impact of a defect occurs further down the chain, often in Functional and Integration but sometimes as late as Usability, thereby lessening the impact of lower-level testing. Although we cannot make a blanket statement that the lower in the pattern the more important the method or class, as some defects may exhibit the greatest impact during Performance testing (think disposal of objects and list iteration), we can use it as a general rule when evaluating the ROI of a test phase. In other words, if you're not doing significant unit testing at the Model level then you are jeopardizing all the subsequent levels AND the overall QA cycle.

If a reduction in defects is our primary goal then the first question we should be asking ourselves isn't "How much unit testing should we do?" but rather "Where should we unit test?". This focuses our efforts on those elements within our code that have the greatest surface area for defect propagation and leaves out those areas where a defect has little to no impact any further down the chain. Obviously, if we are following an MVC/MVP pattern, this dictates that our unit testing occur primarily at the Model layer, secondarily at the View layer, and finally, if at all, at the Presentation layer.

Measuring Value

Let's bring this back around to the original argument, which is that Unit Testing (in a TDD manifestation) is not worth it when working with SharePoint. If the developer is truly following the guidelines established by the Patterns and Practices Group then he or she has already begun building even simple artifacts such as web parts according to an MVP pattern. If not, having a whole lot of tightly-coupled code is going to make the developer's task much harder as they progress through varying levels of difficulty; it would be best to first refactor for at least a basic level of abstraction before implementing any type of structured QA process.

For purposes of this discussion, let's look at a sample web part which displays SharePoint list items within a GridView control:


200907011054.jpg

[NOTE: This is obviously sample pseudo-code; the methods are rough and there is no error handling. In addition, the View layer really should be completely abstracted from the SharePoint OM but I left the hook into SPListItemCollection there for brevity. Your mileage may vary.]

In this sample, the biggest payoff in unit testing occurs at the lowest layer. The most obvious reason for this is that the Model code is actually interacting with SharePoint so the less defects the better. In addition, memory consumption improvements can best be implemented in the base layer and any potentially catastrophic defects will be isolated from the rest of the code (meaning failures which result in the page failing to render, etc.). Finally, and perhaps not immediately obvious, is the fact that a very well architected Model layer can be reused across a large number of projects. This type of code reuse is one of the primary advantages of pattern-based development; when you measure the cost of creating the initial unit tests across multiple projects their value increases exponentially (as do the ramifications of a major defect). Note that no other types of testing are performed this low in the stack; as a general rule, if Model code includes any activities which directly impact functionality or integration then it should be rewritten to achieve a greater degree of abstraction.

In subsequent layers, Unit testing plays a diminishing role, due mostly to the fact that the objects being manipulated are well-known core ASP.NET controls (GridViews, DataTables, etc.); however, there are still opportunities to reduce the surface area for potential defects. Of immediate concern would be the calls to the Model layer, which should be validated, along with the objects being returned to the Presenter layer. It may be necessary, depending upon the business logic, to also insert some level of Functional testing at this layer, should doing so validate a potential defect area (such as making calls to external data sources or third-party assemblies, especially those which make updates or change another object's state).

At the Presentation layer Unit testing has almost no ROI whatsoever. Sure, there are situations where validating this or that piece of UI code pays a dividend, but for the most part this is not the case. Test cases at the topmost layers should focus on user interaction through validation of functional specifications, process flow, usability, navigation, etc. At this point testing is almost entirely out of the developer's hands (with the exception of visual elements which may not render correctly, behave erratically, or otherwise exhibit a relatively minor defect).

So how does all this play into the value equation when developing on SharePoint? The answer by now should be obvious - if you build an abstracted Model layer which effectively isolates communication with the SharePoint framework, you have created a valuable code element which can be reused across multiple projects. In order to insure that this element functions as expected - and that future updates and enhancements do not break the functionality of dependent projects - this code should be as testable as possible. Why? Because, as Andrew explains in our PodShow, testable code breeds confidence - confidence in the stability of the code base, confidence in other team members, and confidence in the process or pattern. I would also add that it makes potential impact of proposed changes measurable (something that is hard to achieve in most development projects) and provides a baseline for risk management.

I believe that the value proposition boils down not to whether you should or shouldn't test but how much code should you write to ensure quality output (however that's measured in your organization). I also believe, and this is the point at which Andrew, along with other TDD adherents, and myself begin to diverge, that validation of certain activities is better handled by the code itself and not by a fragile edifice of increasingly complex test cases. At some point you need to make a judgement call as to how much validation is enough and whether or not error-handling will suffice instead. You must also take a long hard look at how much time is being consumed writing test cases for situations that are either beyond your control, rarely encountered, or just too involved to make it worth the developer's time. But when you measure the value of a shared code base that serves multiple projects and provides testable abstraction against the cost of achieving a level of validation that satisfies your own internal quality standards, I don't believe there is any question as to whether or not Unit testing is worth the effort. In fact, I would argue that, due to the complexity of the SharePoint object model, the various undocumented and often erratic behaviors, and the level of skill required to effectively troubleshoot and optimize such code, Unit testing has more value in a SharePoint context than in any other.

Theory vs. Practice, Redux

As always, this discussion centers as much around theory versus the actual implementation of that theory in practice as anything else. A team can waste countless hours writing thousands of lines of test code and completely obliterate any chance of ever gaining a return on that investment. On the other hand, there is something to be said, especially in an Agile context, of getting code out the door as quickly as possible and dealing with defects only as they arise. Both approaches have merit, and you can generally find a few people willing to argue strongly for or against one or the other, but most of us fall somewhere in the middle.

The key to determining how best to tackle the problem is to first define what you want to achieve and then identify the most efficient and effective way to achieve that objective. Is there a hard cost for implementing a unit testing regime? Absolutely. But being smart about where and how to do it can greatly reduce the overall cost and operational overhead while still managing to satisfy quality standards. Is there a learning curve? There is if you've never done it before - potentially a very steep one. The payoff is that once you've learned the basic principles they can be applied across nearly every project in a unified manner, much like Six Sigma and ISO 9000 principles have improved manufacturing process across a wide variety of industries; the code changes but the process remains the same.

One very large pitfall that organizations must be careful to avoid, the discussion of which comprised the main thrust of my original post, is the tendency to overestimate the value of a given methodology. Unit testing can be a very good thing when used properly but the whole TDD religion can wreak havoc in its overzealousness and self-righteousness. Unit testing alone does not comprise the sum total of quality assurance in software development and its impact shouldn't be overstated. Test cases are not a substitute for a well-defined and well-document API. Code should be written to meet functional requirements not to satisfy test cases. And mock objects can provide a very dangerous level of false security (more on that in a subsequent post). If you only do Unit testing and nothing else you will gain some level of additional quality but by no means will it be exhaustive; to achieve a full measure of confidence in the final product you must combine it with the other elements in the quality lifecycle and you must make quality the driving force behind every project.

I believe, like Andrew, that there is significant value in creating testable code that provides confidence in the software development process. While we may differ on the theoretical aspects and on various points related to the overall integration of Unit testing into a larger framework such as TDD, I think we can agree (and demonstrate in real-world scenarios) that the investment on the front end pays real dividends on the back end. To make a claim that SharePoint and TDD are incompatible, or that putting the two together is not worth the time and effort, is both disingenuous and misleading. I would much rather that my development team is doing some kind of testing - any kind of testing - over nothing at all. And if they're going to do it, they should take a hard look at why they are doing it and formulate some kind of structured process. There's no shortage of bad code and bad development practices out there; isn't time we started talking about how to improve that situation instead of slagging off the entire effort?

July Community Events

Hard as it is to believe 2009 is already half way gone. It's been a hectic year for the SharePoint Community and, despite summer vacations and attempts to escape the heat, July is shaping up to be just as busy. Here's a quick update on some upcoming events:

SharePoint Saturday Ozarks

Join us for the first ever SharePoint Saturday event in Harrison, Arkansas on July 18th. Northwest Arkansas has a growing and vibrant SharePoint community and folks from all around the region will be attending this event. There will be tons of great content on all aspects of SharePoint, from development to architecture and administration. Spend a Saturday with us and come away with some great SharePoint knowledge.

SharePoint Saturday Dallas

The SharePoint Saturday wagon train rolls into Dallas on July 25th. We've put together a great roster of speakers and sponsors for this event. Be sure to get there early and come prepared to learn.

D/FW SharePoint Community

We kick off our fourth year of the D/FW SharePoint Community on July 21st. The theme for this month will be managing projects with SharePoint. Be sure to set aside extra time to attend one of the breakout groups and learn more about using SharePoint as a project management platform from a Strategy, Operations or Development perspective.

D/FW SharePoint Developers Group

The D/FW SharePoint Developers Group and the D/FW SharePoint Community are coming together to provide a single source for all things SharePoint in the North Texas but there's so much content for developers that we can't contain it all in one meeting. Join Kirk Evans from Microsoft on July 8th to learn what's new with the Visual Studio Extensions for SharePoint version 1.3 and discuss development tools and techniques.   

SharePoint UK User Group - Nottingham

For all the UK SharePointers in the North of England and the East Midlands, July 2nd will be a great opportunity to learn about MOSS Enterprise Search from Shaun O'Callaghan. Also, Alex Pearce will be talking about end user adoption, branding, site templates, and navigation. There's sure to be a pub nearby to carry on discussions after the event.

Whew. That's a lot of SharePoint to kick off the summer season. Be sure to put one of these events on your calendar if you're going to be in the area. Drop a comment if you want more info. See you in July!

SharePoint Saturday Dallas Call for Content

Last week we officially announced the upcoming SharePoint Saturday event in Dallas on July 25th. If you are a SharePoint professional in the Dallas/Ft. Worth area and would like to present at the event, please email me directly (eshupps [at] binarywave [dot] c o m) and I will send you the official submission form (please include "SharePoint Saturday Speaker Submission" in the subject line). There will be three tracks covering IT Professional, Developer, and Architect topics, with each presentation lasting an hour including Q&A. If you're not sure what topic to present or have a few ideas and don't know which one would be best received, ping me with your questions and I'll steer you in the right direction.

We encourage community members who have never spoken before to submit topics for this event. SharePoint Saturday is a casual gathering that will give you a great venue to hone your presentation skills while networking with other devs, admins and architects. If you've ever wanted to share a cool web part that you built, show off a nifty customer solution, or talk about issues that really drive you crazy, this is the place to do it. I will be hosting a new speaker orientation sometime prior to the event (schedule TBD) with tips, tricks and hints on how to deliver a quality presentation; don't let fear of public speaking or nervousness over never having presented before stop you - we want to hear what you have to say!

More information on the event can be found on the official SharePoint Saturday Dallas page:

http://www.sharepointsaturday.org/dallas

Announcing SharePoint Saturday Dallas, July 25th 2009

Today we are officially announcing the first ever SharePoint Saturday event to be held in Dallas on July 25th, 2009. SharePoint Saturday is a free community-focused SharePoint event dedicated to educating and engaging members of the local technical community. Much like user groups and other community oriented events, SharePoint Saturday draws upon the expertise of local SharePoint IT professionals, developers and solutions architects who come together to share their real-world experiences, lessons learned, best practices, and general knowledge with other like-minded individuals.

SharePoint Saturday will be hosted at the Microsoft campus in Las Colinas and is free to anyone who wants to attend. The day starts at 9:00 AM with a short introductory keynote and ends at 4:30 PM. Lunch will be provided and there will be numerous giveaways throughout the day. There will be three primary content tracks – IT Professional, Developer, and Architect – from which attendees may select the topics which most closely align with their job function or area of interest. Each track will consist of five presentations lasting approximately an hour and ranging from introductory, 100-level content to highly-technical, 400-level “expert” sessions.   Speakers will represent a broad cross section of the community and offer a variety of different perspectives and points of view.

SharePoint Saturday is a great opportunity to learn, share and network. Please join us on Saturday, July 25th for a full day of education and excitement. A full session schedule will be posted soon. We look forward to seeing you there!

For more information, please visit the following site:

http://www.sharepointsaturday.org/dallas



Avoiding Bad SharePoint Advice on the Web

As I’m sure everyone knows by now I’m a big fan of community involvement in whatever form it takes - blogs, wikis, CodePlex projects, books, speaking engagements, you name it - if it benefits the greater community and enhances people’s knowledge then you can bet I’ll be behind it 100%. That being said, free information on the web sometimes has to be taken with a grain of salt and it can very much be a "buyer beware" scenario. Case in point - I was recently made aware of the following post: Best Practices of SharePoint Farm configuring and deployment Part 2 - Installation & Configuration. I don’t know the author and I’m sure he’s full of good intentions but there is some very bad and erroneous information in this post and you should be wary of his recommendations. Let’s break it down into some of the more salient points:

"Use Windows 2008 with the following roles: Web Server role, Windows Internal Database, and the Microsoft .NET Framework 3.5"

The proper role for a SharePoint WFE is "Application Server", not just "Web Server" - you need the additional features in the "Application Server" role in order for SharePoint to function. Also, I would dearly love an explanation of what, exactly, is gained by installing the Windows Internal Database on a WFE. It’s extraneous in this context and shouldn’t be installed unless there is a driving non-SharePoint need for it (and, try as I might, I can’t think of one of the top of my head).

"SharePoint can be used with the third party databases, for example Oracle, to store List content and to provide other services such as Authorization or Personalization."

Say what? Since when can list content be stored in Oracle? This is completely false - list data is stored in the SharePoint content database in SQL Server. If the author is referring to lists based on BDC profiles which read from an Oracle database then I could accept it but if that’s what he meant then he should have said so; there’s no mention of the BDC in that sentence. I’m not sure what kind of personalization he’s referring to but that piece is handled by the SharePoint profile database, not by any third-party database (might need some clarification here on exactly what is being implied).

"Install Office 2007 on Application Servers…Install Office SharePoint Designer(SPD)"

Whoa there, big fella…just hang on a second. I cannot think of one good reason why Office or SPD should be installed on *any* production SharePoint server. SharePoint doesn’t need it and you darn sure shouldn’t be working directly on the servers for any type of client operations. Keep desktop apps on the desktop where they belong not on production servers.

"Using WSS/MOSS installation without Service Pakc and applying Service Pack later is error-prone approach"

While I don’t necessarily disagree with the idea of using slipstreamed installers - it can certainly make your life easier - there’s nothing "error prone" about applying patches after the fact. The latest hotfixes are all rollups of previous hotfixes and Service Packs are released throughout the lifecycle of the product. At some point you will have to install a patch after the product is already in place. Plan for it, test it in a dev environment, and then do it in production. This is just a silly statement.

"Take into account that uninstalling of SharePoint is not supported."

Um, seriously? Says who? While it is true that uninstalling SharePoint leaves behind some artifacts that may need to be cleaned up manually, this by itself does not make it an "unsupported" action. We need to be very careful when throwing around terms like "supported" and "unsupported" and make sure that PSS has specifically identified the action in question as being one or the other. I’m not aware of any guidance from the Product Group or PSS relating to uninstalling SharePoint.

"Navigate to the Central Administration Site and activate SharePoint license - Enterprise or Standard."

False. There is no such thing. Standard features are enabled by default but you must enable the Enterprise features in Central Administration. You do have the ability to "Convert license type" (where you manually input your license key) but there is no license "activation" process.

"Navigate to the Central Administration site and disable “Web Application” role for all servers in farm, except application servers."

Read the "Services on Server" page carefully - the description for "Web server for medium server farms" reads as follows: "Web application and Search Query services run on this server". That’s trying to tell you something - that your web front ends need the Web Application service. Refer to Daniel Webster’s post on this topic. Removing the Web Application service after the fact is bad mojo. If you don’t want a WFE to run Central Administration then make that selection when you run the Configuration Wizard - don’t do it after the fact or that server will cease to function as a web front end.

It is unfortunate that some people may actually follow this advice without realizing that they are being led down the wrong path. If you cannot afford to bring in an experienced consultant to help insure that your SharePoint deployment is done properly then my suggestion would be to gather information from several sources before taking the plunge so you have some idea of what the general consensus is within the community (better yet, attend the SharePoint Best Practices Conference and get the information in person from well-known experts). It doesn’t take too much searching to discover when someone is peddling bad advice; they may be doing it for good reasons but at the end of the day it’s *your* portal and *your* butt that’s on the line if it’s goes horribly wrong.

Wandering in the Mac Wilderness (or My Afternoon in the Apple Store)

I know, I know...all this Macintosh stuff is completely off-topic for a SharePoint blog but I just had to get something off my chest here - just delete this one if you don't dance to the Mac groove. Despite my ranting about how incensed I am over the two-steps back "updates" to the current MacBook Pro lineup, I still consider the 13" model to be one heck of a computer for average users. After shopping around a bit and comparing features and prices between Dell, Sony, Lenovo, HP and Apple (I won't even consider the rank ugliness and poor support of Toshiba, Gateway, Acer or the other also-rans), I came to the conclusion that the new 13" MacBook Pro is a pretty solid contender. The closest in terms of quality and performance was Sony but I quickly discovered that the Apple tax is nothing compared to the Sony tax - holy cow are they proud of those things. Dell was the second runner-up but the Studio XPS machines are just as pricey as an MBP when you spec them out and the build quality and battery life just aren't on part with Apple or Sony. So, after much gnashing of teeth as to whether or not I still wanted to support Apple based on their dissing of corporate users, I bit the bullet and trundled off to the Apple store to pick up a 13" MBP for my colleague in the UK.

First, let me just go ahead and point out the obvious - anyone who works at an Apple store is a bit weird. Some are downright creepy but most are just harmless hippie types who really can't get a job doing anything else (seriously, do you really think you're going to get a job in corporate America with that scraggly beard and beach-bum attire?). The major exception are the business team members who are more aligned with polite society (or as polite as we get down here in the deep south, anyway). Having said all that, I should point out most of the sales folk in the Apple stores are *very* knowledgeable about their company's products. They can jump from OS X to iPods to Apple TV without so much as blinking and give you all the speeds, feeds, and other purchasing information that you may need. And, in my experience, they genuinely seem to want to help customers get all their questions answered. [Ok, I said it - now everyone can flame me about how cool Macheads are and all that but they're still weird people - nice, friendly, and helpful, but weird nonetheless.]

[[Interlude: I just had someone tell me how they felt walking into a Mac store for the first time. They said it was like "being at a cult meeting" and how they felt the employees were trying to "convert them into a new religion". After buying her an iPhone for Mother's Day, my wife told me when we left the store that the sales guy was "beyond creepy" and that the whole thing felt like a revival meeting with a hint of The Twilight Zone. Different stores, same weird people. I'm just the messenger here, folks.]]

So I made the mistake of going into my local store at 4:00PM only to find myself in the middle of complete chaos. People running this way and that, high-school grads playing with every single gadget in hopes that mom and dad will ship them off to college with some cool gear that they can brag to their friends about, kids playing games on massive monitors (good move, Apple - keep the kids occupied while their parents spend money. I dig it.), and a general feeding frenzy over iThis and iThat. Recession, indeed. In the midst of all this, as I strained to find the business rep who feeds and encourages my Mac obsession, I overheard several sales associates giving their pitch to prospective buyers. What I heard was troubling - it seems as if the accepted sales strategy is to bash Microsoft, talk a little about how sexy the computer is, bash Microsoft some more, demo iPhoto and GarageBand, then finish with bashing Microsoft some more.

Now, to be fair, I'm down with promoting yourself over the competition and demonstrating how cool your widget is versus their widget, but let's be honest here - Microsoft doesn't make computers. I know that's lost on a great many people but Redmond has little control over the design and features of the average notebook PC (hence the "Vista Capable" launch fiasco). Telling people how great Mac OS X is because it doesn't have driver issues is the highest order of misinformation - drivers are the responsibility of the OEM, not the OS vendor. It's easy to keep conflicts to a minimum when you limit the customer options to virtually none and control all the hardware; that's the classic "closed box" Mac approach versus the "open box" PC approach.

Furthermore, just how honest are you being when you tell people that Vista requires endless updates and patches? Umm, just how many versions of OS X are we up to now? And how many times to I have to run Apple Software Update (hint: at least once a month)? C'mon, that's just total crap. Windows Update is there to insure that customers have the latest and greatest software, not just for the OS but also for business applications, drivers, and umpteen other things. And don't even get me started on the baloney about User Account Control being too intrusive; as soon as you disable automatic login in Leopard you get prompted for damn near everything - I have to enter my password just to launch a terminal session, open a virtual machine, change a system setting, you name it. I get prompted to enter credentials far more in OS X than I ever do in Vista/Windows 7 (at least in Win 7 I can dial it down to nothing while still maintaining a secure login). Once again, more unnecessary Apple FUD (Fear, Uncertainty, and Doubt).

But what really chaps my hide is listening to business team associates bash Microsoft. I actually heard someone say to a customer "Why would you ever want to run Windows again? You won't need it once you try Leopard. That Vista stuff just sucks." I wanted to smack the guy upside the head (just like those idjuts in the forums who try to convince people that they don't need more than 4GB of RAM or that BootCamp is the first level of Dante's hell). First of all, there's a ton of software that doesn't run on a Mac and never will (Visual Studio, anyone?). Second, Microsoft still owns the enterprise (and always will if Apple keeps selling corporate users short on features) and users have to deal with all sorts of home-grown apps that run on the Windows stack, not to mention all the Office products (Visio, Project, InfoPath, OneNote) that don't have a Mac equivalent. Corporate computing isn't about being "cool" or "edgy" - it's about getting work done. Apple has done a fairly decent job insuring that Windows can run on their Intel-based machines (although I'm still pissed off that they won't twist nVidia's arm into making a real Vista driver available for the 9400/9600 combo card); don't try to sell customers down the river by disparaging the tools they need to get their work done.

And here's another thing - Office:Mac may just be the very best piece of software ever written for the Macintosh platform since Photoshop. It kicks Office 2007 up and down the block in terms of usability and task-oriented functionality. I cringe when I have to switch back to Outlook from Entourage - it's just that much better. Microsoft would be well served to completely throw Outlook into the rubbish bin and replace it lock, stock and barrel with Entourage in PC form. Here's the kicker - Apple sales reps are trained to try and upsell you into iWork for fifty bucks when Office:Mac is sitting right there on the shelf, retails for several hundred dollars, and is far superior in every possible way (please, really, Pages and Numbers are joke compared to Word and Excel - let's just stop the madness right here and now). Want to bump those sales figures? Easy solution - sell Office instead of iWork. But you can't really do that when you just spent thirty minutes telling the customer how bad and evil Microsoft is (who, by the way, still owns a big chunk of Apple stock, is mostly responsible for rescuing the company from certain doom, and is probably snickering behind the scenes at all this us-versus-them nonsense).

And that leads me to my real point (I know, it always takes me five paragraphs to get down to the nitty-gritty) - you don't need to waste all your ammunition on the supposed competition just to sell your stuff. So what if the customer wants to run Vista on their new Mac? What do you really care? Apple still moves a unit and everyone is happy. Sure, you can tell 'em how great you think OS X is (and, having used it for months now, I can say without reservation that it's just not *that* much better than Vista - good, yes, but it ain't all that) but with iTunes available for the PC you can still sell 'em all the iPods and iPhones that you want so just what the hell is the point? And I'm sorry but if it "just works" and is so damn easy to use, why are there always twenty people crowded around the Genius Bar being shown how to add a printer and set up Spaces? Are new Mac users really that ignorant or is it just a way to get them back into the store to buy more stuff? And I hate to have to point this out time and again but Finder still sucks - Windows Explorer eats it for lunch.

Sales associates shouldn't be preaching, they should be providing information - answer the customer's question, explain to them how they can still run their Windows apps on their new Mac, let them know that the Boogie Monster is not going to eat their children if they try to dual-boot into Vista, tell them how much Office:Mac kicks ass, and get on down the road. Sale made, customer happy, store meets its numbers. There's no rocket science here. But don't try to give me a sermon on the evil behemoth in Redmond. That's a two-way street and you don't want to go down it with me; I can just as easily turn that around and talk about the closed-box policies of Apple, how evil it is to force me into proprietary audio and video formats, how childish it is to control peripheral choices with an iron fist, and how anti-consumer the stupid the MagSafe no-license policy is.

As a Microsoft MVP, lots of people at conferences ask me about my Mac and I tell them the good, the bad, and the ugly. I know for a fact that several people have bought MacBook Pros because they saw my rig and asked me about it. I don't have to say anything bad about Vista or Microsoft, nor should I need to, but it sure doesn't help when a new customer walks into a store on my recommendation and gets bombarded by anti-Microsoft bias. Especially when the customer makes their living on Microsoft technologies (note to Macheads: Microsoft makes some very cool products - like SharePoint, for example. Put the latte down and base jump back into reality, Moonunit - we won't bite you, I promise.)

Microsoft and Windows aren't going away anytime soon - Macheads are just going to have to learn to live with that. Apple is clearly retreating from the Enterprise space and focusing purely on consumers but that's not going to stop people from needing to use both operating systems on their Macs. Selling one doesn't require an RPG attack on the Redmond juggernaut - they've got plenty enough features that they can be sold on their own merits. There's no need to try to brainwash the customer; give them the facts and let them make up their own mind. Try it - empowering customers is a really cool thing. And hey, isn't that what all that hippy, feel good, anti-establishment stuff is about in the first place - letting people be individuals and make up their own minds???

P.S. - Ignore all of the above with regards to Windows Mobile; I completely support any and all direct frontal assaults on that craptastic pile of cow manure. I would like to see a billboard at every freeway exit of an iPhone tearing a Tilt to shreds and eating the pieces. WinMo must die. Viva la revolucion!

Presentation for Utah SharePoint User Group on June 25th

I'll be presenting a combined IT Pro/Developer session to the Utah SharePoint User Group on June 25th. The session will combine my Configuring MOSS for Optimal Performance and Developing High Performance Applications with MOSS 2007 talks into one to address both audiences. Should be quite the challenge getting all that info into an hour and still have time for a quick demo and some questions. All via LiveMeeting. It's worth attending just to see if I can pull it off!

If you're in the greater Salt Lake area be sure to register to attend the meeting here. See you (virtually) there!

Note to Apple - Thanks for Nothing

Although most of the buzz coming out of Apple's WWDC 2009 conference is regarding the new iPhone 3G S, they also made some announcements regarding a revamped line of Macbook Pro's. Unfortunately, the news is really no news at all for 15 and 17-inch users. As I write this, I'm connected to my blog via an AT&T 3G WWAN card running in the ExpressCard slot of my 15" Unibody MBP. Apple, in their infinite wisdom, has decided that I don't need any such thing and are replacing the ExpressCard slot with...are you ready for it?...an SD card slot. Ooooh, thanks so much, Steve. That'll really help me stay connected.

To add insult to injury, new buyers will now be lucky enough not to be able to replace their battery on the fly. Wow, that's a great deal for people who travel a lot (like myself). Not lucky enough to score a window seat with a power port on a long flight? Too bad for you. We all know those claims of 7 hour battery life are complete B.S. so I'm guessing it'll be five hours on a charge and then you're done (I get more than that with my current replaceable battery - and I can swap in a fresh one when I need it). Not exactly serving the customer's best interests, now is it?

Finally, it's almost laughable that Apple is crowing about making Snow Leopard a true 64-bit OS. Um, yeah, you mean like Windows XP was seven years ago? C'mon, guys - that's the best you can do? And *still* no matte screen option on anything but the 17" model? In the immortal words of Bill & Ted: BOGUS!

Don't get me wrong - my beefed up 15" Unibody is still the best computer I've ever owned but Apple needs to do some serious rethinking of their marketing strategy. It's almost as if - despite their goofy commercials and upcoming Exchange support in their lightweight Mail app - the geniuses in Cupertino have decided to completely ignore the needs of the average corporate user. I'd love to bump up to the 3.06GHz model but this may very well be the last Macbook Pro I ever own. The 13" unit is an attractive option for the average user but beyond that they're not making any moves to capture market share from Microsoft in the enterprise space. What with Windows 7 getting a lot of positive attention and the low-cost netbook craze just getting into full swing, I'm starting to believe that all those C-level idiots who drove our financial institutions into the ground have all gone over to work at Apple...

UPDATE: Seems like Engadget mostly agrees with me. I didn't even mention AT&T but, yeah, they're pretty evil S.O.B.'s.

UPDATE II: Jiminy Christmas, Apple can't even get an SD card reader right. Take a look at what iFixit discovered - the bloody SD card sticks out half an inch when it's fully seated (and I can confirm this having just purchased the 13" unit). Has everyone in Cupertino completely lost their marbles? Seriously, WTF???

UPDATE III: And the hits just keep on coming. Really, Apple, how in the heck does this make any sort of sense at all??? (Looks like this has finally been fixed. 'bout time, Steve-O)

1 - 10 Next
Eric Shupps