Saturday 18 August 2012

50 reasons why I don't like SharePoint development

I was introduced to SharePoint in 2001 when it was called SharePoint Portal Server 2001, codename Tahoe. From time to time I have been put on SharePoint projects but I never came to like it.
I think I have worked on more than 10 SharePoint projects, some of them fairly big. The last time I used SharePoint was back in 2011 with SharePoint 2010.

This blog post is not intended as an evaluation of SharePoint with a socio-technical economic corporate or whatever perspective. SharePoint might, or might not, be a good choice for your development project. This post is Not about SharePoint as a viable product. This post is solely about what I think about SharePoint as a development platform.

Please note that I am talking from my experience as a developer who happen to like simplicity, structure and who cares about usability. What you will find here is simply my personal view of SharePoint development. This is based on doing deep custom SharePoint development, not just configuring out-of-the-box SharePoint sites. Also note that this blog post was written before the release of SharePoint 2013.

Not just me being an old crank
Even prominent people within the .Net community such as Carl Franklin and Richard Campbell openly say what they think of SharePoint. In .Net rocks podcast episode 734 Richard Campbell makes the following joke: "The thing about SharePoint is you start on having a problem you think you can solve with SharePoint and then you have two problems."

Richard Campbell even goes as far as to say SharePoint makes you cry.

You'll even find developers of SharePoint at Microsoft out right saying: "It is not, and never will be, a viable developer platform."

