How Google broke the OSS compact with Angular 2.0

When I first wrote the title, I had to pause for a moment to consider if I was actually writing this post or if it was a bad dream. As it turns out, at least from my vantage point, what I’ve seen thus far, which candidly isn’t that much, has been much like a bad dream. For purposes of this post, what matters more is what we know we haven’t seen. Nonetheless, I have seen enough to make a few conclusions I’ll express here.

It’s helpful to start with some defined terms and a framework that I can use as a backdrop to support my argument. In this case, I’m relying on the classic OSS development model described by Eric Raymond in his 1997 essay The Cathedral and the Bazaar. I won’t go into all of the model’s facets save one: That all users should be treated as co-developers. The over-arching theme of OSS is one of transparency and at least get as close as possible, to true democratization.

In reality though,democratization is often preached by the same people that just as often don’t practice it. I won’t delve into motive or intent. Rather, I’ll simply rely on what I’ve seen and observed as an outsider looking at the building that has its curtains drawn – trying to get a glimpse of what is going on inside. Is it my or any of our business? You bet it is as collectively, we are part of a large community that is responsible for Angular’s success. We are impacted by decisions being made in the dark.

Looking at Angular 1.x, it has quickly become one of, if not the most popular MV* web development frameworks today. There is a robust community and at last count, has over 1000 contributors. All one has to do is navigate to https://github.com/angular/angular.js to see how robust and vibrant the community is.By all accounts, the Angular Team appreciates this community through the comments expressed at the 2014 ng-Europe Conference. In this day and age, words don’t mean nearly as much as actions. I’m a member of that ever-growing legion of people that judges by what is done, not what is said.

There is no doubt the external community (those outside Google) is the reason why Angular has been so successful. It’s common sense after all. Without broad uptake and support, an OSS Project may be many things, but a success won’t be one of them, unless of course, the goal was for the software to only be used by a few people.

Today, the world is abuzz with mentions of Angular 2.0. Here and there are mentions and perhaps the briefest of glimpses of what 2.0 will be. We keep hearing that it’s not an upgrade, but a complete rewrite, that it is for modern browsers, support for ECMA 6, etc. We’ve heard they seek to make 2.0 more modular and to correct things that weren’t right in 1.x. It all sounds good. But my question is simply this “Where is it? Perhaps you are part of an enterprise that adopted Angular and are wondering what the future will hold. What will happen with 1.x support? Should you plan for an upgrade? Can you upgrade? What about the supposed lack of support for certain browsers? Can you test and verify that? What are the plans after the first release? Again, where are the bits? This is one of the first blog posts on the matter: http://angularjs.blogspot.com/2014/03/angular-20.html. Note the date – March, 2014. You’ll soon see how common that date is.

As it turns out, there were some resources where we could start to get a picture. The problem is, that momentum never carried though. One such site is the learn Angular site: http://ng-learn.org/2014/03/AngularJS-2-Status-Preview/. Note the date: March, 2014. This is nearly an 8 month old post. Supposedly, the design documents are kept on a Google Drive: https://drive.google.com/a/bzmedia.com/?pli=1#folders/0B7Ovm8bUYiUDR29iSkEyMk5pVUk. There was much hype about the designs being released: http://sdtimes.com/google-releases-angularjs-2-0-designs/. Note the date – March 2014. After that, there has been for the most part, radio silence until the ng-Europe conference. But even at the conference, there still wasn’t much in the way of meaningful details. Looking at the documents today, they are either out of date or completely unreadable. Many have been crossed-out entirely. What does this mean? Has that design been scrapped? Is it a bad edit? If there is meaningful information in either the doc library or the source repos, then it is like finding a needle in a haystack. If the goal was to achieve secrecy through obfuscation, then congratulations – mission accomplished. It would be fair for some to conclude that Angular 2.0 is mere vaporware. I’m not willing to go quite that far.

