My Quest to Microsoft Certified Master – SharePoint Server 2010

by ivan bondy 20. June 2013 14:20

I finally done it!

Yesterday, I spent 8.5 hours retaking my SharePoint 2010  MCM qualifying lab. This exam is really brutal and you need to know your topics really well as you are expected to finish 1 month of “real world” tasks in 8.5 hours. I finished my tasks with 20 seconds to spare. I was expecting grading in couple of days and to my surprise I received email this morning confirming that I am now a  *Microsoft Certified Master for SharePoint 2010*!

Weight of the World got lifted from my shoulders. My 15 months quest is now over. I will not go to details but my quest was almost identical to my fellow MCM Kirk Evans. You can read his great and extensive write up here.

In my case I had just two differences. First, I took “Hybrid” rotation which was 1 week on site at Redmond, WA followed by 10 weeks of remote classes. Second, I was incredibly lucky to pass my written exam on my first try. I have to give huge credit to our rotation team work and materials we created to get this exam out of the way on first try.

As for rest of the story, I could just place my name on it, and it would be accurate. Including taking vacation before each qualifying lab retake.

After few months off, I will start this process all over with MCSM SharePoint recertification.





Choice vs. Lookup Column: Which one is best?

by ivan bondy 22. March 2012 08:18

Both Choice and Lookup columns allow you to create a controlled list of values for an attribute. But there are pros and cons to both choices so it’s important to think about both your end users and your solution objectives when you decide which type of column to create.



Choice Column

“Mostly Best” Choice

Ease of adding new values by end users

Since the choices for a lookup column are maintained in a simple list, I have found that it is very easy to teach users how to add and maintain values. Moreover, site owners can, if they wish, easily share the responsibility for maintaining list values with other members of their team without giving those people full control privileges.

Choice columns are edited in either site settings or list settings and require full control privileges to update. My experience has been that unless a SharePoint site owner is very familiar with how SharePoint works and makes updates frequently, they will forget how to update the choice columns on their site. Writing good documentation doesn’t always help – users don’t always read it.


Ensuring that list values are relevant/ controlled

If more people can update values, it becomes harder to “control” the list of values and ensure that all values are necessary and relevant.

Easier to control values because only a limited number of people can update.


Ability to use in views

You need to be careful when you use Lookup columns in views. By default, you can only use a maximum of 8 columns in a view that are of the type workflow status, lookup, or person/group.

No limit to how many columns you can have in a view (other than best practices for the user experience with over-crowded views).



Could have a performance implication with lots of documents and lots of lookups.

No implications for performance.


Communicating choice options

Users can get easy visibility into the choices prior to entering or uploading an item.

Users who do not have full control privileges need to upload or enter an item to see all the possible choices.


Displaying related information

With SharePoint 2010, you can lookup to one column in a list and display more than one value from the list in the target. For example, you can lookup to an abbreviation (CA) and “pull down” the full text (California).

No “out of the box” way to easily have “connected” metadata values.


Including default values

Defaults to first value in the list automatically if the field is required. If you don’t want the first value to be the default, you need to add a value with a character that will sort at the top to be the first item – for example (None Selected). Unfortunately, this means that users will actually have the option of leaving a required column essentially “blank,” (which might be a good or bad thing depending on the situation).

Can have a “blank” value as the default even if the field is required.

Draw – it depends on the experience you are trying to achieve



Choice Column

“Mostly Best” Choice

User experience and data updates when a value changes

Allows you to enforce a relationship behavior between the items in the Lookup List and the items in the target – with some implications as described below:

 With “Enforce relationship behavior” in the column definition unchecked: Deleting an item from the source deletes the metadata value from the documents where it was used but the document itself is not deleted. Changing a value in the source list will automatically update values in lists where the value was used.

 With “Enforce relationship behavior” in the column definition checked and set to “Restrict delete:” Changing a value in the source list will automatically update values in lists where the value was used. With “Restrict delete” selected, you will not be able to delete a list value if it has been assigned to a document.

 With “Enforce relationship behavior” in the column definition checked and set to “Cascade delete:” Changing a value in the source list will automatically update values in lists where the value was used. But, BE REALLY CAREFUL: deleting a lookup item deletes not only the value from the list, but also deletes the document that was connected to the item. The only way to get the document back is to restore the lookup list value from the Recycle Bin.

Changing or deleting an item from the choice values does not impact the artifacts where the old value was being used – until the item is opened. At that moment, the user will have to select a valid value from the list. When the document properties are edited, the value will revert to the first item in the choice list – even if the column has no default value and is not required. The user will have to select the correct value or the automatically “defaulted” value will be assigned.

Probably Lookup, but understand the implications

“Out of the box” Data Entry Experience

“Add and Remove” experience for multi-select values. Users see a small dialogue box that lets them Add and Remove selection choices rather than a long list that requires scrolling to individually check items.

When you have a multi-select column with a lot of choices, the user sees a very long vertical list of options in the out-of-the-box user interface – which can result in a lot of scrolling. Unless the multi-select choice column is towards the end of the metadata options, users may not bother to scroll to see metadata attributes after the choice field.



Development | SharePoint | Architecture

SharePoint 2010 site templates IDs

by ivan bondy 3. January 2012 14:50

This list comes handy when you are provisioning new SharePoint farms and sites.


Site Definition

