DongleGate: A Legal Perspective and some social commentary

Those of you that know me, know that I’m both a software developer and a lawyer. I’ve not commented on the #DongleGate issue – except to say that this issue has privacy, first amendment and civil litigation ramifications. Those of us witnessing this escapade have seen at least 1 guy lose his job and this just in, the complainant Adria Richards ( has lost her job as a developer evangelist for SendGrid. Here’s the blog post from her former employer:

One thing we can agree on, there is a massive lack of maturity in this business. At one time or another, including yours truly, has been guilty of an off-color joke. Most of the times, at community gatherings like conferences; we are typically amongst friends and feel comfortable that we can be ourselves, letting our guard down. At the end of the day, we must rely on the fact that in this business, we have to have a thick skin and that we are adults. That in no way is meant to justify offensive comments and that somebody like Adria didn’t have a right to be offended. She did have a right to be offended. And to that, it’s not for anybody else to question it. It’s enough for anybody to say they were offended – and others should respect that. That said, does it mean the offended have an open ended license to exact whatever retribution they want on the offenders? No…. In these community gatherings, there is a level of privacy, within the community cocoon; we have a reasonable expectation to.

We see the t-shirt shirt = “Fork you”. We see on open source projects: “Fork me on GitHub”. Doesn’t take a rocket scientist to see the double entendre here. If one is to where that shirt in public, does that give anybody who is offended license to snap a picture, tweet it, and then hope that some misfortune befalls that person? I don’t think such license is granted.

Consider this YouTube video from Ms. Richard’s: There’s a saying in the law that in matters of equity, you have to have “Clean Hands.” Is it permissible for her to be offended as she was when she makes a video that could be taken as offensive by others? At about 3:03 into the video, she talks about an incident that was done to her – that could very well be taken as offensive, and she let it pass. In this case, she decided to not let something pass…something that WAS NOT said directly to her. If I was prosecuting this case, and I was going to depose Ms. Richards, this is a line of questioning I would surly explore to great details. What was her real motivation here?

This gets to my first question:

Was there a reasonable expectation of privacy by these two gentlemen?

I believe there was. They were having a private conversation, which Ms. Richards overheard. Yes, this was a public place. Did she have the right to express her indignation at those comments to these two gentlemen? Absolutely yes. In fact, that would have been the more impactful thing to do. That would be a proportional response. Reporting the incident to the PyCon staff is not appropriate. They are not there to police what people say. Note, these two guys didn’t say the comment to her. She thrust herself into their conversation. By the same token, the two guys allowed her to confront them. She didn’t. Instead, she took their picture and posted a tweet. And from there, SHE took what was a private thing and made it public. She made the situation worse. In that regard, she violated the privacy rights of these two men, notwithstanding their comments. Speaking of those comments, only her, the two guys and maybe one or two others know what the precise words were. The first result, at least one of the guys lost his job.

Next question..
Does the guy who got fired have a cause of action against Ms. Richards?

This is the part you want to pay attention to as you should think very carefully about the consequences of tweeting something that is private and further, identifying specific people where harm could come to them. First, did these two guys have a right to say what they said, no matter how stupid it was? Yes, they had a right. There is such a thing as a First Amendment last I checked. It’s also not illegal to be stupid. Did the guy who got fired, his employer, have a right to fire him? If he works in an employment at-will state, the answer is yes. Is he totally out of luck? No.. He can sue Ms. Richards for Tortious Interference with an Employment Relationship. She knew and intended a certain level of a negative outcome to these two gentlemen. That’s malice. While his employer may be on good ground to fire him, he can nevertheless sue Ms. Richards to recover damages. There may also be a cause of action on defamation grounds. These two guys are being labeled as sexists when all that may have happened was a joke, off color as it may have been, that offended this one person. That too may be the basis of a cause of action.

Next question..
Is there any other entity that could be liable?

As SendGrid has already admitted, Ms. Richard’s was there in her capacity as a representative as a SendGrid Employee. Ms. Richard’s did not do SendGrid any favors when she tweeted that she had SendGrid’s full support – a claim that SendGrid didn’t dispute. In the law, there is the legal doctrine of “Respondeat Superior.” It effectively means that the master is liable for the actions of his agent. Ms. Richards has a large Twitter following and that is due in least in part to her former job as a developer evangelist for SendGrid. There’s a strong argument to be made that SendGrid is liable, at least in part, for Ms. Richard’s actions – regardless of the fact that they terminated her services.

This whole episode illustrates again the importance of how we react emotionally and the legal consequences therein. If I’m the gentlemen who lost his job, I’m exploring my legal options – and there are legal options. Above all, this is a teachable moment. If you are offended at something somebody does, consider the context. 99.99% of the time, these matters are best handled privately. Takes more courage and is more impactful when you communicate your disdain to the offending party directly. If your goal is to change behavior that will more likely have the desired effect. Sure, you may be told to eff-off. That’s a risk…a risk worth taking.

How about conference organizers?

