Skip to content

Article:Managing the SharePoint Learning Curve

The core reason for pursuing development in Microsoft SharePoint at all is the ability to maximize productivity. While it may be fun to work on the latest and greatest technology, most development is done for a business purpose. Because development is done for business, the most important reason to work with SharePoint is improving productivity. Productivity might be viewed from the perspective of the time saved by not having to develop features that users may want but which are difficult to implement.

Productivity might also be viewed from the perspective of flexibility to adapt to changing requirements in the future or reusability of the software that is developed between different parts of the solution. No matter which way you look at the problem there are some distinct advantages to developing with SharePoint. However, on the other side of the fence there are some barriers to productivity when developing with SharePoint, not the least of these is the learning curve that every architect and developer must overcome when building SharePoint-based solutions. In this article, we’ll look at this learning curve and how to make it easier.

http://www.intranetjournal.com/articles/200801/ij_01_02_08a.html

leaky hose

Why SharePoint isn’t Perfect!

I rarely engage into debates with lunatics.  A wise man once told me that anyone who argues with an insane person is themselves insane.  As a result I’ve had a natural bias against engaging in religious wars directly.  When I do engage in religious wars (see “Open Source Software on the Desktop – Is it Right for You”) I generally do my homework.  I try to see all the sides of the equation as I can.  In the case of Linux vs. Windows – I ran both on my servers and on my workstations.  I ran them both for years before writing about it.  When I had reached my conclusions I validated them with someone who held a seemingly contrary position.  I did all of this because I try to avoid the insanity and stick with the facts.

I do currently host a few DotNetNuke sites on one of my servers.  Nothing really big but enough to matter but certainly enough to give me a sense for what the technology does.  I did a tech edit for the Beginning DotNetNuke Skinning and Design.  I certainly am not the foremost authority on DotNetNuke.  However, I do know a few people now who are authorities on the technology.  I learned a lot from my experiences with the product while getting it setup – and in working with it for the book.

I have spent a bit of time with Community Server – not nearly enough, however, I have great respect for Rob Howard and the guys at Telligent.  Do I believe that I can accurately articulate what Community Server does and does not do well – nope.  However, am I still trying to learn more about it – yep!

Why am I making a point to tell you about the related and semi-related products that I am paying attention to – and how I’m paying attention to them?  Honestly, because I am hoping that before writing another “SharePoint Sucks” blog post that someone will pause and really understand the platform first.  Even the short snippets I write about SharePoint I try to do with a balanced hand.  My End Bracket “You Should Learn SharePoint” article in MSDN magazine didn’t just mention the positives, I also highlighted some of the real issues that developers face.

I guarantee that there are issues with SharePoint.  I’ve got a list longer than my arm of things I want to see changed.  Some of them I communicate to MS – and some of them I silently live with – because I realize that there’s a reason why they did something the way they did and it’s better for the product to do it the way that they did – even if it inconveniences me, my scenario, or my customer.

I’m not saying that there aren’t truly bonehead things in SharePoint – there are.  Invite you to try to find them – and tell the product team about them when you find them.  (If you can’t get them I’m happy to hear from you and pass along reasonable, well articulated issues for you.)  What I’m saying is that for every bonehead thing that I find I find dozens of other things that exist for a reason.

The thing is that product development isn’t about absolutes.  No product team knows what everyone will do – or want to do – with the product.  They have finite resources and finite input on a product.  They have to compromise and build the best product they can.  It will have warts.  It will have gaps.  It will have bad spots.  The trick isn’t creating a product without these – the trick is putting them in the least intrusive places.

So let me it a few common complaints about SharePoint and provide my canned responses so you can skip the time of writing a half-thought out blog post if that’s your intention.

1)      It’s too complex – You’re right.  Anything that is flexible is.  SharePoint is very flexible and is therefore necessarily complex.  I’m not going to insult your intelligence to tell you that it’s easy – it’s not.  I learn more about it every day.  However, it’s a big product family and you can stay tactically focused and only learn those things that apply to your situation – if you want.  Here’s a quick list of questions and answers on the complexity of SharePoint in no particular order.

a.       Do you have to know XSLT to work with SharePoint? – not really unless you want to work with the out of the box web parts.

b.      Do you have to know XML to work with SharePoint – probably. 

