ErgoGroup Court Date Set – And Why The Negotiations Will Be Short

As you may have read in my previous post describing my ErgoGroup experience, I’m taking ErgoGroup to court for failing to pay me what they owe. That’s my story, at least, and I’m sticking with it.

In short, ErgoGroup promised me a bonus because their internal policies did not allow them to give me a fixed salary that would suffice to take me away from other work. Only after I resigned because they failed to pay me what I expected did they present a contract that stated that I would forfeit any bonus if I resigned.

The court date has been set for November 9, 2010. This time, the court is a settlement court, in which we should try to reach a settlement through negotiations, and if not, the court will decide. I’m expecting a long period of appeals and lawyer bills, but I’m dug in on this one, so I’m sticking with it, regardless of outcome.

Negotiations will be short, however, and I’ll get back to that in a few moments, but first I’d like to clarify why I’m writing this blog post.

You see, the way ErgoGroup treated me is only part of the questionable ethics of that company. To warm up for the first court appearance, I intend to post a couple of blog posts to expose what I believe are destructive and immoral behavior, both towards customers and employees.

This time, however, I plan to clarify why I believe the negotiations in court will be short. You see, I’ve already offered ErgoGroup a chance to walk away, unscarred and without paying me a dime. I’ve even offered to help them promote that the case is done and settled.

What? You’re Crazy!

Yeah, you heard right. I’ve given ErgoGroup a chance to stop this case without paying me anything, and because I expect that suggestion to become public knowledge soon enough, I want to clarify what happened, what my offer included, and why I offered it.

A few weeks ago, I met one of my former bosses at ErgoGroup during a SharePint. We quickly agreed to leave the case alone and have fun, so we did. A few days later, I got an email from the former boss, asking whether he and I could sit down and go through the case again and try to reach a settlement.

It took me a few weeks to respond because I didn’t know what to respond. What I proposed may seem surprising, though.

My response (I’m not copying it verbatim here because it’s in Norwegian), after explaining why I was pissed at them, was that I don’t really care about getting that money for myself. I want them to realize that they made a grave mistake and also to make sure this doesn’t happen to anyone else.

As such, my proposal was that they wrote a statement, signed by their HR director, saying just that: We screwed up, we’re sorry, but we’ll try to improve. In addition, they’ll pay my lawyer fees.

In return, I’ll waiver all other claims, and even publish their letter of apology on my blog to let the world know they work to improve and that we’ve cleared the matter.

In short, they don’t pay squat, except the legal costs they’ve caused me, and get to say “We’re sorry” publicly.

They declined, citing that the matter has now gone too far to settle without involving even more lawyer time, and instead asked that we had our lawyers meet to discuss other options. Because I’ve already offered them to get away for free, I’m not sure what they expect me to give them more, unless they want me to pay them for not paying me.

But… But… Why?

Why did they decline or why did I offer them to get away free?

I can’t answer for ErgoGroup, but it is crystal clear to me now that they’re not interested settling this at all. And frankly, I can’t understand why. I mean, there’s a huge risk that they’ll lose in court, meaning that their practices were illegal and they risk immense litigation. I’ve spoken to a number of former ErgoGroup employees lately, and many cite the same treatment; many of those may be a potential lawsuit if ErgoGroup loses to me.

Why I offered them the deal may be an equal mystery, but at least I’m here to explain why.

You see, I am honestly sick and tired of this case. I can’t say it’s worth the money, so money is no motivation anymore. Also, although I have an insanely skilled lawyer and learn a lot from this process, I can’t say I enjoy shelling out big bucks to keep lawyers occupied.

I’ve said this before, and I’ll say it again: I believe ErgoGroup screwed me over, and I’m not going to take that sitting down. To me, the principle is important. If ErgoGroup is to blame, and I am legally right, ErgoGroup needs to take the consequences. Admitting that would have been enough, really, at least until I realized that they weren’t interested in settling at all. I’ve also learned a number of other things in this case that has caused me to reconsider. I may blog about that later.

Oh, and in case there’s any doubt: My offer of ‘get out of jail free’ has expired. Thoroughly. If the offer was made of milk, it would be cheese by now. I want my money, or rather, I want them to pay.