Site Template ID
Team Site STS#0
Blank Site STS#1
Document Workspace STS#2
Blog BLOG#0
Group Work Site SGS#0
Visio Process Repository VISPRUS#0
Basic Meeting Workspace MPS#0
Blank Meeting Workspace MPS#1
Decision Meeting Workspace MPS#2
Social Meeting Workspace MPS#3
Multipage Meeting Workspace MPS#4
Assets Web Database ACCSRV#1
Charitable Contributions Web Database ACCSRV#3
Contacts Web Database ACCSRV#41
Issues Web Database ACCSRV#6
Projects Web Database ACCSRV#5
Document Center BDR#0
Records Center OFFILE#1
Business Intelligence Center BICenterSite#0
Personalization Site SPSMSITE#0
Enterprise Search Center SRCHCEN#0
Basic Search Center SRCHCENTERLITE#0
Enterprise Wiki ENTERWIKI#0
Publishing Site CMSPUBLISHING#0

Tags: , ,

Development | SharePoint

Entity Framework list of supported annotations

by ivan bondy 11. October 2011 07:23

The full list of annotations supported in EF is:

· KeyAttribute – Placed on property to specify key

· StringLengthAttribute – Placed on the property to specify string length

· MaxLengthAttribute – Placed on the property to specify maximum length

· ConcurrencyCheckAttribute - Specifies that a property participates in optimistic concurrency checks.

· RequiredAttribute – Placed on the property to specify required field

· TimestampAttribute – Placed on the property to identify timestamp field used for concurrency resolution

· ComplexTypeAttribute – Identify property as complex type

· ColumnAttribute - Placed on a property to specify the column name, ordinal & data type

· TableAttribute - Placed on a class to specify the table name and schema

· InversePropertyAttribute - Placed on a navigation property to specify the property that represents the other end of a relationship

· ForeignKeyAttribute - Placed on a navigation property to specify the property that represents the foreign key of the relationship

· DatabaseGeneratedAttribute - Placed on a property to specify how the database generates a value for the property (Identity, Computed or None)

· NotMappedAttribute - Placed on a property or class to exclude it from the database

I hope you will find this list helpful. I certainly do as I use it almost everyday.


Tags: , , ,


Tips for building and managing team

by ivan bondy 20. September 2011 08:50

When I’m team lead, I look for people who love to keep other people productive. That means handling all the productivity killers in an engineering team: hiring and firing, inter-team meetings, customer presentations, reporting up and out and sideways, planning, travel coordination, conferences, expenses… all those things which we don’t want engineers to spend much time on or have rattling around at the back of their minds. It also means caring about people, and being that gregarious and nosy type of person who knows what everyone is doing, and why, and also what’s going on outside the workplace.

An engineering lead is doing well if every single member of their team can answer these questions, all the time:

* what are my key goals, in order of importance, in this cycle?
* what are the key delivery dates, in this cycle?
* how am I doing, generally? and what is the company view of my strengths and not-so-strengths?
* how do I fit into the team, who are my counterparts, and how do I complement them?

Also, the lead is doing well if they know, for each member of their team:

* what personal stresses or other circumstances might be a distraction for them,
* what the interpersonal dynamics are between that member, and other counterparts or team members,
* what that member’s best contributions are, and strongest interests outside of the assigned goals

For the team as a whole, the lead should know

* what the team is good at, and weak at, and what their plan is to bolster what needs bolstering,
* what the cycle looks like, in terms of goals and progress against them
* what the next cycle is shaping up to look like, and how that fits with long term goals


Hope you will find these tidbits helpfull....


Tags: , ,

SharePoint Server 2010 Feature GUIDs Mapping

by ivan bondy 13. September 2011 08:39

SharePoint Server 2010 Feature GUIDs

 GUID Feature Name  Description 