Here’s my contention: if all of this was around the first release of Angular, fine. We had nothing in the first place and the team is trying to get things squared away before going public. I’ll say this, had this been Angular’s first release, where there was mis-communication and partial transparency, the prospects of success would not be there. The fact is, this IS NOT Angular’s first release. Clearly, 2.0 is a revolutionary step over 1.x. The Angular Team looking to capitalize and build upon Angular 1.x’s success. As such, the community that was praised at ng-Europe has a reasonable expectation to be kept in the loop. That’s the way you’re supposed to treat the community that makes up your development partner base. To me, it seems rather common-sensical. Why on Earth would a team want to disenfranchise the very community it relies upon and praises? Is it meaningful praise or does it just make for good copy? Words are cheap and easy. Again, it’s what you do that counts.

There’s an old saying in business and politics: You dance with the one that brought you…

If some other notable companies engaged in this sort of behavior, they would be publicly flogged. I’ll leave it to the reader to speculate on who those notable companies are.

My request of the Google Angular Team is a simple one – stop with the secrecy. Get the community involved. I’m not saying there has to be design by committee. That’s never a requirement in OSS. There should however, be an opportunity for the public to review and comment. Whether you implement that feedback is up to you. The public has a good way of showing its support or lack thereof. There are many individuals and organizations that not only need time to evaluate, they are owed that time. That is part of the compact. That’s how you earn and retain trust.

The public has put its collective trust in Angular. The Angular Team should return in kind.

Posted in OSS | 28 Comments

Quick easy steps to grab your build artifacts from Visual Studio Online

If you haven’t checked out Visual Studio Online yet, you are missing a lot! I’m in the midst of producing a video series on how to use Visual Studio Online for WintellectNOW. Don’t have a WintellectNOW account? No problem. Enter my promo code PETERSEN-14 and get 2 weeks of unlimited free access.

If you are using Visual Studio Online and have begun to use the hosted build controller, you may be wondering how to grab your build artifacts. Deploying to targets such as an Azure Website is simple. However, there are times when all you want are the raw build artififacts (dll’s, exe’s, html, css and js files, etc). How do you get those?

As it turns out, it is pretty simple!

One of nice new features with Visual Studio Online is the new REST Api.

I’ll leave it to you to sort through the Api reference. The one I want to key on is the Api call to get the list of builds:

GET: https://{account}.visualstudio.com/defaultcollection/_apis/build/builds?api-version=1.0-preview.1

The following is an example


{  
   "value":[  
      {  
         "uri":"vstfs:///Build/Build/36",
         "id":36,
         "buildNumber":"Test-Build-One_20140902.1",
         "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/build/Builds/36",
         "startTime":"2014-09-02T12:40:31.583Z",
         "finishTime":"2014-09-02T12:42:08.483Z",
         "reason":"manual",
         "status":"succeeded",
         "dropLocation":"#/119161/drop",
         "drop":{  
            "location":"#/119161/drop",
            "type":"container",
            "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/drop",
            "downloadUrl":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/drop?api-version=1.0&$format=zip&downloadFileName=Test-Build-One_20140902.1_drop"
         },
         "log":{  
            "type":"container",
            "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/logs",
            "downloadUrl":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/logs?api-version=1.0&$format=zip&downloadFileName=Test-Build-One_20140902.1_logs"
         },
         "sourceGetVersion":"LG:(no branch):b792b3c303982b6be3e6105c3e587307fd35381a",
         "lastChangedBy":{  
            "id":"f21f35aa-5c28-462a-91cb-e077e30e0dbd",
            "displayName":"Elastic Build ({account})",
            "uniqueName":"LOCAL AUTHORITY\\Elastic Build ({account})",
            "url":"https://{account}.vssps.visualstudio.com/_apis/Identities/f21f35aa-5c28-462a-91cb-e077e30e0dbd",
            "imageUrl":"https://{account}.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=f21f35aa-5c28-462a-91cb-e077e30e0dbd"
         },
         "retainIndefinitely":false,
         "hasDiagnostics":true,
         "definition":{  
            "definitionType":"xaml",
            "id":17,
            "name":"Test-Build-One",
            "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/build/Definitions/17"
         },
         "queue":{  
            "queueType":"buildController",
            "id":2477,
            "name":"Hosted Build Controller",
            "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/build/Queues/2477"
         },
         "requests":[  
            {  
               "id":36,
               "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/build/Requests/36",
               "requestedFor":{  
                  "id":"874bcfb5-80fe-4a9f-ac62-25bb3487769f",
                  "displayName":"John V. Petersen",
                  "uniqueName":"{account}@gmail.com",
                  "url":"https://{account}.vssps.visualstudio.com/_apis/Identities/874bcfb5-80fe-4a9f-ac62-25bb3487769f",
                  "imageUrl":"https://{account}.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=874bcfb5-80fe-4a9f-ac62-25bb3487769f"
               }
            }
         ]
      },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  },
      {  }
   ],
   "count":15
}