I understand that PyCon has modified their code of condut… Didn’t know that such a thing existed. I would always suggest to any conference organizer to NOT get into the business of policing their attendees. Rather, I’d rely on the venue staff for that. Obviously, if somebody is disruptive, boot their tails out. These guys didn’t appear to be disruptive at all for the record – not that it really matters in this case.

A word about the “Brogrammer” culture..

You probably know about it. If not, look it up on our favorite search engine. The fact is, guys are often not the sharpest knives in the drawer socially and are often in need of an increase in maturity level. Women have a tough enough time in this business. I know several women that do a lot of work in getting more girls interested in software development. Sad as it is, Adria Richards did more to set that effort back than the two guys she was offended by. That’s a perfect example of irony!! It’s really a shame. Ms. Richards looks to be a pretty sharp individual – one who appears to have better common sense than she displayed here. Learn from it folks.

Posted in Uncategorized | Tagged , | 54 Comments

Memo to Microsoft – If you want Windows 8 to succeed, among other things, get apps in the store that people want

Let me first say I like Windows 8. As on OS, it performs well. I like the way the OS is essentially a first class citizen with the development environment. The consistency across apps, as to sharing, searching, etc. – is a good thing. The WinRT device – very slick. Great battery life. For browsing and cranking out business documents, not a bad device. Some of the native apps – especially email – need to be way better.