001f4bd7-746d-403b-aa09-a6cc43de7942 PublishingStapling  
00bfea71-1c5e-4a24-b310-ba51c3eb7a57 BasicWebParts  
00bfea71-1e1d-4562-b56a-f05371bb0115 XmlFormLibrary  
00bfea71-2062-426c-90bf-714c59600103 LinksList  
00bfea71-2d77-4a75-9fca-76516689e21a workflowProcessList  
00bfea71-3a1d-41d3-a0ee-651d11570120 GridList  
00bfea71-4ea5-48d4-a4ad-305cf7030140 WorkflowHistoryList  
00bfea71-4ea5-48d4-a4ad-7ea5c011abe5 TeamCollab  
00bfea71-513d-4ca0-96c2-6a47775c0119 GanttTasksList  
00bfea71-52d4-45b3-b544-b1c71b620109 PictureLibrary  
00bfea71-5932-4f9c-ad71-1557e5751100 IssuesList  
00bfea71-6a49-43fa-b535-d15c05500108 DiscussionsList  
00bfea71-7e6d-4186-9ba8-c047ac750105 ContactsList  
00bfea71-9549-43f8-b978-e47e54a10600 ExternalList  
00bfea71-a83e-497e-9ba0-7a5c597d0107 TasksList  
00bfea71-c796-4402-9f2f-0eb9a6e71b18 WebPageLibrary  
00bfea71-d1ce-42de-9c63-a44004ce0104 AnnouncementsList  
00bfea71-d8fe-4fec-8dad-01c19a6e4053 WikiPageHomePage  
00bfea71-dbd7-4f72-b8cb-da7ac0440130 DataConnectionLibrary  
00bfea71-de22-43b2-a848-c05709900100 CustomList  
00bfea71-e717-4e80-aa17-d0c71b360101 DocumentLibrary  
00bfea71-eb8a-40b1-80c7-506be7590102 SurveysList  
00bfea71-ec85-4903-972d-ebe475780106 EventsList  
00bfea71-f381-423d-b9d1-da7a54c50110 DataSourceLibrary  
00bfea71-f600-43f6-a895-40c0de7b0117 NoCodeWorkflowLibrary  
0125140f-7123-4657-b70a-db9aa1f209e5 FeaturePushdown  
02464c6a-9d07-4f30-ba04-e9035cf54392 ReviewWorkflows  
034947cc-c424-47cd-a8d1-6014f0e36925 MySiteQuickLaunch  
03b0a3dc-93dd-4c68-943e-7ec56e65ed4d OSSSearchEndUserHelpFeature  
05891451-f0c4-4d4e-81b1-0dabd840bad4 PPSMonDatasourceCtype  
063c26fa-3ccc-4180-8a84-b6f98e991df3 LocationBasedPolicy  
065c78be-5231-477e-a972-14177cc5b3c7 BizAppsListTemplates  
068bc832-4951-11dc-8314-0800200c9a66 EnhancedTheming  
068f8656-bea6-4d60-a5fa-7f077f8f5c20 OsrvLinks  
071de60d-4b02-4076-b001-b456e93146fe HelpLibrary  
0806d127-06e6-447a-980e-2e90b03101b8 PremiumWeb  
08386d3d-7cc0-486b-a730-3b4cfe1b5509 FCGroupsList  
0931a308-3d50-45b2-9377-6dc8d66d1b5d communityWorkflows  
09fe98f3-3324-4747-97e5-916a28a0c6c0 OSearchHealthReportsPushdown  
0a0b2e8f-e48e-4367-923b-33bb86c1b398 TenantAdminBDC  
0af5989a-3aea-4519-8ab0-85d91abe39ff Workflows  
0b07a7f4-8bb8-4ec0-a31b-115732b9584d PPSSiteMaster  
0be49fe9-9bc9-409d-abf9-702753bd878d SlideLibrary  
0c8a9a47-22a9-4798-82f1-00e62a96006e DocumentRoutingResources  
0ea1c3b6-6ac0-44aa-9f3f-05e8dbe6d70b PremiumWebApplication  
0f121a23-c6bc-400f-87e4-e6bbddf6916d ContentLightup  
0faf7d1b-95b1-4053-b4e2-19fd5c9bbc88 MySiteCleanup  
10bdac29-a21a-47d9-9dff-90c7cae1301e OssNavigation  
14173c38-5e2d-4887-8134-60f9df889bad PageConverters  
142ae5f3-6796-45c5-b31d-2e62e8868b53 EawfSite  
14aafd3a-fcb9-4bb7-9ad7-d8e36b663bbd LocalSiteDirectoryControl  
15845762-4ec4-4606-8993-1c0512a98680 IPFSTenantFormsConfig  
19f5f68e-1b92-4a02-b04d-61810ead0409 ReviewPublishingSPD1033  
19f5f68e-1b92-4a02-b04d-61810ead0411 ReviewPublishingSPD1041  
19f5f68e-1b92-4a02-b04d-61810ead0804 ReviewPublishingSPD2052  
1a8251a0-47ab-453d-95d4-07d7ca4f8166 AccSrvUserTemplate  
1ba1b299-716c-4ee1-9c23-e8bbab3c812a EawfWeb  
1c6a572c-1b58-49ab-b5db-75caf50692e6 IMEDicList  
1cc4b32c-299b-41aa-9770-67715ea05f25 AccSrvApplication  
1dbf6063-d809-45ea-9203-d3ba4a64f86d SearchAndProcess  
1ec2c859-e9cb-4d79-9b2b-ea8df09ede22 DMContentTypeSettings  
20477d83-8bdb-414e-964b-080637f7d99b PublishingTimerJobs  
22a9ef51-737b-4ff2-9346-694633fe4416 Publishing  
239650e3-ee0b-44a0-a22a-48292402b8d8 CallTrackList  
23c2e5c3-47ab-4e95-9340-fa99eca9106d communityModules  
2510d73f-7109-4ccc-8a1c-314894deeb3a ReportListTemplate  
26676156-91a0-49f7-87aa-37b1d5f0c4d0 BICenterDataconnectionsLib  
28101b19-b896-44f4-9264-db028f307a62 AccSrvUSysAppLog  
29d85c25-170c-4df9-a641-12db0b9d4130 TransMgmtLib  
29ea7495-fca1-4dc6-8ac1-500c247a036e AccSrvMSysAso  
2ac1da39-c101-475c-8601-122bc36e3d67 SPSearchFeature  
2acf27a5-f703-4277-9f5d-24d70110b18b WAReports  
2ed1c45e-a73b-4779-ae81-1524e4de467a WebPartAdderGroups  
2fa4db13-4109-4a1d-b47c-c7991d4cc934 UpgradeOnlyFile  
2fbbe552-72ac-11dc-8314-0800200c9a66 V2VPublishingLayouts  
306936fd-9806-4478-80d1-7e397bfa6474 RedirectPageContentTypeBinding  
319d8f70-eb3a-4b44-9c79-2087a87799d6 GlobalWebParts  
32ff5455-8967-469a-b486-f8eaf0d902f9 TenantProfileAdmin  
34339dc9-dec4-4256-b44a-b30ff2991a64 ContentTypeSyndication  
35f680d4-b0de-4818-8373-ee0fca092526 SSSvcAdmin  
38969baa-3590-4635-81a4-2049d982adfa FastCentralAdminHelpCollection  
3992d4ab-fa9e-4791-9158-5ee32178e88a BICenterSampleData  
39dd29fb-b6f5-4697-b526-4d38de4893e5 MpsWebParts  
3a4ce811-6fe0-4e97-a6ae-675470282cf2 DocumentManagement  
3bae86a2-776d-499d-9db8-fa4cdc7884f8 DocumentSet  
3bc0c1e1-b7d5-4e82-afd7-9f7e59b60409 ReviewWorkflowsSPD1033  
3bc0c1e1-b7d5-4e82-afd7-9f7e59b60411 ReviewWorkflowsSPD1041  
3bc0c1e1-b7d5-4e82-afd7-9f7e59b60804 ReviewWorkflowsSPD2052  
3c577815-7658-4d4f-a347-cfbb370700a7 IPFSTenantWebProxyConfig  
3cb475e7-4e87-45eb-a1f3-db96ad7cf313 ExcelServerSite  
3ce24023-95a1-4778-85b0-8e9b2bcacc80 WACentralAdminCustomReports  
3d25bd73-7cd4-4425-b8fb-8899977f73de GBWWebParts  
3d4ea296-0b35-4a08-b2bf-f0a8cabd1d7f TenantProfileAdminStapling  
3f59333f-4ce1-406d-8a97-9ecb0ff0337f BDR  
415780bf-f710-4e2c-b7b0-b463c7992ef0 TaxonomyFeatureStapler  
4248e21f-a816-4c88-8cab-79d82201da7b BizAppsSiteTemplates  
43f41342-1a37-4372-8ca0-b44d881e4434 BizAppsCTypes  
4750c984-7721-4feb-be61-c660c6190d43 OSearchEnhancedFeature  
481333e1-a246-4d89-afab-d18c6fe344ce PPSWorkspaceList  
48ac883d-e32e-4fd6-8499-3408add91b53 TaxonomyTimerJobs  
49571cd1-b6a1-43a3-bf75-955acc79c8d8 MySiteHost  
4bcccd62-dcaf-46dc-a7d4-e38277ef33f4 AssetLibrary  
4c42ab64-55af-4c7c-986a-ac216a6e0c0e ExcelServerWebPart  
4f56f9fa-51a0-420c-b707-63ecbb494db1 BaseWebApplication  
541f5f57-c847-4e16-b59a-b31e90e6f9ea NavigationProperties  
55312854-855b-4088-b09d-c5efe0fbf9d2 AdminReportCorePushdown  
57ff23fc-ec05-4dd8-b7ed-d93faa7c795d SiteHelp  
58160a6b-4396-4d6e-867c-65381fb5fbc9 FacilityList  
5a020a4f-c449-4a65-b07d-f2cc2d8778dd MobileEwaFarm  
5a979115-6b71-45a5-9881-cdc872051a69 BizAppsFields  
5bccb9a4-b903-4fd1-8620-b795fa33c9ba RecordResources  
5d220570-df17-405e-b42d-994237d60ebf PPSDatasourceLib  
5eac763d-fbf5-4d6f-a76b-eded7dd7b0a5 SearchExtensions  
5ede0a86-c772-4f1d-a120-72e734b3400c MySiteHostPictureLibrary  
5f2e3537-91b5-4341-86ff-90c6a2f99aae ReportServerCentralAdmin  
5f3b0127-2f1d-4cfd-8dd2-85ad1fb00bfc PortalLayouts  
5fe8e789-d1b7-44b3-b634-419c531cfdca VisioServer  
612d671e-f53d-4701-96da-c3a4ee00fdc5 SpellChecking  
6361e2a8-3bc4-4ca4-abbb-3dfbb727acd7 TenantAdminSecureStoreStapling  
636287a7-7f62-4a6e-9fcc-081f4672cbf8 ScheduleList  
65d96c6b-649a-4169-bf1d-b96505c60375 SlideLibraryActivation  
683df0c0-20b7-4852-87a3-378945158fab ObaProfilePages  
6928b0e5-5707-46a1-ae16-d6e52522d52b MySiteLayouts  
695b6570-a48b-4a8e-8ea5-26ea7fc1d162 CTypes  
69cc9662-d373-47fc-9449-f18d11ff732c MySite  
6adff05c-d581-4c05-a6b9-920f15ec6fd9 MySiteNavigation  
6bcbccc3-ff47-47d3-9468-572bf2ab9657 ReportServerStapling  
6c09612b-46af-4b2f-8dfc-59185c962a29 SignaturesWorkflow  
6d127338-5e7d-4391-8f62-a11e43b1d404 RecordsManagement  
6e53dd27-98f2-4ae5-85a0-e9a8ef4aa6df LegacyDocumentLibrary  
6e8a2add-ed09-4592-978e-8fa71e6f117c GBWProvision  
6e8f2b8d-d765-4e69-84ea-5702574c11d6 FastEndUserHelpCollection  
7094bd89-2cfe-490a-8c7e-fbace37b4a34 Reporting  
713a65a1-2bc7-4e62-9446-1d0b56a8bf7f SPSDisco  
7201d6a4-a5d3-49a1-8c19-19c4bac6e668 MetaDataNav  
73abde0f-17dd-4d4e-9feb-084706bf9919 communityListInstances  
73ef14b1-13a9-416b-a9b5-ececa2b0604c TaxonomyFieldAdded  
744b5fd3-3b09-4da6-9bd1-de18315b045d AccSrvSolutionGallery  
750b8e49-5213-4816-9fa2-082900c0201a IPFSAdminWeb  
756d8a58-4e24-4288-b981-65dc93f9c4e5 SocialRibbonControl  
76d688ad-c16e-4cec-9b71-7b7f0d79b9cd EnterpriseWiki  
786eaa5b-85d7-4ea0-8998-0b62c8befd94 WACentralAdminReports  
7ac8cc56-d28e-41f5-ad04-d95109eb987a OSSSearchSearchCenterUrlSiteFeature  
7acfcb9d-8e8f-4979-af7e-8aed7e95245e OSSSearchSearchCenterUrlFeature  
7ad5272a-2694-4349-953e-ea5ef290e97c DocumentRouting  
7c637b23-06c4-472d-9a9a-7c175762c5c4 ViewFormPagesLockDown  
7c939ea0-196e-4759-ad06-8bc2a64ed4e5 ExcelServerDeactivateProgrammability  
7d12c4c3-2321-42e8-8fb6-5295a849ed08 TaxonomyTenantAdmin  
7e0aabee-b92b-4368-8742-21ab16453d00 VisioProcessRepositoryFeatureStapling  
7e0aabee-b92b-4368-8742-21ab16453d01 VisioProcessRepository  
7e0aabee-b92b-4368-8742-21ab16453d02 VisioProcessRepositoryUs  
81ebc0d6-8fb2-4e3f-b2f8-062640037398 EnhancedHtmlEditing  
82e2ea42-39e2-4b27-8631-ed54c1cfc491 TransMgmtFunc  
8472208f-5a01-4683-8119-3cea50bea072 PPSSiteStapling  
8581a8a7-cf16-4770-ac54-260265ddb0b2 PremiumSite  
863da2ac-3873-4930-8498-752886210911 MySiteBlog  
875d1044-c0cf-4244-8865-d2a0039c2a49 MossChart  
89e0306d-453b-4ec5-8d68-42067cdbf98e Navigation  
8a4b8de2-6fd8-41e9-923c-c7c3c00f8295 OpenInClient  
8a663fe0-9d9c-45c7-8297-66365ad50427 MasterSiteDirectoryControl  
8c6a6980-c3d9-440e-944c-77f93bc65a7e WikiWelcome  
8e947bf0-fe40-4dff-be3d-a8b88112ade6 WAWhatsPopularWebPart  
8f15b342-80b1-4508-8641-0751e2b55ca6 LocalSiteDirectoryMetaData  
8fb893d6-93ee-4763-a046-54f9e640368d TaxonomyTenantAdminStapler  
90c6c1e5-3719-4c52-9f36-34a97df596f7 ObaProfilePagesTenantStapling  
915c240e-a6cc-49b8-8b2c-0bff8b553ed3 Ratings  
937f97e9-d7b4-473d-af17-b03951b2c66b SkuUpgradeLinks  
94c94ca6-b32f-4da9-a9e3-1f3d343d7ecb PublishingWeb  
97a2485f-ef4b-401f-9167-fa4fe177c6f6 BaseSiteStapling  
98311581-29c5-40e8-9347-bd5732f0cb3e TenantAdminLinks  
99f380b4-e1aa-4db0-92a4-32b15e35b317 TenantAdminDeploymentLinks  
99fe402e-89a0-45aa-9163-85342e865dc8 BaseWeb  
9a447926-5937-44cb-857a-d3829301c73b ContentTypeHub  
9ad4c2d4-443b-4a94-8534-49a23f20ba3c HolidaysList  
9b0293a7-8942-46b0-8b78-49d29a9edd53 OrganizationsClaimHierarchyProvider  
9bf095db-11a4-4568-b92e-e23db80a8777 WAWebApp  
9c03e124-eef7-4dc6-b5eb-86ccd207cb87 GroupWork  
9c2ef9dc-f733-432e-be1c-2e79957ea27b WhereaboutsList  
9d46d0d4-af7b-4f2e-8f84-9466ab25766c WAFeatureStapler  
9e56487c-795a-4077-9425-54a1ecb84282 Hold  
9fec40ea-a949-407d-be09-6cba26470a0c VisioWebAccess  
a0e5a010-1329-49d4-9e09-f280cdbed37d IPFSWebFeatures  
a10b6aa4-135d-4598-88d1-8d4ff5691d13 ipfsAdminLinks  
a140a1ac-e757-465d-94d4-2ca25ab2c662 DownloadFromOfficeDotCom  
a1cb5b7f-e5e9-421b-915f-bf519b0760ef PPSSiteCollectionMaster  
a311bf68-c990-4da3-89b3-88989a3d7721 SitesList  
a392da98-270b-4e85-9769-04c0fde267aa PublishingPrerequisites  
a42f749f-8633-48b7-9b22-403b40190409 SignaturesWorkflowSPD1033  
a42f749f-8633-48b7-9b22-403b40190411 SignaturesWorkflowSPD1041  
a42f749f-8633-48b7-9b22-403b40190804 SignaturesWorkflowSPD2052  
a44d2aa3-affc-4d58-8db4-f4a3af053188 ReviewPublishingSPD  
a4d4ee2c-a6cb-4191-ab0a-21bb5bde92fb AccSrvRestrictedList  
a568770a-50ba-4052-ab48-37d8029b3f47 CirculationList  
a573867a-37ca-49dc-86b0-7d033a7ed2c8 PremiumSiteStapling  
a942a218-fa43-4d11-9d85-c01e3e3a37cb EnterpriseWikiLayouts  
aebc918d-b20f-4a11-a1db-9ed84d79c87e PublishingResources  
aeef8777-70c0-429f-8a13-f12db47a6d47 BulkWorkflow  
af6d9aec-7c38-4dda-997f-cc1ddbb87c92 WACustomReports  
af847aa9-beb6-41d4-8306-78e41af9ce25 ProfileSynch  
b21b090c-c796-4b0f-ac0f-7ef1659c20ae BaseSite  
b50e3104-6812-424f-a011-cc90e6327318 DocId  
b5934f65-a844-4e67-82e5-92f66aafe912 ReviewWorkflowsSPD  
b5d169c9-12db-4084-b68d-eef9273bd898 TenantAdminBDCStapling  
b738400a-f08a-443d-96fa-a852d0356bba TenantAdminSecureStore  
b8f36433-367d-49f3-ae11-f7d76b51d251 AdminReportCore  
bc29e863-ae07-4674-bd83-2c6d0aa5623f OSearchBasicFeature  
bcf89eb7-bca1-4468-bdb4-ca27f61a2292 AccSrvShell  
c04234f4-13b8-4462-9108-b4f5159beae6 WAMaster  
c0c2628d-0f59-4873-9cba-100dad2313cb WAEnterpriseFeatureStapler  
c43a587e-195b-4d29-aba8-ebb22b48eb1a SRPProfileAdmin  
c4773de6-ba70-4583-b751-2a7b1dc67e3a SignaturesWorkflowSPD  
c59dbaa9-fa01-495d-aaa3-3c02cc2ee8ff ManageUserProfileServiceApplication  
c5d947d6-b0a2-4e07-9929-8e54f5a9fff9 ReportCenterSampleData  
c6561405-ea03-40a9-a57f-f25472942a22 TranslationWorkflow  
c65861fa-b025-4634-ab26-22a23e49808f SearchAdminWebParts  
c6ac73de-1936-47a4-bdff-19a6fc3ba490 ExcelServerWebPartStapler  
c769801e-2387-47ef-a810-2d292d4cb05d ReportServerItemSync  
c845ed8d-9ce5-448c-bd3e-ea71350ce45b LegacyWorkflows  
c85e5759-f323-4efb-b548-443d2216efb5 ExpirationWorkflow  
c88c4ff1-dbf5-4649-ad9f-c6c426ebcbf5 IPFSSiteFeatures  
c922c106-7d0a-4377-a668-7f13d52cb80f OSearchCentralAdminLinks  
c9c9515d-e4e2-4001-9050-74f980f93160 OffWFCommon  
ca2543e6-29a1-40c1-bba9-bd8510a4c17b DeploymentLinks  
ca7bd552-10b1-4563-85b9-5ed1d39c962a Fields  
cdfa39c6-6413-4508-bccf-bf30368472b3 DataConnectionLibraryStapling  
d0f56b90-9fbb-453d-94ef-e4817ffbd5a1 communitySiteCollectionMasterpages  
d250636f-0a26-4019-8425-a5232d592c01 ObaSimpleSolution  
d250636f-0a26-4019-8425-a5232d592c09 AddDashboard  
d2d98dc8-c7e9-46ec-80a5-b38f039c16be FastFarmFeatureActivation  
d3f51be2-38a8-4e44-ba84-940d35be1566 PublishingLayouts  
d44a1358-e800-47e8-8180-adf2d0f77543 EMailRouting  
d5191a77-fa2d-4801-9baf-9f4205c9e9d2 TimeCardList  
d5ff2d2c-8571-4c3c-87bc-779111979811 AccSrvSolutionGalleryStapler  
d7670c9c-1c29-4f44-8691-584001968a74 WhatsNewList  
d992aeca-3802-483a-ab40-6c9376300b61 BulkWorkflowTimerJob  
da2e115b-07e4-49d9-bb2c-35e93bb9fca9 InPlaceRecords  
dd903064-c9d8-4718-b4e7-8ab9bd039fff ContentTypePublish  
e09cefae-2ada-4a1d-aee6-8a8398215905 SearchServerWizardFeature  
e0a45587-1069-46bd-bf05-8c8db8620b08 RecordsCenter  
e15ed6d2-4af1-4361-89d3-2acf8cd485de ExcelServerWebApplication  
e4e6a041-bc5b-45cb-beab-885a27079f74 ExcelServer  
e792e296-5d7f-47c7-9dfa-52eae2104c3b OSearchHealthReports  
e8389ec7-70fd-4179-a1c4-6fcb4342d7a0 ReportServer  
e8734bb6-be8e-48a1-b036-5a40ff0b8a81 RelatedLinksScopeSettingsLink  
e978b1a6-8de7-49d0-8600-09a250354e14 LocalSiteDirectorySettingsLink  
e995e28b-9ba8-4668-9933-cf5c146d7a9f MobileExcelWebAccess  
eaf6a128-0482-4f71-9a2f-b1c650680e77 SearchWebParts  
ed5e77f7-c7b1-4961-a659-0de93080fa36 PersonalizationSite  
edf48246-e4ee-4638-9eed-ef3d0aee7597 OSearchPortalAdminLinks  
ee21b29b-b0d0-42c6-baff-c97fd91786e6 StapledWorkflows  
ee9dbf20-1758-401e-a169-7db0a6bbccb2 PPSWebParts  
f0deabbb-b0f6-46ba-8e16-ff3b44461aeb UserMigrator  
f324259d-393d-4305-aa48-36e8d9a7a0d6 SharedServices  
f41cc668-37e5-4743-b4a8-74d1db3fd8a4 MobilityRedirect  
f45834c7-54f6-48db-b7e4-a35fa470fc9b PPSWorkspaceCtype  
f63b7696-9afc-4e51-9dfd-3111015e9a60 V2VPublishedLinks  
f661430e-c155-438e-a7c6-c68648f1b119 MySitePersonalSite  
f6924d36-2fa8-4f0b-b16d-06b7250180fa PublishingSite  
f979e4dc-1852-4f26-ab92-d1b2a190afc9 BICenterDashboardsLib  
f9cb1a2a-d285-465a-a160-7e3e95af1fdd ObaStaple  
fc33ba3b-7919-4d7e-b791-c6aeccf8f851 ListTargeting  
fde5d850-671e-4143-950a-87b473922dc7 IssueTrackingWorkflow  
fead7313-4b9e-4632-80a2-98a2a2d83297 SiteSettings  
fead7313-4b9e-4632-80a2-ff00a2d83297 ContentTypeSettings  
fead7313-ae6d-45dd-8260-13b563cb4c71 AdminLinks  
ff48f7e6-2fa1-428d-9a15-ab154762043d TemplateDiscovery  