c.       Does that XML knowledge surpass most people’s understanding? – at times. Yes – most folks don’t understand namespaces in XML and in some places it’s important to SharePoint.  This occurs most notably in web part configuration .  i.e.  .webpart – files.

d.      Do you have to understand Code Access Security? – Yes, but frankly if you’re developing a web application in ASP.NET you should know this.  You don’t have to write CAS policies if you’re willing to deploy everything to the GAC.

e.      Do you have to know ISA Server, Active Directory, Indexing, SQL Server, IIS, etc.?  — No not really.  Sure it helps but I wouldn’t say that you “have” to know these things.

f.        Do you have to know Master Pages?  — Only if you want to brand the pages or change the layout – if you don’t worry about that for your ASP.NET applications then you don’t have to worry about it with SharePoint.

g.       Is it hard to install? – Nope.  The standard windows  installer where you hit next a bunch of times and it will finish.  Sure if you install it in a complex configuration it will prompt you for a fair amount of data but by and large it will configure itself if you’re willing to take the defaults.

2)      It doesn’t do X as well as Y.  One of the things that I run into repeatedly is the thinking that SharePoint should be better than targeted applications.  These applications have on niche (or at least narrow) market that they are targeted for.  They solve one problem.  They’re not flexible.  They can’t be configured or reconfigured by users.  However, they do their one thing better than any other application.  When you compare SharePoint side-by-side with applications like this you can determine all sorts of ways where SharePoint doesn’t measure up.  However, that misses the point.  SharePoint is a general purpose tool that can be made to do several things – in many cases well above the “good enough” bar to make it a viable solution.  Sure the dedicated application may do a better job with some things.  There’s no doubt.  However, what’s the better answer from a organization perspective.  One product that solves many problems, is flexible, and has tight integration to Office – or a set of individual products that may each individually do slightly better at solving one or two problems but come with a set of integration, synchronization, and disaster recovery issues?  There isn’t one answer here – just a realization that you have to think about the greater good.

3)      SharePoint didn’t eliminate my need to organize my information.  I love this one.  It always leads me to Fred Brooks “No Silver Bullet: essence and accidents in software engineering.”  The reason is because there are no silver bullets.  SharePoint won’t eliminate the need to organize information – it will: minimize the need to have fully defined content taxonomies by leveraging full text search.  It will create new opportunities for organization by allowing the multi-dimensional aspects of metadata based organization, and by improving context.  If you have a bad taxonomy today, SharePoint will make it easier to find the information you’re looking for – however, it won’t make it possible to find everything every time.

4)      SharePoint didn’t automate my company.  No, SharePoint doesn’t do the truly hard work – it allows the hard work to happen.  SharePoint won’t magically define all of your workflows.  It won’t define metadata for each of your document types.  It won’t establish information rights management policies across the organization.  However, since it can do these things it becomes possible to have the hard conversations that lead to the results you want.  With the traditional network shares technologies there’s no opportunity for workflow, adding metadata, or automatic assignment of information rights management policies so there is little reason to even entertain the conversations.  It’s honestly a “the chicken and the egg” problem.  You can’t define the processes until you have a tool that can implement them – and you can’t fully implement the tool until you have the processes.  Jason Mraz has a song, Live is Wonderful that has much better examples than “chicken and the egg” but they’re less known.

 

I’m assuming that if you’ve read this far you’re saying “but you’re just defending SharePoint.”  I’ll take that criticism but I would ask that you look back at my responses – I’m really just defending the process of building software.  SharePoint is a flexible, general purpose, highly integrated tool.  It’s not for every situation and it won’t do the hard work of building taxonomies and it won’t automate your company.

 

For those developers who want to insist that it’s a hard platform to develop for, I agree within context.  Today we’re used to IDEs that do all of the heavy lifting for us.  We absolutely expect that we can hit F5 and compile, deploy, and test our work.  It’s not that way with SharePoint.  Absolutely we need better development tools for SharePoint.  However, that’s fixable without condemning SharePoint.

 

I “grew up” professionally programming on a VAX and on a PC in C.  I learned how to use print statements to know what my software was doing.  I didn’t have interactive debuggers.  I didn’t have the ability to set breakpoints.  I learned how to develop without these tools.  The problem is that most developers today never learned these skills.  Because of that if there isn’t an interactive debugger developers don’t know what to do.  I feel sorry for them.  I don’t like debugging with print statements – but I feel like it makes me a better developer to know how – and when – to do this.

 