The item you want to pay attention to is the drop node’s downloadUrl Property:

"drop":{  
   "location":"#/119161/drop",
   "type":"container",
   "url":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/drop",
   "downloadUrl":"https://{account}.visualstudio.com/DefaultCollection/_apis/resources/Containers/119161/drop?api-
version=1.0&$format=zip&downloadFileName=Test-Build-One_20140902.1_drop"
}

If you are already authenticated, entering the downloadUrl into a browser will result in a downloaded zip file that contains your deployment artifacts.

There are alternative ways to authorize – which you can find documented here.

That’s it – Super easy to grab your built application artifacts!

Posted in Uncategorized, Visual Studio Online | Leave a comment

Exceptions exist for a reason – use them!

C# and all CLR-compliant languages support a fantastic facility to ensuring code quality. That facility is the Exception. Sadly, it is an often under-utilized facility. How many times have you seen code that checks for an object’s validity? If, like me, you are part of the “Fail Early” school, then the Exception Class is your best friend. By fail early, I mean that as soon as possible, without any interaction from my code or any additional code, the system will abend. Of course, if your classes can throw exceptions, it means that your code will have to handle exceptions. Bear in mind that the try…catch block does come with an overhead cost that *may* impair performance. The key to look at is is what value are you getting for that cost? And – is whatever performance penalty there may be managed and negligible to the user.

It’s not enough to throw exceptions. Rather, you need to throw the right exception and in many cases, you’ll need to throw a custom exception. With a specific exception, you have a better chance of ascertaining exactly what happened. Only as a last resort will you want this:

   throw new Exception("Some other, unaccounted for exception");

Note: when possible, use the built-in exceptions that are already in .NET. For more detail on the base exceptions in .NET, refer to this link: http://msdn.microsoft.com/en-us/library/z4c5tckx(v=vs.110).aspx

Often you may want to create a custom exception:

    public class MyCustomException : Exception
    {
        public MyCustomException() : base("My Custom Exception")
        {

        }
    }

It’s worth noting in the constructor, you get access to many properties – some of which you may want to initialize:

Practical Exampleexception_image1

The following is an example of an approach that you may wish to follow and adapt as necessary:

    public abstract class MyBaseException : Exception
    {
        public  MyBaseException(string message) : base(message)
        {
            HelpLink = "http://www.myhelplink.com/helptext";
            
        }

        public override string ToString()
        {

            return string.Format("{0}{1}{2}{3}", 
                base.ToString(),Environment.NewLine,
                "For more help on this error: ",HelpLink);

        }

        public void Log()
        {
            Console.WriteLine(ToString());
        }
    }

Note: In this particular example, no need to worry about serialization as there are no custom properties.

One of the nice things about the base Exception Class is that it has a usable ToString() method. Nevertheless, it is missing some additional information that could be useful. This is why there is an override for the ToString() method.

With a base exception class in place:

 try
            {
               throw new MyCustomException("My Custom Message");
            }
            catch (MyCustomException ex)
            {
                ex.Log();
            }

Here is the output:

exception_image2

Hopefully, this post has given you some ideas on how you can effectively use exceptions in your applications.

Posted in C#, Exceptions | 10 Comments

Accessing Visual Studio Online from YOUR Azure Account – Now we can with this new PaaS offering

In case you missed Brian Harry’s announcement – we can now either link existing Visual Studio Online (VSO) instances OR we can create brand new VSO instances and control them through the Azure Portal. The problem before was that there had to be a 1:1 correspondence between VSO an a Microsoft Account. If you’re managing your own projects, that is likely not a problem. If however, you are in an enterprise, having a direct dependency on a Microsoft Account doesn’t work.
The good news is that today, we can associate VSO instances to an Azure Subscription.



image2

Creating a new VSO instance is easy:

image3