18 principles every developer should use

by ivan bondy 26. August 2011 11:05

Principles of Good Programming

The principles of good programming are closely related to principles of good design and engineering. The following programming principles have helped me over the years become a better programmer, and I believe can help any developer become more efficient and to produce code which is easier to maintain and that has fewer defects.

    1. DRY - Don’t repeat yourself - This is probably the single most fundamental tenet in programming is to avoid repetition. Many programming constructs exist solely for that purpose (e.g. loops, functions, classes, and more). As soon as you start repeating yourself (e.g. a long expression, a series of statements, same concept) create a new abstraction.
    2. Abstraction Principle - Related to DRY is the abstraction principle “Each significant piece of functionality in a program should be implemented in just one place in the source code.”
    3. KISS (Keep it simple, stupid!) - Simplicity (and avoiding complexity) should always be a key goal. Simple code takes less time to write, has fewer bugs, and is easier to modify.
    4. Avoid Creating a YAGNI (You aren’t going to need it) - You should try not to add functionality until you need it.
    5. Do the simplest thing that could possibly work - A good question to ask one’s self when programming is “What is the simplest thing that could possibly work?” This helps keep us on the path towards simplicity in the design.
    6. Don’t make me think - This is actually the title of a book by Steve Krug on web usability that is also relevant in programming. The point is that code should be easily read and understood with a minimum of effort required. If code requires too much thinking from an observer to understand, then it can probably stand to be simplified
    7. Open/Closed Principle - Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification. In other words, don't write classes that people can modify, write classes that people can extend.
    8. Write Code for the Maintainer - Almost any code that is worth writing is worth maintaining in the future, either by you or by someone else. The future you who has to maintain code often remembers as much of the code, as a complete stranger, so you might as well always write for someone else. A memorable way to remember this is “Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.”
    9. Principle of least astonishment - The principle of least astonishment is usually referenced in regards to the user interface, but the same principle applies to written code. Code should surprise the reader as little as possible. The means following standard conventions, code should do what the comments and name suggest, and potentially surprising side effects should be avoided as much as possible.
    10. Single Responsibility Principle - A component of code (e.g. class or function) should perform a single well defined task.
    11. Minimize Coupling - Any section of code (code block, function, class, etc) should minimize the dependencies on other areas of code. This is achieved by using shared variables as little as possible. “Low coupling is often a sign of a well-structured computer system and a good design, and when combined with high cohesion, supports the general goals of high readability and maintainability”
    12. Maximize Cohesion - Code that has similar functionality should be found within the same component.
    13. Hide Implementation Details - Hiding implementation details allows change to the implementation of a code component while minimally affecting any other modules that use that component.
    14. Law of Demeter - Code components should only communicate with their direct relations (e.g. classes that they inherit from, objects that they contain, objects passed by argument, etc.)
    15. Avoid Premature Optimization - Don’t even think about optimization unless your code is working, but slower than you want. Only then should you start thinking about optimizing, and then only with the aid of empirical data. "We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" - Donald Knuth.
    16. Code Reuse is Good - Not very pithy, but as good a principle as any other. Reusing code improves code reliability and decrease development time.
    17. Separation of Concerns - Different areas of functionality should be managed by distinct and minimally overlapping modules of code.
    18. Embrace Change - This is the subtitle of a book by Kent Beck, and is also considered a tenet of extreme programming and the agile methodology in general. Many other principles are based on the concept that you should expect and welcome change. In fact very old software engineering principles like minimizing coupling are related directly to the requirement of making code easier to change. Whether or not you are an extreme programming practitioner, this approach to writing code just makes sense.


