Training Plan

How to start? I faced the same issues in 2006 and it took me a while to figure out the best possible start:

Of course your customer wants you to implement his Use Case (1). But first you need to understand why your customer uses SharePoint.

During my early developer years I trained a customer and got the following feedback:

While I had great technical knowledge he wished that I would better map the technical stuff to their needs.

The customer had a clear vision why they switched to SharePoint:

They wanted to have one place for their content and information.

They wanted to move forms and processes into SharePoint allowing users to easily use them.

They wanted to use SharePoint for collaboration.

So my customer understood which pain points SharePoint solves, what advantages it has and how it brings huge benefits to them.

Step 1: Understand what SharePoint is

From this point on I took my technical knowledge and mapped it to my customer’s vision. Every specification I wrote, every software design I did and every project I implemented was based on their vision.

Step 2: Understand how you can customize SharePoint

You can often solve a Use Case in different ways so understanding basic development concepts is the next step (2). SharePoint is huge and you won’t need everything. But you need to understand what you can use and how you decide which solution is the best for a Use Case.

An overview about APIs, Languages, Tools and Platforms is the main focus in step 2. It allows you to make a decision which Object Model (3) you can use leading to the next step:

Step 3: Understand concepts of each Object Model, and know how to use it in Visual Studio

Step 3 shows the concepts used in each Object Model. They are different and you need to know them.

Here’s a huge advantage:

I don’t know how to implement Workflows. And I don’t care. But if I ever have to implement them I know the basic development concepts, which Object Model to use, how the Object Model works and how to create a Visual Studio project.

So on top of a strong basic knowledge I can enhance my skills depending on my customer’s use cases.

The next step completes what I call a strong foundation:

Step 4: How to create a clean and flawless Development Environment

At the beginning of my development career I wasted so much time because of bad hardware and quickly created development environments. You’ll get errors in your applications and finding the reason can be a huge pain if your development environment isn’t working correctly.

I don’t know everything in SharePoint and so should you. They key is having a strong and reliable foundation:

All gray blocks in the above picture show this foundation and should be the focus of your SharePoint training. And of course each block has to be connected to each other giving you a path from start to end.

If you know the basics you then should take a few basic Use Cases and implement a SharePoint application.

Basic Development Concepts

Customizations & Capabilities

SharePoint can be used in a lot of different ways right after the installation to meet many different needs. It already allows users to create new sites or to customize them with lists and libraries, or to customize the site’s appearance and functionality.

Sometimes your requirements exceed SharePoint’s capabilities and there is a need to extend the core capabilities to meet your company’s business needs (1).

This can be the implementation of a custom process, accessing some kind of data, branding the user interface or just working with data in a different way.

You can use building blocks (2) to create SharePoint applications (3). Building blocks are mentioned in different MSDN articles but the guy who nailed it down is Eric White . He wrote an excellent post creating structure in the variety of terms, languages, frameworks, object models, and tools.

The following explanation is mostly based on his structure.

Building Blocks

A building block is like a category: In every version of SharePoint there are basic building blocks like creating Web Parts, Columns and Lists or modifying the UI (1). In addition to that there are advanced building blocks like using Enterprise Search or User Profiles (2) which depends on the version of SharePoint you are using.

A SharePoint Application (3) only uses some of the building blocks to create a solution that meets your own or your customer’s requirements. There is a common pattern of requirements like creating new lists for storing data, Web Parts for adding functionality, features to change the UI and new templates for web content.

During your SharePoint developer career you will gain proficiency only in a few building blocks since you can’t cover all SharePoint topics by yourself. Indeed this is an advantage: If you’re excellent at using basic building blocks to create applications you can extend your knowledge at any time if required. A lot of people get lost since they want to do everything.

Summary: In general you want to automate a custom process, enhance someone’s work and make people more productive. In detail you create a SharePoint Application based on building blocks where each building block includes programming tasks like creating, reading, updating or deleting data (CRUD).

SharePoint Applications

There are 2 different types of applications :

Server Applications are running on a SharePoint server.

You can implement e.g. a simple Windows service or console application running on a SharePoint server and accessed via Remote Desktop (1a).

You can implement a Web Part running on a SharePoint server which is used via a client’s browser (1b).

Client Applications are basically all applications not running on a SharePoint server:

Apps on a Windows Phone, IOS or Android device.

Apps in Office on a Windows system.

An ASP.NET / PHP Web Application running on a different server than a SharePoint server and accessed via browser.

A .NET Framework application (e.g. Windows Forms, console) running on a system with the .NET Framework installed.

Summary