Note: if you want, an Azure Active Directory instance can be associated with your VSO instance.

image4

And just like that, we have a new TFS instance courtesy of Visual Studio Online!!

image5

No more having to spend unproductive time installing and configuring TFS from scratch. In a matter of minutes, we can stand up TFS with Visual Studio Online. From here, you can elect whether you want TFVC or git for your source code control. From there, it is very simple to connect your Azure Website to your new repository in order to publish from the source code repository. Like the on-prem version of TFS, you can choose your process template: CMMI, MSF Agile or Scrum. With VSO, you can also create build definitions. For more info on what VSO has to offer, check out this site. For a comparison of features between Visual Studio 2013 (On Prem) and Visual Studio Online – check out this resource.

Posted in Team Foundation Server, Visual Studio Online | Leave a comment

Drafting problems with confcodeofconduct.com and other thoughts

Much has been written about Codes of Conduct recently. In my previous blog post, I mentioned the problems with many of the Codes of Conduct used today. The first thing everyone needs to understand is that while there is a moral basis articulated for why these codes should exist, they are nevertheless legal documents. At least, they should be treated and DRAFTED as such.
To demonstrate that, I’m going to analyze the model Code of Conduct at confcodeofconduct.com. Let’s begin:

All attendees, speakers, sponsors and volunteers at our conference are required to agree with the following code of conduct. Organisers will enforce this code throughout the event. We are expecting cooperation from all participants to help ensuring a safe environment for everybody.

How about guests? It is possible that there is some other class of person that could be missed here? What about a spouse of an attendee? Right off the bat, this document is in trouble. One of the things you will notice is the lack of defined terms in the document. In a legal document, a defined term’s first characters are always capitalized, regardless of whether they appear as the first word in the sentence or somewhere else.


The Quick Version
Our conference is dedicated to providing a harassment-free conference experience for everyone, regardless of gender, age, sexual orientation, disability, physical appearance, body size, race, or religion. We do not tolerate harassment of conference participants in any form. Sexual language and imagery is not appropriate for any conference venue, including talks, workshops, parties, Twitter and other online media. Conference participants violating these rules may be sanctioned or expelled from the conference without a refund at the discretion of the conference organisers.

What is “harassment” for purposes of this document? It gets more confusing because in the second sentence, other terms are used (Sexual language and imagery). Are these additional words meant to imply something different from “harassment”? Or, are these words meant to define or further define what harassment means for purposes of this document? The good news is that in the absence of a definition, a court may take judicial notice of a common definition. The problem is the additional words could still imply that sexual language and imagery are something different than harassment. Are they more or less serious? Are they to be treated the same? Much of this can be sorted out – but somebody other than the drafter. That’s the point here – that there is an intent which is attempted to be expressed here. Remember this too, ambiguities in a legal document are construed against the drafter. In other words, you as the drafter, the one whose intent your document is supposed to reflect, won’t get the benefit of the doubt.


The Less Quick Version
Harassment includes offensive verbal comments related to gender, sexual orientation, disability, physical appearance, body size, race, religion, sexual images in public spaces, deliberate intimidation, stalking, following, harassing photography or recording, sustained disruption of talks or other events, inappropriate physical contact, and unwelcome sexual attention.

Here, in the less quick version, there is an attempt to define harassment. What if somebody is doing something that is not included in this finite list that another feels is harassment? Guess what, they are out of luck. When you have a finite list like this, they become words of limitation. As to the photography element, the word harassing appears. Always a problem to have the word used inside the definition for that word. That’s bad legal drafting as it makes for a lack of clarity. Typically, you will see a list of things in a legal document. This is often used as a guide for understanding. A well written document would include the phrase “including, but not limited to..” That way, you don’t have to keep amending your document when another type of activity could be covered.


Participants asked to stop any harassing behavior are expected to comply immediately.

This statement is bad on a number of levels. First, the phrase participants is used without any definition. It is capitalized as the first word in the sentence. With a conference however, the phrase participant likely means something, such as the word attendee. The other problem with this sentence is that it places a condition precedent on the offending behavior. If they are not asked to stop, they don’t have to “comply immediately?” I know that is not the intent of the document, but that is what these words say. Accordingly, statements like this are really meaningless in a legal sense. To the lay person who wrote it, it means something. But you are not writing this document for you per se. Rather, you are writing this for somebody else and for it to be enforceable.