Architecture | Consulting | Development | SharePoint

How to Build Relationships with C-level Customers

by ivan bondy 2. August 2011 10:30

Executive-to-executive relationships are some of the most powerful ways to cement ties with key customers and develop them as references. C-level executives with a background in high-level consultative sales are likely to understand how to foster these relationships, but for those not accustomed to such customer interactions, here are some tips.

First, understand the customer's predominant "behavioral type."

Different people respond to relationships in different ways. If you've been paired up with a customer executive, the best way to get off on the right foot is to understand his behavioral type. It doesn't require a PhD or handing him some sort of assessment tool. Skilled sales people can size people up quickly and do so all the time. Is she a Driver? Analytical? Expressive? Amiable? Here's a useful checklist. Different types respond to different approaches and have different emotional triggers. An Expressive executive, for example, loves the spotlight and will likely be excited about getting up on stage or in the media with his success story. A Driver may be ambitious to raise his professional stature, which can guide you in developing reference opportunities that will excite him. However, he'll also want any issues he has with your delivery resolved fast.

Understand--and care about--the customer's problems

Whatever the customer's behavioral type, building strong business relationships means nurturing the emotional component, which hard-driving executives at your firm may sometimes overlook. Nothing will stifle a budding relationship more than a customer's realization that you don't really care.