So SharePoint isn’t perfect, but what is?

Thirsty Developer Podcast: SharePoint in the Enterprise

Several weeks ago I sat down with Larry Clarkin at IndyTechfest the result was a Thirsty Developer Podcast.

The topic was “SharePoint in the Enterprise” — you don’t get to much meat in the PodCast — but it’s a fun overview.

[Easter Egg: Listen past the closing credits.  Disclaimer: Most of my MVP comrades know that it’s not true but it’s funny when the podcast is “Thirsty Developer”.]

Take a listen:  http://thirstydeveloper.com/2007/12/04/Episode4SharePointInTheEnterpriseWithRobBogue.aspx

Feedburner setup for RSS

Very soon I’ll be migrating this blog to Windows SharePoint Services 3.0 (WSSv3) with Community Kit for SharePoint : Enhanced Blog Edition (CKS:EBE).  In order to prepare for that I decided to go ahead and setup a feedburner RSS feed for the blog.  The idea is that I’ll get everyone to subscribe there so that the change to CKS:EBE is totally seemless.  I’ll be redirecting URLs once I get to CKS:EBE but in order to ensure that you make the transition, please update your feeds now.

The FeedBurner feed address is http://feeds.feedburner.com/NotFitForPrint.

DotNetNuke and SharePoint — An {EndBracket} response from Shaun Walker

Apparently Shaun Walker read my {End Bracket} article in MSDN Magazine.  He responded on his blog with You Should Learn DotNetNuke.

I have an appreciation for DotNetNuke — it’s definitely the right solutions for some clients/organizations.  In fact, when faced with the question about whether to setup SharePoint or DNN for the church I am a member of, I chose DNN.  I wanted to get a better understanding of DNN so I performed a technical edit of the Wrox title Beginning DotNetNuke Skinning and Design.

I have a great deal of respect for DNN.  Most of my work — because my clients generally deal with documents, and large scale sites — is SharePoint.  However, DNN is a great alternative.

Article: { End Bracket } You Should Learn SharePoint

For a developer,  there’s never a shortage of material to learn. Whether you’re exploring the backwoods of Sys- tem.DirectoryServices.Protocols, spending quality time with generics, or delving into the fine art of garbage collection, there is always something clamoring for your attention. So why should you make learning Microsoft® SharePoint® technologies a priority?

http://msdn.microsoft.com/msdnmag/issues/07/12/EndBracket/ [Article no longer available]

SPFileCollection.Add(string, Stream, Hashtable)

If you’re using one of the SPFileCollection overloads to create a file in SharePoint you’ll find that there’s a few overloads that take in a Hashtable for properties.  The key of the Hashtable can not be the GUIDs for the fields, they should be the internal names of the fields.

SPContentType.Fields and SPContentType.Parent

A few random observations about SPContentType…

.Fields — This isn’t a complete collection of fields as it might be on SPList.  It’s just the fields that are directly added to the content type.

.Parent — This won’t return you a null if there are no parents to this content type.  Instead it keeps returning you the same content type.  So rather than doing what you would normally do — SPContentType.Parent == null — to test to see if you’re at the top content type, you must check SPContentType == SPContentType.Parent.  (or add .Id to each of these to make sure that you’re getting an equality comparison rather than a reference comparison.)

You may notice that some of the core fields for SharePoint items aren’t represented anywhere in the hierarchy (Author, Editor, Created, and Modified were the ones I noticed).

A final note is that even if a content type is activated in a site collection you may not be able to get to it from the SPWeb object of the current web site, so you get to walk the tree up to the root site in the site collection and pickup the reference from there.  Of course, you don’t want to add it to the current SPWeb object because you’ll get an error about a duplicate object.  (Apparently it exists, you just can’t retreive it.)

Article: Understanding SharePoint Branding Options

When we’re talking about branding in Microsoft SharePoint there are several options. You’ve probably heard about site definitions, site templates, themes, master pages, page layouts, CSS, and so on. In this article we’ll tear apart each of these options and discuss what you’ll want to use to modify the appearance of your pages.

http://www.intranetjournal.com/articles/200711/ij_11_20_07b.html [Website removed]

Recent Posts

Public Speaking