Sponsors are also subject to the anti-harassment policy. In particular, sponsors should not use sexualised images, activities, or other material. Booth staff (including volunteers) should not use sexualised clothing/uniforms/costumes, or otherwise create a sexualised environment.

Right off the bat, we now know that Sponsors and Participants could be two separate classes. While participants and sponsors are covered by this code, it still leaves the possibility that perhaps, they are to be treated differently and that perhaps, there are multiple standards, express or implied in the document.

What does “sexualized” clothing mean? We all know what the term “Booth Bunny” means. What if the person working in the booth happens to be an attractive woman who wears clothing that somebody thinks is “sexualized”? Does the sponsor’s employee not have rights? Does the sponsor have to get a clothing check with the conference ahead of time?
This is an example of where somebody has tried to be specific. In that effort however, the attempt at specificity, ambiguities and more questions arise. Remember the thing about ambiguities in a document. They are construed AGAINST the drafter. All benefits of the doubt would go to a sponsor in this case.
And what about attendees? Since this statement only appears to apply to sponsors, are attendees exempt? The text in this code of conduct suggests yes, they are. Was that the intent? Likely no, but that’s what you get when you have poorly drafted legal documents.


If a participant engages in harassing behavior, the conference organisers may take any action they deem appropriate, including warning the offender or expulsion from the conference with no refund.

A few problems here. Notice that participant is not defined. Who is actually covered in that class? Yes, several groups of people are covered under the code. But in this statement, a specific class appears to be carved out. Think of it as a local variable within a module that is shielded from the broader context. Also, what if a sponsor engages in “harassing behavior?” They seem to be exempt here because of the presence of the word “participant” – which is undefined and which is different from the word “sponsor”. And of course, what about volunteers, spouses, etc?

The other thing here is the one thing that many in the Code of Conduct Pledge movement seem to rally against – giving too much discretion to the conference. Here, the conference may do something or may not do something. Also, what if the conference is at a hotel? The “offender” can still stay on prem as the conference has no jurisdiction on that.


If you are being harassed, notice that someone else is being harassed, or have any other concerns, please contact a member of conference staff immediately. Conference staff can be identified as they’ll be wearing branded t-shirts.

First, who is “you”? Do they mean to say that if I’m reading this, I’m covered regardless of whether I’m part of the conference? Other concerns? Is this a catch all?


Conference staff will be happy to help participants contact hotel/venue security or local law enforcement, provide escorts, or otherwise assist those experiencing harassment to feel safe for the duration of the conference. We value your attendance.

Other than the fact that participants are not defined, what does it mean to “feel safe?” As a conference, you are making a warranty here of sorts. It is interesting to note that while there is expulsion for the offender – with no refund, what about the victim? Why doesn’t he or she get a refund? This is getting into the public policy issue here, but it is something that should be discussed. Why should the conference be allowed to profit from both the offender and the victim?

Here’s a news flash, you can’t really help people feel one way or the other – in a legal document. That’s more the stuff of therapy – which the typical conference won’t have trained staff. All you can hope to do is deal with the situation by stopping it and preventing any other harm.


We expect participants to follow these rules at conference and workshop venues and conference-related social events.

Who is “we?” The conference? The people who run the conference as individuals? And what are “these rules?” What is a workshop? What is a conference-related event? Again, the scourge of a lack of defined terms.

Put it this way, if I were representing somebody who was kicked out of a show on the strength of this document, without due process (under some level of due process and other protections of consumer commerce related statutes, etc) – along with the ambiguities, I’d feel very confident about prevailing. Further, there is the strong possibility of a defamation suit due to somebody at the conference saying something. Typically, a conference is not equipped to investigate, provide counsel, etc. Also, I’d be suing the conference as an organization as well the organizers individually. The words of this model code of conduct appear to open them up.