So, we’re finally scheduled to meet in court. Negotiations will be short. I’ve already offered them everything I possibly can, and they didn’t bite.


Found this article valuable? Want to show your appreciation? Here are some options:

a) Click on the banners anywhere on the site to visit my blog's sponsors. They are all hand-picked and are selected based on providing great products and services to the SharePoint community.

b) Donate Bitcoins! I love Bitcoins, and you can donate if you'd like by clicking the button below.

c) Spread the word! Below, you should find links to sharing this article on your favorite social media sites. I'm an attention junkie, so sharing is caring in my book!

Pin It

Why SharePoint 2010 Social Features Suck

Over the last year or so, I’ve spent more time on the new SharePoint 2010 social features than I believe I have spent on any other technology. Ever. In this blog post, I thought I’d sum up my findings and thoughts. I’ll try to do this as non-technical as possible, but please bear with me if I get a bit passionate about details.


The last year, I’ve been working on what was one of the largest SharePoint 2010 implementations in the world. I’ve been part of a team that has worked on the bleeding edge of technology (bullshit bingo: scratch one) trying to see how much oomph we can get from the new platform.

Our task has been to implement a highly customized ‘My Site’ host. If you don’t know, the My Site host is the interface to most of the new fancy social features, like all the personal features, colleagues, tags and notes, user profiles, and activities.

We’ve worked in-depth with virtually all of the new features, including creating custom applications that utilize tagging to create bookmark and ‘favorite’ sites, extending the activity feed to more closely resemble the FaceBook wall (spoiler alert: the SharePoint activity feed is nothing like a FaceBook wall, despite appearances), creating custom event engines for tracking user profile completion, and of course extensive branding, of which you know I had no part.

Microsoft 1.0

When you have been around technology for a while, you start recognizing personalities in companies. You can say a lot about Microsoft, most of them good in my opinion, but one thing that can’t be said enough is what many call the ‘Microsoft 1.0’ phenomena. Honestly, I haven’t seen it described in so many words in recent years, but it was a common description a few years back.

The Microsoft 1.0 phenomena is a description of the first version of something that Microsoft creates. You can easily recognize the aforementioned personality in that software. First of all, the code is always riddled with seemingly weird decisions or quirks. Second, it always contains a number of issues that you know will be changed in future versions. Third, you’ll see the evolution of earlier ideas, and this is particularly visible when you look at major new features in an existing piece of software, like the introduction of social features (major new feature) in SharePoint 2010 (existing piece of software).

However, Microsoft 1.0 code is always visionary. You can see in the code the ideas that Microsoft has and the direction that a product will take. You see that the people developing has had the idea of what to do although they may have missed the target in their initial shot at implementing that idea.

I likely couldn’t do any better myself, by the way. I’ve written enough software to know that when you try to implement an idea you have, you’re going to need a few versions of the software before you find elegant solutions.

SharePoint 2010 1.0 Features

Let me describe a few examples of what I mean.

In SharePoint 2007, particularly in the MOSS features, you had the idea for Manager objects for various tasks. A commonly used object was the UserProfileManager (UPM), responsible for working with user profiles in MOSS.

The UPM had its quirks and wasn’t necessarily intuitive to use, especially when it came to handling user profile fields. This has to do with the legacy of earlier versions, but suffice to say, it did require some of that ‘get used to it’ effort. These days, most seasoned MOSS developers can probably list all the properties, methods _and_ overloads of those methods for the UPM. The masters can also cite the exceptions thrown.

The *Manager idea is far more visible in SharePoint 2010. Most of the new social features have Manager objects and as a developer, this will be your common access points to those features. Here you have an example of where an idea, quirkily implemented in earlier versions, expands into a mature feature in later versions.

Working with social tagging, commenting and rating is intuitive, easy, and fun. Even custom managed metadata solutions gives you plenty of ‘Hm… That was easy’ moments.

Oh, and of course, the *Manager idea isn’t unique to SharePoint, or even Microsoft.  I am trying to stay away from too technical descriptions, though.