Provide value

As the relationship builds, provide value from time to time. Send a link to an article or blog post you come across that intelligently addresses an issue he's dealing with. Or a recommend thoughtful book. Put him in touch with relevant people in your network. But again, be careful in your approach. Few things are more annoying than an overly eager new friend who starts sending you things that are intended to be "helpful" but that only reveal he really wasn't listening to the issues you confided to him.
Don't get bogged down in discussions about the customer's problems . .

This may seem paradoxical in light of what I just said, but demonstrating you care doesn't mean spending an hour going into the details of a problem your firm can't help him solve. That's a waste of your time and his. Demonstrating empathy doesn't require mastering details.
. . . unless the problem meets these tests:
* It's serious.
* The customer--or one of her colleagues at her firm--is personally feeling real emotional pain as a result (frustration, worry, fear, etc).
* Solving the problem would create a substantial monetary impact on the customer's business.
* And of course, it's something your firm could solve.

Build a rapid response network between your firms

As you develop critical information about your customer--their needs, frustrations, what delights them, etc--you'll want to respond rapidly and effectively. Is something frustrating them about your delivery? Fix it. Has a new need arisen that makes sense for your firm to address? Get your NPD team on it. Are they delighted with that new consulting offering you provide? Ask for a reference and then deploy your video testimonial or white paper team. A rapid response network should include executive peers from both firms, along with lower lever implementation people from both firms, together with regular communication and follow-up processes.