What’s the best advice for a conference? Decide first if part of your business is going involve policing people? If it is, then I suggest you not have the conference. It’s not a good business model. If you are confronted with something that on its face is a crime, then bring in the police and then let them handle it from there. That’s what they do. That’s what they are trained for.
What if what you are confronted with is conduct that is bad for your conference business? Deal with it. If you have to expel somebody, do it. Just be sure you have things documented in case you find yourself getting sued by the expelled party. Indeed, a conference has a right to protect ITS INTERESTS – which are not necessarily and totally aligned with the alleged victim’s interests. And I say alleged because the burden of proof is on the accuser. I know, this isn’t a court of law, etc. But guess what. As a conference, if you don’t afford the accused some level of due process and protection, you could have a tainted process such that you open yourself up for liability.

Finally, as a conference, if you want to have a general statement of expectations for those who participate, go for it. Just make sure it is well drafted and comports with your intent. Make sure it is workable and doesn’t have the unintended consequences of creating additional problems and liability. Above all, don’t rely on the model on confcodeofconduct.com or anything that is related or derives from it.

As a general matter, people have a reasonable expectation that when going to a conference or any event, they can do so with quiet enjoyment – without interference. The 18th amendment of the US Constitution through the Volstead Act in 1921 tried a similar social experiment. Not only didn’t it work – it was a massive failure due to its unintended consequences. Why? For one thing, it wasn’t workable. You can’t legislate morality. Forever, governments and people have tried. Doesn’t work. Bad actors will be bad actors. We rely on social norms and self-policing for the most part. There is in fact a common code of decency. It isn’t written, it’s implied. It is the bedrock of what makes a society. And for every society, it’s a bit different.

Those who hawk prescriptive solutions typically have an agenda. Often, it’s a personal agenda. It can also be a business agenda as well. Well, with all due respect, I choose not to be governed or ruled by your personal agenda. At the same time, I respect a conference’s right to do business as it sees fit. If it wants to have a code of conduct, fine by me. I couldn’t care less. As I said before, I don’t see a conference’s fortunes rise or fall on the presence of a code of conduct. Rather, I evaluate conferences based on factors such as how they operate, the sessions, the speakers, the venue, customer service, price, etc. I think I’m in good company here. And for the few that would eschew a conference for not having a code, I suspect there are people to take their place.

Every conference is different. Each is its own society. How I view DevConnections is far and away different than how I view CodeStock. Love them both, but each are different. Some of the best conferences I’ve attended don’t have Codes of Conduct. And by the same token, some of the so-so ones have Codes of Conduct. I ascribe no causation or correlation to the code or a lack of code. For me, the Code of Conduct insofar as MY evaluation of conference is a meaningless data point. Others may have a different view and while I don’t hold those same views, I respect those views nevertheless just as I respect a conferences prerogative to have a code of conduct or not have a code of conduct.

But if you choose to have one, make sure it is well drafted and you don’t sign up for more than you bargained for. Also, make sure an attorney reviews it.

One other thing. Companies like Heroku that have policies like this: https://www.heroku.com/policy/events. If you are at an event that Heroku sponsors, you be sure to enlist their help in the conference’s enforcement of the Code of Conduct. Not sure if the Heroku folks realized or not, but they put themselves front and center on the policing of these codes. In a very real way, Heroku is warranting that a conference is “safe.” If you happen to be an aggrieved individual and Heroku sponsored the event, talk to your lawyer. You may have a potential second defendant in your cause of action should it come to that. By the way, Heroku’s parent is Salesforce.com.

I think Heroku’s stance is an honorable one and I respect their right to do what they please. Doesn’t affect me one way or the other. I get the idea. By companies doing this sort of thing, it could have the effect of putting economic pressure for conferences to have codes of conduct. Guess what, won’t have a widespread effect. WWDC, SXSW, TechEd, BUILD, Oracle Open, and a slew of other big shows don’t have them for reasons that have nothing to do with wanting people to feel safe. These are big time businesses that have a vested interest in attendee’s safety and satisfaction. If you don’t think that is paramount to them, then you really have no business sense whatsoever. And, if you are the kind of person who needs to have a Code of Conduct in place for you to feel safe, govern your actions and other actions, it really doesn’t say much about how much you value the notion of personal responsibility. If you really think a Code of Conduct is the thing that makes you safe like a bullet proof vest or a panic room, I have a bridge in Brooklyn I’d like to sell you.

Posted in Uncategorized | Tagged , | Leave a comment