The way many of the manager objects for SharePoint 2010 social features are implemented, though, will likely be up for revision in future versions. This will lead to complications for upgrade of code, but if there is one thing Microsoft knows, it is how to handle backwards compatibility (or at least market why the change is a good idea).

The same can be said for claims based authentication. In previous versions, setting up a user profile service in MOSS was about as difficult as spelling your own name. With the new fancy authentication setup, it is worth a blog post whenever you manage to set up user profiles in one go, and I’ve seen entire installations get cancelled because of the complexity of setting up the user profile synchronization. It’s a 1.0 feature, containing plenty of quirks (or bugs), and you know it’s going to change in the future.

Then, there’s the activity feed.

You Promised Suckage!

OK, well, I really did that because I wanted to point out the immaturity in the technical bits of SP2010 social features. To not scare away too many of the non-techies, though, I’ll try to keep this light.

So, let’s look at the activity feed. Great idea, easy to market (it’s FaceBook for the enterprise, how cool is that?), but a completely bonkers implementation.

If you don’t care about the details, skip to the end of the post, because the rest of this is just gritty bits of engine design.

If you are still here, try this: Try to get the activity feed to behave like the FaceBook activity feed and add simple things like a ‘Like’ or ‘Comment’ functionality to the feed. Go ahead, I’ll wait here.

Oh, are you done with that? Try creating an ad-hoc filter of the activity feed, for example to implement a ‘Social Groups’ functionality where a temporary team, say the people in an organization responsible for the next department annual review, can organize their activities into a single activity feed.

It turns out that the way the activity feed is implemented is so locked down and restricted that seemingly simple extensions like these are virtually impossible to create.

One specific example is how the activity feed actually behaves in three distinct modes, each really being a completely different piece of functionality. Add to that the fact that the data you see in one ‘mode’ isn’t even related to what appears to be exactly the same data in another mode, and you’re quickly beginning to see some problematic areas.

Here’s a scenario: John, The Manager, updates his profile with a new status note, saying ‘I’m on vacation in July’. When that status note is displayed in the activity feed that is displayed on John’s profile page, the update has one distinct ID property that uniquely identifies it.

[John’s Profile Page]
John: I’m on vacation in July

Now, let’s say that John is in your social network and you get his updates in your activity feed. You see John’s activity like this:

[Your Activity Feed]
: I’m on vacation in July

However, what you are seeing has nothing to do with the update that is displayed on John’s profile page. The update you see in your activity feed has a different ID and there is no connection between the two ID values. Not just is it a different ID, but it’s a totally different database. Not that I’ve checked, of course, because doing so will void your supportability.

Thus, if you implement an extended functionality where you can go to John’s page and ‘Like’ his update, you won’t be able to propagate
that ‘Like’ to other version of the exact same update, because there is no connection between John’s version and your version of the same update.

It gets worse still. You aren’t just getting the two versions of the same update, there are more. I’ll happily admit not having verified this, but from what I can see, you actually get one version of the update per privacy level that can see the update. For an update visible to everyone, that means you get 6 unique updates, with no correlation to each other. . So, to extend our example above:

[John’s Profile Page]
John: I’m on vacation in July (activity id: 45)

[Your Activity Feed]
: I’m on vacation in July (activity id: 82)

[John’s Manager’s Activity Feed]
: I’m on vacation in July (activity id: 83)

I’ll likely check this further and post an updated blog post or a journal or something. When I have time.

Before you think you can easily detect the similarities between the updates, however, read on.

Here’s a second example, the ad-hoc group filtering thing I mentioned above. When you want to get the activities to display as part of an activity feed, you have three options. Get activities for yourself (1), which are the activities displayed in your network, get activities you have posted (2), which is a privacy filtered view of the updates you have made, or get activities that a particular user has done (3), as seen by another user.

That’s it.

You can’t, for example, say ‘Give me activities for Alice, Bob, and Claire’ unless you create three distinct activity feeds (option three above, times three). You could add these users to your colleagues and get your activity feed (first option above) and then filter these events by Alice, Bob, and Claire, but your activity feed may not contain any recent updates from those users and you’d get no result at all.