The 50 reasons why I don't like SharePoint development and why I'll hopefully never do any more of it:
  1. SharePoint kills creativity with its configurations. Flicking on xml/xsl files is not very inspiring.
  2. The backend user interface is mostly not very intuitive. I as a developer don't like to develop systems that suck.
  3. SharePoint as a framework is too big and complex and you never get to feel that you master it all.
  4. The product is pricy and too big so I can't use it for my private projects. That means I will not be able to reuse the skills on my hobby projects.
  5. SharePoint experience has limited transfer value for other type of development projects. 
  6. There is usually IT politics involved since it's a big decision to start building the competence and infrastructure. With politics often follow dirty games, power struggles etc.
  7. SharePoint requires lots of training and long-lasting changes in the behaviour of users. This means that you don't get to see the results of your work and how users actually end up using the system. By the time the use of the solution has stabilized you are long gone on other clients, other projects or have left the firm.
  8. Once an organization and the development team has acquired SharePoint licences and competency they tend to reuse SharePoint on other IT projects where SharePoint is not the best fit. SharePoint often becomes overkill and results in very large development costs. You as the developer may end up having developed a system that is doomed to fail. 
  9. Organizations who have acquired SharePoint for their internal systems often want to reuse the platform for their public facing website to consolidate their infrastructure/licenses. It brings with it a large overhead and the public facing website becomes too complex to manage , maintain and evolve. You as a developer might get stuck doing boring support or very difficult maintenence.
  10. Agile methods can become problematic. SharePoint content types cannot easily be changed once it's in production or even in testing environments. This means projects have to be fairly waterfallish.
  11. Difficult to write unit tests. Poor separation of concerns.
  12. SharePoint version 2010 does not support .Net framework 4.0.
  13. The platform is resource demanding and becomes slow on your dev machine, especially if you have a VM setup.
  14. Debugging is slow. Timeout occurs. When attaching the debugging you'll often hook on the wrong w3wp.exe.
  15. Poor HTML rendered. Takes LOTS of time to customize rendering.
  16. No Asp.Net MVC support (unless you are only using the SharePoint API) .
  17. Heavy frontend html/js/css that runs slowly in the browser.
  18. Lots of XSL files. I never liked XSLT.
  19. Making control adapters is a headache, must deploy but then reactivate web app feature to deploy app_browsers file. compat.browser with control adapters debugging often don't work.
  20. The ghosted/unghosted feature of content types is a big headache.
  21. Some super users will have the rights to change contenttypes, delete site columns, delete or move lists. This is dangerous if you have custom backend code that uses these lists.
  22. Very difficult to investigate content in the database when debugging.
  23. Often you do not need workflow, content approval and document versioning etc. All these things make the solution more complex and you will have to remove or deactivate these things if you don't need them. Scripting removal/deactivation takes time.
  24. Lots of things happening under the hood that is not documented very well. New developers, not familiar with SharePoint will often make bad choices that will be very hard to fix later.
  25. SharePoint requires a lot of competency so you often have persons specializing i various SharePoint fields and often you'll have parts of the IT department that do SharePoint maintenance/operations tasks. This creates dependencies between people and you often get stuck waiting for other persons or departments to deploy or do other development tasks. If the required person or department is unavailable you are of course stuck and you look bad.
  26. Memory leaks are easy to add (although there are tools to find them), App pools regularly crash.
  27. Packaging and deployment is of course different from anything else. Additional competencies needed.
  28. The sheer magnitude of the product is difficult for developers. You'll need different third party tools. All the knowledge required is overwhelming.
  29. When the site goes down or suddenly become slow after an upgrade it is often very difficult to pin-point the error.
  30. The log file (ULS) is always filled with a ton of entries and you have no idea what half of them are. The ULS log is typically 2000 lines long and the error messages are very bad.
  31. The API returns data that are concatenated and needs to be parsed.
  32. Has to run on Windows server. It can run on Windows 7 but not really straight forward to configure your local environment if your team has a good continuous integration setup.
  33. Unpredictable system performance. When you have performance problems and investigate you will often not find the problem because there are just too many moving parts. Suddenly the performance is better. You look at automatic database tuning, at changes in content and changes settings/configurations. You look for memory leaks, do performance testing in the testing environment, restore different versions of the production database, you look at visitor statistics, web server logs, sql logs, application event logs, ULS logs, look at timer jobs, various manual jobs that can have been started, you look at users behaviour during the period, you check automated response testing like Gomez, what's hitting your site, crawlers, what content is being read, when is backup and indexing on the database running. Has the MOSS search crawler been running etc but the problem is often a mix of interrelated issues so it's hard to find by investigating sub systems one after the other.
  34. SharePoint has too many configuration options. An example is regional settings on each site. You might get problems showing dates consistently and not understand why.
  35. Lots of access control and post release configuration required. You'll have to determine what content types, site templates, page layouts, webparts should be allowed to use by who and where.
  36. If you on a page want to hide fields that are empty or add some conditional formatting you'll have to create custom webparts or usercontrols. Webparts that should be hidden in special scenarios requires additional development.
  37. Some out-of-the-box webparts (such as search) creates poor html which makes them harder to style and look a like on different browsers.
  38. Since everything is customizable in SharePoint you end up with less user friendly dialogs. For example if you use a very simple page publishing workflow there are still going to be superfluous user interface elements and interactions that makes it messy for the user.
  39. Ambiguous error messages.
  40. In a script-it-all dev environment you often configure some part of the SharePoint solution and to test it you do a deploy of the entire site by building it from scratch or running some upgrade scripts. You find that the configuration you just wrote did not work for some reason. The scripts takes 20 minutes to run so you spend the rest of the day tweeking the configuration files to get it to work by running the deployment scripts over and over.
  41. Setting up a sitedefinition always seems to be a problem. Settings up a new sitedefinition and configuring what features, page layouts, content types, master pages, welcome page should be used for a site seems like a straight forward job. But this for some reason always fails and you have to modify the configuration and redeploy and redeploy and redeploy until you get it right.
  42. A single typo in a setup config file can destroy your site and will be hard to locate.
  43. You are using a very large platform and you can't just copy one installation to a new site and start from there.
  44. In most cases you will start by reconfiguring the site from scratch. So most of what you do is to write code or configurations to build and deploy your site instead of spending time developing cool features using cool code.
  45. It is difficult to script everything. There are simply to many customizations and configurations that can be done. There is always some manual change that someone forgot to script.
  46. Too many layers of development. In other projects you might just have to copy the entire site, make some adjustments in a few config files, then set up the database and you are good to go. But with SharePoint you will have to write code that builds the things that builds your solution (unless you are doing simple projects using the SharePoint designer).
  47. The whole development process tends to get messy because things are just hard and complicated with SharePoint.
  48. Creating Internet facing websites are difficult because the platform has a lot of overhead. Lots of effort to go around things, removing things and making the site more accessible and faster.
  49. Because SharePoint development is so complex things very often takes more time than estimated so you miss deadlines or have to work overtime.
  50. If you have a SharePoint project with high expectations on visual design, usability or accessibility then you will require designers with good knowledge of SharePoint. This can be hard to come by and/or will require excellent collaboration between developers and designers. Often challenging.
  51. Microsoft usually makes big changes to SharePoint with each new version. If you have not followed best practices you are in for lots of work if you are upgrading in the future. What the best practices are takes time to learn.
  52. The preferred way to store data in SharePoint is with SharePoint lists. If you do not use lists and instead go with separate databases you can end up with a fragmented solution with many databases (SharePoint warranty breach if you meddle with the internal SharePoint databases). If you use SharePoint lists you are likely to run in to issues with the abstraction layers and problems trying to put relational data in lists.
Further reading