Where are the apps? Granted, Words with Friends is finally in store. The new ESPN App is nice. But what about Taxi Magic and Pandora? How about a better FaceBook and Twitter app? Instagram? I was just at an event where somebody was showing Vine – a really cool iOS app. I looked for it on the Windows App Store…. :-( How about Instapaper???

I’ve taken the plunge to give the Windows Phone a fair shake. I love the UI. What is needed are apps…apps people want – which will drive the platform. Whether Microsoft wants to admit it, the Apple AppStore is the store by which the Windows Store is measured. There’s A LOT of noise on the Windows Store. Note – quantity is not quality. If there is a top app in iOS, Windows needs to have that app. Microsoft needs to be focused on those vendors to get these apps built.

Another nit is the difference between Windows 8 and Windows Phone. It would be great if those two worlds could come closer together from a development standpoint. On the plus side, the process by which apps are certified for the store is simple. The Windows App Certification Kit is a nice utility and easy to use. If your app fails, there is clear guidance on what to fix.

None of this is to say there are not useful apps on the Windows/Windows Phone Stores – there are. And when it comes to things like Live Tiles, Microsoft nailed that one. A very useful feature – which makes the negative things especially frustrating to deal with.

At the end of the day, like many, I want to see Windows 8 succeed. I think and believe there to be a great amount of potential. But to succeed, the public needs to see the apps that are available in other ecosystems. Until that day comes, Windows 8, and in particular Windows Phone, will continue to be third in a 3 horse race – which shouldn’t be the case.

Posted in Windows 8 | 4 Comments

Windows 8: Be a good sharing citizen

Note: Code samples are WinJS

I’ve been working with Windows 8 and building Windows Store Apps more and more. Building native Windows Apps with HTML/JS/CSS is, in a word, awesome. I’ve mentioned before how the OS is a first class citizen in the development space. Having standard API’s in the dev environment to handle common tasks like searching and sharing is another nice feature in Windows 8 Development. I wanted to take a quick moment to talk about the sharing contract. You can download a full working example of how to implement the sharing contract here.

This example does a great job of dealing with situations where you can and want to share. But what about times when sharing is not appropriate? A good user experience means the user not having to guess as to whether encountered functionality is intended or a bug. By default, when the share contract is not implemented you get a pretty blunt message back: “This app can’t share.”


Looks pretty, but it’s not all that informative.  Fortunately, it’s very simple to provide your users with enough information so they know what they see is what you, as the app developer intended. The following code is a basic and typical share contract data request function:

  function dataRequested(e) {
        var request = e.request;

        // Title is required
        var dataPackageTitle = document.querySelector("article .item-title").textContent
        if ((typeof dataPackageTitle === "string") && (dataPackageTitle !== "")) {
            var dataPackageText = document.querySelector("article .item-content").innerHTML
            if ((typeof dataPackageText === "string") && (dataPackageText !== "")) {
       = dataPackageTitle;
            } else {
                request.failWithDisplayText("A problem occurred with this sharing request");
        } else {
            request.failWithDisplayText("A problem occurred with this sharing request");

This still doesn’t do everything we need. For example, using the Grid Template as an example, this code would only work on the item detail page. If you happen to invoke the Share Contract from the Group Items or Group Details page, you will either get an error or the necessary data won’t be found. In most cases, it’s an individual item you are looking to share.  With that in mind, consider adding code like this to your common share data request function:

if (WinJS.Navigation.history.current.location != "/pages/itemDetail/itemDetail.html") {
   request.failWithDisplayText("Please note, you must navigate to an individual item in order to share.");

Now, when the user wants to share something in a context that does not account for that functionality, the user will know two things:
1. It’s not intended to be used in this context and;
2. The user knows where the sharing context is

This yields much better results:




Posted in Windows 8, WinJS | 2 Comments

How do you estimate with Story Points and determine Velocity when you’ve not done it before?

As Captain Spock said to Lt. Saavik in Star Trek II – The Wrath of Khan – For everything, there is a first time. Taking a whack at estimation with story points the first time may seem as daunting as taking the Enterprise out of space dock the first time. Does it have to be that daunting? Scrum stresses empiricism. John Locke asserted that knowledge comes primarily from sensory experience. Put another way – we learn by doing and that the mistakes we make along the way, are just teachable moments – to be applied to future efforts. If Agile is new to you and the course you’ve chosen is Scrum as a means to apply the Agile principles, then you may very well be encountering your “First time” with story point estimation.

First, a brief primer on Story Points and Planning Poker. I’m making a blatant assumption here that you are at least aware of the existence of these concepts. Much has been written about their detail and I’ll defer to those existing sources. At its most basic level, Story Points are a representation of effort and complexity to deliver a User Story (AKA Business Requirement). A User Story may be something like “As a visitor to the website, I need to be able to login with my facebook account.” The Fibonacci Sequence is often used as the basis of Story Point values: 1,2,3,5,8,13,21,…. Other approaches are shirt sizing: S, M, L, XL, … I like numerical representations because a velocity can be calculated by simply summing up what can be accomplished in a given time period.

In conjunction with Story Points, there’s Planning Poker. In simple terms, team members each have a deck of cards, When a User Story is discussed and when it comes time to estimate, team members offer their card (which contains a number). This is their opinion as to the effort/complexity required to deliver the story under analysis. All of this goes to building and grooming the Product Backlog.
Another core concept is Velocity. How many Story Points can a team deliver in a given time period (Sprint)? This gets to the gist of this post. If your team has never estimated with Story Points and Planning Poker, it follows that a Velocity has never been calculated either. So then, how do you do this the first time?
Note – this is just this developer’s and author’s opinion. I am in no way suggesting that this is THE one right way to handle this situation. I also don’t claim to be 100% original here. There is the concept of Reference Stories which touches upon what I’m discussing here. This is simply an approach I’ve used and have found success with and accordingly, am sharing here.

Step 1: Limit the Story Points to 3, 5, 8, 13 and 21. In my experience, nothing is ever a 1 or a 2. On the other side of the spectrum, 34 and above is almost always more than just 1 story. If you are thinking shirt sizing here, then 3 is small and 21 is extra-large. I also like 5 items because under this rubric, there is a middle number and the middle corresponds to medium.

Step 2: Pick a 2 week period in your recent. Look at and group all the things you got done in that 2 week period. To the best of your ability, stack rank the items in terms of effort and complexity. From this group, isolate those items that have the feeling of being in the middle ground. Those are your 8’s. From there, you can decide whether you have 1 or levels of complexity above or below. In other words, if you just want to stick to 5, 8 and 13, you can do that. On the other hand, if from your analysis, you can discern 2 vs. 1 level of complexity in either direction, then you will want to stick with the 5 different values.

Step 3: Sum up the points. That’s your velocity over a 2 week period. I’m not suggesting your multiply by 2 or divide by two to get our 4 or 1 week velocities. What I am suggesting is a small enough time period where you can get feedback and for the first few sprints, your basis is from what came before. During your sprint reviews and retrospective, you can then determine the veracity of your initial velocity estimates. The key in all of it is to be honest and candid. If those values are not reflected in the exercise, it will be a painful process! Clearly, of the 3 steps, #2 is the most difficult. As my good friend Rich Hundhausen often says “What we do is hard.” I’m not here to suggest it’s easy. Rather, I’m simply suggesting an approach for the first Sprint and consequently, rejecting the notion that you can’t work from an imputed velocity from day 1.


If you cannot isolate things that were started and completed in a 2 week period, try expanding to 3 weeks. If that does not work, then go to 4. If you still can’t isolate things, then you need to get to some time period where you can. If you need to stray beyond 4 weeks, you then need to take a look at those items and run through the process of functionally decomposing them to stories that could fit in a time period that is <= 4 weeks. If you can do that, then you may be able to apply what I discuss above. Again – I never said it would be easy!! :-)

Posted in Agile | Tagged , , , | Leave a comment

JustCode – Makes syncing your settings across machines a breeze!

As many of you know, I’m affiliated with Telerik as one of their insiders. Telerik is also a friend of CodeBetter. I’ve used the JustCode for several years now. I want to make you aware of a really cool and useful new feature in JustCode – the ability to sync settings across multiple machines. The feature is called JustCode Cloud and it’s a breeze to setup.

The following image illustrates the new JustCode Options Dialog:

In order to make this all work, you need to establish a Telerik Account and agree to terms of service. After that, when you change your settings, assuming you have an active internet connection, your settings will be synced to the cloud. you can also sync on demand when you need to pull your settings from the cloud.

If you are looking for a Visual Studio productivity tool that has a light footprint with simple to use features, check out JustCode.

Thinking you have a ton of new keyboard shortcuts to learn? Well…JustCode thought of that. In an instant, you can easily display the keyboard mappings:

Code templates and customizations are extremely easy. If you are looking for a new Visual Studio productivity tool, check out Telerik’s JustCode!!

Posted in Telerik, Uncategorized | Tagged , | Leave a comment