SharePoint comes with a lot of capabilities and there is nearly no company using all the features available. But there are also business needs like integrating a custom process or branding the UI. Based on these developer scenarios you can use different building blocks to create SharePoint Applications which either run on the server or on the client.

Next Steps

In order to create SharePoint applications you can use different APIs and developer tools. Even though the most common development tasks looks familiar to ASP.NET development there are a lot of differences in the development and deployment process. These differences got bigger with every new version of SharePoint.

Because of the differences you need to understand the evolution of SharePoint since 2007 to successfully create a SharePoint Application.

But before talking about APIs let’s take a quick look at the architecture…

With every SharePoint version comes the ability to store content e.g. in lists or sites and to work with content using e.g. Web Parts (1). Additionally Service Applications provide more (complex) functionality like accessing external data using ‘Business Data Connectivity Services’.

The available Service Applications (2) depend on the version of SharePoint. Only the Enterprise version includes all Service Applications like ‘Business Data Connectivity Services’, ‘Managed Metadata’ or ‘Access Services’.

SharePoint

Content which is stored in SharePoint resides in Content Databases (1). In order to work with the content you can write different types of applications:

Server Applications running on a SharePoint Server

Client Applications running on Windows devices and platforms

Client Applications running on other devices and platforms like IOS, Android

There are different APIs you can use to extend SharePoint or to work with data stored in SharePoint.

APIs

You can extend SharePoint with Server Applications using the Server Object Model (1). These applications are required to run on a server where SharePoint is installed. An application running on the server can be a Web Part accessed by a user’s browser or a Windows Forms / Console application running directly on the server.

Since SharePoint 2010 you can use the Client Object Model (2) to write JavaScript, Silverlight or .NET managed (e.g. WPF, Windows Forms, console) client applications. The Mobile Object Model is new in SharePoint 2013 which is a special version of the Silverlight client object model and used for Windows Phone devices. While using the Client OM operations are batched to a single XML request to the Client.svc service. The service itself uses the Server OM and the result is sent back as a JSON object.

REST (OData) (3) provides access to SharePoint in case you can’t use JavaScript and you’re on a different device and platform.Each of the APIs has advantages and limitations so you need to carefully decide which one to use based on your requirements :

So the most basic decision is based on functionality or where your application should run.

On the one hand SharePoint 2013 offers a huge set of options to extend SharePoint based on your needs and customer’s requirements. On the other hand it’s more difficult to understand which (API) option is the better one or maybe the only one you can use.

At the end of the document you will see how to decide based on platforms, infrastructure or skills.

Languages

When it comes to SharePoint development a lot of frameworks, programming languages / techniques / conventions or markup languages are mentioned and it can be quite difficult to find out where to start .

In order to implement SharePoint Applications and to use its APIs you usually need a few years of experience with the .NET Framework and ASP.NET. This includes its concepts as well as applications written in C# or Visual Basic. You can also use JavaScript or REST (OData) where you don’t necessarily need .NET Framework knowledge.

Anyway with these backgrounds you will be able to create SharePoint Applications with some training. Having experience with e.g. LINQ can be helpful but isn’t required to start. First it’s important to understand the basics of SharePoint development and to be confident implementing basic things like working with data.

If you have a strong basic knowledge you can extend your skills depending on your interest or your employer’s requirements: You can deep dive into workflows, services or branding. Each of the building blocks for SharePoint keeps you busy for months... on its own.So instead of losing focus it’s better to concentrate.

Development Environment

SharePoint can only be installed on the 64-bit version of Windows Server 2008 R2 with SP1 or Windows Server 2012 (R2). Installing SharePoint 2013 directly on Windows 7 / 8 or Windows Vista is not supported. In this case you need to use VMware to virtualize your environment.

If you want to set up a production environment you need to use Windows Server together with SQL Server.If you want to create a development environment you are also required to use Windows Server. While this seems to be a disadvantage since you can’t install SharePoint on an existing Windows 7 / 8 or Vista operating system it has some great benefits:

First of all you want to have a development environment close to your customer’s environment so you will see infrastructure problems early. Infrastructure influences development and has to be considered.

Second implementing for different customers with one Windows Server environment will slow down your operating systems performance.

Instead you can use Virtualization to create a development environment specific to your customer’s needs. If you can choose between virtualization or not I highly suggest investing time into learning virtualization. You can easily exchange virtual images with your colleagues or create and restore backups. A lot of successful and well known SharePoint developers use this approach.

Virtualization

Virtualization means that you have a host which can be your laptop or a dedicated server. Virtualization software runs on it which allows creating and managing several virtual machines. A virtual machine represents a server which is usually installed on physical hardware.

You can use different virtualization software:

Hyper-V is a role that can be activated in Windows Server 2008+ or Windows 8 Pro and allows running virtual machines directly on your hardware. Your host operating system doesn’t slow down performance as a middle layer between your hardware and virtual machines.

VMware allows a wider range of host operating systems like Windows 7 or Vista. The disadvantage is that your host operating systems slows down performance since it’s sitting between your hardware and your virtual machines.

If you don’t have an operating system based on Windows Server 2008+ or Windows 8 Pro I recommend VMware as a useful solution.

Back in the days when SharePoint 2007 was released there was a lack of robust tools you could use to develop solutions. Since SharePoint 2010 we have a robust set of tools including project templates and project item templates. As a developer you can implement any scenario you could imagine using code. You can create extensible, reusable solutions and utilize source code repositories.

SharePoint development requires a lot of XML declarations and Visual Studio hides them in the background for beginners while allowing advanced users to modify it. Furthermore it helps to create solutions which can be deployed to / retracted from SharePoint.

SharePoint Designer

SharePoint Designer is a free tool that allows you to create no code solutions including

Customization of SharePoint sites and lists

Creation and export of workflows

Modeling of access to external data sources

You can rapidly create customizations but it’s limited because of using no code. SharePoint Designer should be used by advanced users since it can have implications e.g. on the deployment process of applications (solutions) or the migration process to the next version of SharePoint.

Summary

In order to create SharePoint applications you can use different APIs based on their advantages and limitations or your skills. While the amount of frameworks, programming languages / techniques / conventions or markup languages seems confusing you only need to focus on the basics. You can extend your knowledge when needed.

Since SharePoint has to be installed on Windows Server you should consider using Virtualization for your development environment. Together with Visual Studio you have a robust and flexible development environment.

SharePoint Evolution

As a developer I have requirements. How do I find the best way to meet them?

Development Changes

Almost every SharePoint Application for SharePoint 2007 used the Server OM. Those applications were Web Parts, Workflows, Event Receiver or Timer Jobs using data which was stored inside SharePoint lists and libraries.

While you could use an extensive set of options to extend SharePoint you could easily impact the performance of the whole SharePoint farm due to bad code. Upgrading SharePoint to the next version always included upgrading and testing your code against the new version.

SharePoint 2007 gave you an extensive way to extend SharePoint but also additional responsibility for the whole farm and extra work regarding your code.

SharePoint 2010 introduced Sandboxed Solutions and the Client OM. Microsoft addressed the problem of Server Applications (bringing down a SharePoint farm) with Sandboxed Solutions running in their own separate process. Sandboxed Solutions could only use a subset of the functionality the Server OM offered.

The new Client OM allowed developers to create applications running outside of SharePoint which can access SharePoint data.Although using Sandboxed Solutions or the Client OM has its advantages developers were confronted with a limited set of functionality to extend SharePoint and often continued to use the Server OM.

Using the Server OM within Server Applications. It has the most extensive set of options but can bring down a SharePoint farm and needs to be considered during SharePoint upgrades. Server Applications have to be installed on a SharePoint server in your company.

Using the Client OM within Client Applications. The set of options you can use to extend SharePoint has been enhanced compared to SharePoint 2010 and offers a true alternative to the Server OM. Client Applications run on desktops, tablets or mobile devices.

Using parts of the Client OM within SharePoint Apps. They run either on a SharePoint server in an isolated process or in SharePoint Online.

The evolution of SharePoint development wasn’t only driven by making SharePoint code more robust or offering a way to run SharePoint Applications outside of a SharePoint server. It has of course a bigger background…

On-Premise vs. Online

While you could create almost only Server Applications with SharePoint 2007 you can now create a wide variety of Client Applications running on Windows and non-Windows systems. You still need a SharePoint farm based on Windows Server and SQL Server to store content… but it doesn’t matter:

Which device and system you use to access content.

Which development skills and knowledge you have to create applications to access content.

If you have a SharePoint farm in-house (on-premise) or if you use SharePoint Online to store content.

Microsoft shifted their focus from on-premise SharePoint installations to a subscription-based model called SharePoint Online which is part of Office 365. A subscription-based model allows the customer to choose specific solutions while the customer doesn’t care about availability, maintenance, backup / restore and migration.

Based on different SharePoint experts like Andrew Connell there’s a change going on.

Should you change your focus too and create Client Applications independent of a specific SharePoint installation. Without the need to take care about availability, maintenance, backup / restore and migration… Without requiring SharePoint / ASP.NET development skills…

The answer is it depends on your situation and the next chapter gives you an approach how to decide between Server Applications and Client Applications.