Ask for referrals

As you build the relationship, and particularly as your firm chalks up impressive results for the customer, ask for referrals--the most powerful lead generator of them all. "Who else at AAA Corp should I be talking to?" "Who else within your professional network (inside our outside the firm) should I get to know?"




by ivan bondy 27. July 2011 03:04

Today, I would like to take this opportunity reiterate that SOLID principle provide great benefits to the SharePoint development.

Lets review what SOLID stands for. The acronym SOLID is derived from the following phrases/principles in English:

Single Responsibility Principle: Each class should have a unique responsibility or main feature. In other words, one class should have only one reason that justifies performing changes on its source code. One consequence of this principle is that, in general, classes should have few dependencies on other classes/types.

Open Closed Principle: A class must be open for extension but closed for modification. That is, the behavior of a class should be able to be extended without requiring modifications on its code.

Liskov Substitution Principle: Sub-types must be able to be replaced by their base types (base class or interface). This stems from the fact that the behavior of a program that works with abstractions (base classes or interfaces) should not change because a specific implementation is replaced with another one. Programs should refer to abstractions, and not to implementations. We will see later that this principle is closely related to the Dependency Injection and substitution of some classes for others providing they meet the same interface.

Interface Segregation Principle: The class interface implementers should not be obliged to implement methods that are not used. This means the class interfaces should be specific depending on who consumes them and should therefore be split into different interfaces, and no large interfaces should be created. Classes should expose separate interfaces for different clients/consumers with differing interface requirements.