23 comments:

  1. Great Post Because this post post is really answered my problems about SharePoint Development.Thank you ..

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete
  3. this is the right blog who really don't like SharePoint Development.and really great reasons i have ever seen.

    ReplyDelete
  4. A very interesting and complete set of reasons, Roy. I've been given the task of evaluating Sharepoint and from the very first day, the interface has sent chills down my spine. It's completely illogical. Having worked with it for 2 weeks now, I'm of the opinion that Sharepoint is a bork fest of the first order and it would be quicker to code whatever is need from scratch. There are simply too many areas where it utterly fails to deliver.

    ReplyDelete
  5. Everyone has their own views but I think SharePoint is not that bad too. I agree to some of the points you made here for not liking it but still there are some of the reason to like it too.

    ReplyDelete
  6. Its hard to out Find Knowledgeable people on this topic but thumbs up you to share this type of information.

    ReplyDelete
  7. I am very pleased to find this blog. I want to thank for your time for this wonderful read!!! Keep Sharing, I'll surely be looking for more.

    ReplyDelete
  8. An interesting discussion is worth comment. I thinks you should write more on this topic, it might not be a taboo subject but generally people are not enough to speak on such topics. To the next. Cheers

    ReplyDelete
  9. SharePoint experience has limited transfer value for other type of development projects.

    Thanks for sharing this post..

    ReplyDelete
  10. SharePoint Foundation is free with Windows Server.. It is worth using in that case. It is so easy to use a non-IT user can create and maintain his or her own page for their respective department. Works very well for my company...

    ReplyDelete
  11. This comment has been removed by a blog administrator.

    ReplyDelete
  12. Nice post! that is good information, it is useful to me thanks.

    ReplyDelete
  13. Working being a project leader of SharePoint developer’s group, I deliver useful suggestions to my crew in order to accomplish any undertaking efficiently. I produce articles for many websites and article web sites, too.

    ReplyDelete
  14. These are the reasons which must be kept in mind by sharepoint developers.. And try to improve on these points...

    ReplyDelete
  15. Though as you say there is lots of reason behind not of choose SharePoint but there is also lots benefits of SharePoint for that community choose SharePoint.

    ReplyDelete
  16. Depending on doing strong customized SharePoint growth, not just setting up out of the box SharePoint websites.

    ReplyDelete
  17. Conclude 50 reasons for don't liking a SharePoint is really tough! Work you've done is really appreciable. But I think these reasons are not applicable to all as sometimes your requirement can be easily fulfilled by using SharePoint Platform.

    ReplyDelete
  18. Sharepoint makes me want to shoot myself, and then jump off a cliff.

    ReplyDelete
  19. Thank you, this was a very thorough overview of Share Point weaknesses. It will definitely help when making decisions and trying to explain to the client why their existing Share Point infrastructure used for internal purposes ONLY is not the best solution for public facing site that needs to be nimble and flexible, allowing for fast updates, scale-ability, manageability and efficiency.

    Thank you,

    ReplyDelete
  20. How do these observations and valid criticisms apply to SharePoint 2013?

    ReplyDelete
    Replies
    1. Don't know. I am happy to say that as a developer I have not had a need to develop anything on SharePoint for the last two years.

      Delete
  21. This comment has been removed by a blog administrator.

    ReplyDelete
  22. CHEERS!

    Here's some more:

    Many SharePoint powershell commands just don't work at times for mysterious reasons. The old stsadm is actually more dependable, and I actually end up reverting back to it times when PS fails.

    Referenced assemblies must be GACed.

    SharePoint purists are the worst. These guys come around and spout about how great SharePoint is and it makes my skin crawl. They almost have never had to do any serious development with it, and have never had to deal with the problems listed.

    Certain "features" such as SharePoint DataServices sometime do not work 100%. I just had an instance where I was using this and certain properties, just didn't come through. Another heavy culprit is the User Profile Service.

    The content databases have been basically obfuscated by Microsoft. Try to go in there and look around.

    List data integrity is an epic fail.

    If you make custom WCF services that reside in SharePoint, there is no support for nettcp bindings.

    Like you said, there are simply too many ways to tackle a requirement. I know that sounds positive, but it's a crap-shoot when trying to pick the right method. One solution may be slow but easier to develop, another may be fast but require tons of development time, others "sound good" but may end up leading the developer on a wild goose chase.

    Every new version of SharePoint just introduces "new stuff," but all the underlying problems you mentioned usually aren't fixed from version to version.

    I have trouble finding end-users who actually like it. When you deal with all the listed problems, and find that most people hate SharePoint-- it's well... depressing.


    I know I have a ton more.

    ReplyDelete

Spammers will be hunted down and punished.