This also means that the trick with detecting which of the many updates are the same update doesn’t work, because you have no easy way to get every update from a feed. You get items from the activity feed based on the context you run your code. If you are a colleague, you get updates published up to and including the colleague level, but not for the manager level, for example.

A final item to ponder is the rendering of those activity feed items. They are pre-rendered for you and unless you plan to write your own rendering engine, which I can tell you from personal experience is possible but quite a lot of work, your only options are to get the entire event, pre-rendered, either in text or HTML format.

Now, I actually understand the reason why Microsoft chose to do the activity feed this way, and it has to do with privacy and performance. The two activity feed databases separate between published activities (which are the ones you see on the user’s profile page) and the consolidated activities (which are the ones you see on the ‘Updates from Your Network’ feed)

That’s fine, but it does put a serious dampener on the idea that the activity feed of SharePoint 2010 would resemble anything close to a FaceBook wall. Personally, I think it plain sucks, because the the idea behind the activity feed is actually very beautiful, but it is tainted by being a 1.0 feature and not particularly well implemented.

My prediction is that SharePoint 2013 (codename SharePoint vNext) will change how those activities are generated. At least I hope so, because the vision is definitely there.


Pin It

Why I Stick With Visual Studio 2008 for SharePoint 2010 Development

People seem surprised when I start up my development environment to to SharePoint 2010 development. The surprise comes from seeing the Visual Studio 2008 logo flashes before their eyes.

“What you’re not using the latest and greatest? How come?”

I’ll tell you why, and I’ve already given you a slight hint. “The Visual Studio log flashes before their eyes”, indicating speed. Visual Studio 2008 is lightning fast.

I tried working on every edition of Visual Studio 2010 from the early betas. Compared to the earliest versions, the RTM version seems like a race car where the old versions were various species of snail.

Despite this, Visual Studio 2010 feels like a snail when compared to its old brother. I write a lot, not just code, so perhaps my typing speed is higher than average. I always feel the IntelliSense is sluggish and just a bit too slow to keep up. I try this on massive machines as well, sporting 16 GB of ram, so it’s not a hardware issue. Granted, I run this in a VM, but I’ve never had problems with this in 2008, so I blame 2010.

The thing I’m missing from 2010 is the smart IntelliSense that searches the entire words of methods and properties. I’ve grown so accustomed to the SharePoint object model, however, that the times when I need to search for methods and properties are few. It’s nice for exploration, but not enough to warrant the slower speed.

The next thing people ask is why I’m not using the fancy SP2010 tools. I’ll tell you why: They suck.

Yeah, there you go, I used the word again. I just don’t think the hype is worth the quality of the final product.

When I meet SP2010 developers who have previously worked with SP2007 development, they all say the same thing: the tools are bells and whistles, and takes away your feeling of control. Sure, for kids, it is nice to click around to give the impression of doing stuff. Compared to VSeWSS, I’m sure it’s great.

The two developers I’ve met that used the horrible VSeWSS tool previously are thrilled, and I can understand that. When what you’re coming from is your balls in a thumbscrew (ladies will just have to imagine something extremely painful, and no, giving birth isn’t as painful), then sitting on a bicycle with a missing seat must seem like heaven.

So what do I use? I stick with trusty old WSPBuilder. Heck, the experience is just as good as it always has been and the control is rivaled by no other tool.

Despite what seems to be a rumor, WSPBuilder is far from dead. I heard that Carsten Keutmann had decided to cancel the WSPBuilder project. I wrote him asking if this was true and he said that he was just pausing to see where the SP2010 tools and community headed.

I can tell you right now, Carsten, it’s headed for disaster, but because the lack of competition. With the SP2010 tools, you’re stuck in a maze trying to get control over your project, but ending up with nothing what you expect.

So the SP2010 fanclub says: “The tools are great once you learn how to use them!” to which I can reply that, you know, even if that were true, and I doubt it, I want to learn SharePoint, not how to use a particular tool. When there’s a learning curve for a tool beyond 5 minutes, the tool is faulty.

WSPBuilder FTW! Carsten, get yer behind in gear and get back to giving us the development experience we want.


Pin It