Dependency Inversion Principle: Abstractions should not depend on details; the details should depend on

abstractions. Direct dependencies between classes should be replaced by abstractions (interfaces) to allow top-down designs without the need to design the lower levels first.

Other key design principles

  • The component design must be highly cohesive: do not overload the components by adding mixed or non-related functionality. For example, avoid mixing data access logic with business logic belonging to the Domain model. When functionality is cohesive, we can then create assemblies with more than one component and place them in the appropriate layers of the application. This principle is therefore closely related to the "N-layer" pattern and to the „Single Responsibility Principle‟.
  • Keep the cross-cutting code abstracted from the application-specific logic: the cross-cutting code refers to horizontal aspect code, such as security, operations management, logging, instrumentation, etc. The combination of this type of code with specific implementation of the application can lead to designs that, in the future, are difficult to extend and maintain. The AOP (Aspect Oriented Programming) principle is related to this.
  • Separation of Concerns: dividing the application in different parts and minimizing the overlapping functionalities between such parts. The key factor is to minimize the interaction points to achieve high cohesion and low coupling. However, separating functionality in the wrong boundaries can lead
    to a high degree of coupling and complexity among the characteristics of the system.
  • Don‟t Repeat Yourself (DRY): the "intention" must be specified in only one part of the system. For example, in terms of an application design, a specific functionality should be implemented in only one component; the same functionality should not be implemented in other components.
  • Minimize the top-down design (Upfront Design): design only what is necessary, do not perform "over engineering" and take into account the agile YAGNI principle („You Ain‟t Gonna Need It‟).

Next time you design SharePoint project, ask yourself a question: 

Is my application design and architecture SOLID?


Architecture | Development | SharePoint

My Quest to Microsoft Certified Master – SharePoint Server 2010

by ivan bondy 27. June 2011 03:01

Recently, I successfully finished all four SharePoint 2010 exams:


  • Exam 70-573: TS: Microsoft SharePoint 2010, Application Development

  • Exam 70-576: PRO: Designing and Developing Microsoft SharePoint 2010 Applications

  • Exam 70-667: TS: Microsoft SharePoint 2010, Configuring

  • Exam 70-668: PRO: SharePoint 2010, Administrator


As a result I completed last prerequisite required to apply for entry into Microsoft Certified Master – SharePoint Server 2010.


Next, I filled the MCM program application online, provided my MCP Transcript access code and paid $125.00 application fee. Shortly after, I received confirmation message stating:

“Thank you for submitting your application. You will receive an email within 24 hours notifying you if you have passed the pre-requisite exam stage. If you have passed, you will be given access to another site to upload your documents for industry review. Your payment receipt for the application fee is attached to this email.”


Same evening l received email from Brett A. Geoffroy, Program Manager for SharePoint MCM/MCA providing me with additional information on the MCM program. He also invited me to contact him with any questions about the program.

In few days Brett called me and we spent some time going over the MCM program, about my resume and qualifications. Brett also answered many questions I had about the program and its structure. We finished our phone call with setting up date and time of my technical screening phone conference with existing SharePoint MCM’s.


About 2 weeks later time I dialed into conference call with Brett and 2 SharePoint MCM’s. For next hour I was grilled on the architecture, security and other SharePoint areas. This technical screen is designed to measure depth and width of the candidate SharePoint knowledge and the screeners definitely had deep knowledge of SharePoint technologies as you could expect from the MCM. I really enjoyed this screen, as it gave me clear idea on expected level of knowledge for the candidate. I was able to identify areas on which I will need to concentrate in my SharePoint studies.


After few days I received email from Brett and we scheduled technical screen debriefing. During debriefing I and Brett discussed the technical screen and the areas I need to concentrate on. Brett, again went over the details of the MCM-SharePoint program, cast, scheduling and planned changes. Then he finally told me that I met all of the MCM program pre-requisites and I am eligible to enroll into the MCM-SharePoint rotation and which rotation I would like to attend.


I am very excited to be part of the MCM-SharePoint Server 2010 program, but I also know that I will need to spend considerable amount of hard studying and experimentation with the SharePoint 2010 to be ready for fall or winter rotation.


Till next time….






About the author

Ivan strive to solve complex business problems with simple technical solutions. He holds BS in Information Technology and MBA in Information Technology Management.

Microsoft Certifications

LinkedIn profile

Month List