Building high performing teams by showing your employees how they can do better

This topic builds upon the previous “Building high performing teams by telling your employees they suck” (its not as simple as telling someone “you suck”); the emphasis really comes down to communication (showing) and attributes (why) they are not performing.

I learnt very quickly in my career that quality metrics do not lie and can easily convince to win an argument. I also learnt that pictures and diagrams help me explain (and understand) things much quicker than words alone. This is why, whenever I have had to prove something to myself, or explain a point; I have turned to metrics and diagrams.

So lets first cover some basics

Many companies do an “annual review” dance; some do it twice a year, some don’t even do it (we wont talk about them)…  and during this review, the expectation or assumption is that the person being reviewed has been working towards their goals that were defined the year prior; or that if goals had changed, then things would have been appropriately documented to reflect that change…. Truth is.. we do not have time for this; especially when you are in a high demand team where priorities change on you all the time. However; if you have been actively carrying out your 1-on-1‘s and have been using it to develop the person/your team and have some sort of career path or individual development plan in place; you may be well prepared for this annual review – Great for you!

Some lucky ones get an annual, semi-annual (or sooner) 360 review; I believe this provides more value than an annual review because it lets you hook into career development much sooner and/or it will give you insights to how you efforts are perceived by a larger audience who may be working with you on much closer day-to-day basis; this can one stay on top of their game if its done in short enough period as it is a great motivator. Managers can then review the trend over time and see how one is progressing to give a more accurate review.

At the end of the day, with all these reviews, coaching, development plans, etc. what we are really trying to do is grow people (or remove the ones that wont grow), make sure they perform and build teams that work well.

High-performing teams don’t just happen, they are made.

It is my opinion that in order to build high performing teams that work well; you have to instil a culture around “working well”. The annual, semi-annual, etc reviews really need to tie into a day-to-day type of thing; it may be seen as a lot of work (initially true), but just like good and frequent maintenance goes a long way, so does this.

To recap; what I have just stated is that we should focus on reviewing everyone on more frequent basis; something that ties into the day-to-day and can be captured daily or weekly… or best, if it can be captured adhoc as long as its captured within some frequent frequency. We would of course want this to be documentable, repeatable, measurable and actionable… we would want a process.

So, if this all has not added up yet, we want quality metrics that will provide diagrams/results based on process that can be used to communicate performance.

Every couple of weeks; I will ask my leads “without any thought into this, respond to my email and stack-rank your team”; or I will ask “If you had to do a project, who are the 3 people, in order of preference, you would pick”. Then there will be the “who is the most active volunteer” or “who is the least to volunteer”…  While these questions lead to answers that I plugin to my brain somewhere and maintain on spread sheets… they do not translate to quality metrics because they are not standardized enough… nor really repeatable.. (and probably other reasons as well). Another flaw with my method of capturing metrics is that it doesn’t allow “everyone”offer an opinion; only the ones I happen to ask or interact with that day. So while I may be able to “wing-it” and come up with diagrams based on some metrics… we need to focus on improving the quality of these metrics.

Quality Metrics

What does “team work” mean to you? What are the attributes of a team player? What type of people do you want to work with? or what type of people do you want working for you?

Here are some interesting data points that one can use a 1-5 scale to rate someone on (in no particular order)

  • Reliability
  • Constructive communicator
  • Active listener
  • Problem solver
  • Active participant
  • Shares solution/ideas
  • Volunteers assistance
  • Flexible
  • Customer focused
  • Respectful

In addition to defining the data points; you want to make sure that everyone has an opportunity to provide this data on “any one” without a need for self-identification (remain anonymous) and you will want some way of reminding people to go back and update (or resubmit) data at some frequency.

Creating a process around capturing these metrics and emphasizing the need to submit feedback sends a strong message to your team(s) that this is important.

Communication

Once you have reviewed, tweaked and confirmed (adhoc charts) that you are capturing data that is meaningful; its time your shared the results with the team (where appropriate) and with individuals (as needed).

The diagram below is probably more for your own viewing (rather than sharing with the team)

ImageThis diagram identifies the low and high scorers (averages of combined attributes); and you can see from above, Employee 4 is a low scorer.. (bottom of stack rank)

You may want to dive deeper into this, and you will see

Image

Where everyone lies based on attribute; is there a deviation for anyone? or does everyone score low in a specific category?

Again, from the above two it seems like Employee 4 isn’t at par with the rest.

Communicate

Communicate how/why/where they are not performing… a picture says a lot more than words, see below:

Image

This chart can be used in a 1-on-1 with Employee 4 to go over their specific performance; and can be tied in with what the “average employee” scores (which is just avg score per attribute), see image below

Image

This image that compares employee 4 to the average employee gives the employee actionable data that is backed by metrics. They can then use this information to focus improvement efforts.

Conclusion

So while its easy to focus on the literal words used. The goal should never be to tell someone that they suck (and stop at that); it should be to help drive change, development and improvement in someone by clearly communicating areas they need to focus on so that you can build a high performing team.

Fear defines us

Fear defines us.

It sets our boundaries telling us what we can or cannot do. It makes us comply with the rules set in our societies. It keeps us in check….

Fear reminds us to think our our actions rationally and impacts. ‘If I go faster than the speed limit, I’ll get pulled over and get a speeding ticket’. Fear also sets our comfort level with how much risk one will take. ‘If I get a speeding ticket and If I don’t pay the fine and don’t show up in court a warrant will be issued’. Social and intuitive fear is needed, it helps us survive and co-exist; some fear is good.

But the same fear, can lead to regrets as it stops us from taking risks..
I wish I had quit and worked on my idea. I wish I had gone to culinary school. I wish I had moved to x rather than y. I wish I had said more. I wish I had dropped out. I wish I hadn’t dropped out… I wish…. had….. All paths taken and not taken in the past….

Why? Fear of failure? Fear of success? Fear of being different? Fear of being the same? Fear of change? Fear of being noticed? Fear of being unnoticed? Fear of leading? Fear of following? Fear of the unknown? Fear of Fear?

There’s still time; one can still pursue what they strongly believe in; its never too late as long as you can face your fear’s.

Fear is learned; unlearn Fear and defy Fear by redefining what Fear means to you.

Creating virtual products on the virtual cloud – Amazon RenderFarm

When we first started talking about what the web based Blank Label experience was going to be like my concern was the visual quality of the product our customers were going to see in the shirt designer. Blank Label allows you to create several thousands of custom shirt design combinations; building a physical product per combination to take a photograph would have been very very very expensive.

Not being able to physically touch the product, and not be able to feel the cloth and not have a good visual of what the product would look like was something were a lot of “not’s” that I was not okay with… so not known anything about 3d modeling nor shirts, I decided to take on the challenge of figuring out how we could come up with a modeling technology that would yield a somewhat realistic shirt… after all, anyone can easily tell a real shirt from a rendered shirt…. right?

The first mistake I made was try to find a company that could create what I needed – there were many; and once I explained the idea behind how I wanted it to work and render, the cost went from $14k to $48k to … over a $100k… yes I know its not cheap to render and design a model, but just because they couldn’t figure out how to automate actions and export clippings (I wont go into details) it did not mean that the client should foot the bill…. anyway., the second mistake I made…. which was the right one… was that I hired a 3d modeler (overseas) to work with me and understand what I was trying to create….  I did not learn much about 3d modeling, but I did learn more than I will every want to about a shirt during this time…. anyway, lets look at what we created back in the day.

Version 1 (2009)

version1

Version 1; wasn’t that bad… but it also wasn’t that good. It did a decent job of showing your fabrics and other selections, but the realism was lost., so fast forward several months we came out with version 2 with a different 3d modeler, and again several months after than version 3 with another modeler., (both below)

Version 2 (2010)

version2

version 3 (2011)

version3

The problem with each (besides it not being realistic enough) was that the modelers themselves did not understand the anatomy of the shirt; and because they didn’t, they couldn’t create a model that behaved like a real shirt. On top of that, they didnt really understand the need and desire behind having things done a certain way because they had never worked on a model that was controlled by code…. at some point we needed to add more features to the shirt, and also, since each modeler we had been through, had a non-automated way of generating renders., it would take weeks if not months to get 10-15 fabrics rendered…. so I went back to the design board, and looked hard…

By now I had some understanding of how the models work, and how things needed to be created., and fortunately for me I found someone who was willing to understand the shirt, and understand the entire process behind what I was trying to do., The best part about this was that he said “I don’t know if i can do this, I have never done this, I don’t know if it will work, but if you trust me and can be patient, I can give it my best shot”

See the image below, they are both zoom shots

shirtIn this image, the one on the left is a picture of a real shirt; the one on the right is a rendered zoom shot of the chest area

below is version 4 (current: 2012) of the shirt

version4

With version 4; we have achieved enough realism. There was a lot of attention to detail, both he and I understood every single part of the shirt; how its stitched, how the layers go on each other, etc… and the model we have now., is not just realistic-ish., its also automated… if you head over to Blank Label you will see that there are several rendered views/zooms of the shirt.. which finally brings me to the topic of this post.

We use to render the model on his machines, he had a small network of 3 machines, a decent amount of CPU power, and he would spit out 5 fabrics rendered(each is 86 frames) each day; approx 1.5-2 hours per render. Not that bad…  but for us, when we launch new fabric selections, we usually launch 30+ at a time; which means 2 weeks to get those rendered and that is if he isn’t busy rendering other stuff….

We looked at render farms that are out there…. way to over priced and you have to hand over your files… your intellectual property to a third party.. who wants to do that? so we thought that we would give Amazon (AWS) cloud a try…. in theory it sounds great, and there are a few articles out there on how to accomplish it, but they are based on theory…

The best part is that I had no idea what I was doing and it was going to be a challenge to figure it out…after going through the motions and having burnt 20 hours; I can confirm that it works, but it takes time and patience.

To build our renderfarm on amazon AWS using only EC2’s; I simply took a windows 2008 r2 AMI and started configuring it, installing the trial version of 3d studio max and setting it up. Once it was setup, we had the issue of “Who would be the manager”… we decided that it made most sense to have the 3d modeler be the manager so we opened up ports through his firewall into his machine, and viola, the render server connected to his machine and was ready to accept work…. there was just one issue., the files on his machine mapped to a UNC path that did not exist on Amazon…. in hindsight, I would have had him fix it a different way, but we ended up mapping everything to drive Z (took several hours to remap) and once remapped, we used google drive to sync between the amazon cloud instance and his machine; once synced, the server started doing work and started spitting out renders….

Great… but that’s just 1 machine though…

Once the first machine worked, it was pretty challenging to setup a repeatable image; i.e. an image that you could just start, and it would automatically connect to the manager and start doing work. Its not as easy as it sounds, there are permissions that need to be setup, things that need to run as a service, virtual folder to drive mappings that need to be created and the hardest of all, ensure that they connect to the manager. 🙂

I will definitely dedicate a post to walk through an amazon render-farm setup; but I will leave you with this.

What use to take 1.5 – 2.0 hours per fabric, now takes 15-20 minutes with 7 virtual machines; up that to 14 machines and your time decreases by 1/2.

This render-farm allows us to create our virtual products much quicker, virtually on the cloud.

Vision without execution

Leadership is a verb

MVC3 .Net Continuous Integration and Deployment in the cloud – Part I

This post builds on my previous post.

The task of getting a MVC3 .Net solution to build in the cloud was not as straight forward as I thought it would be. As I hit roadblocks I googled, and as I googled, I realized that there were many who were trying to do the same and had hit the same roadblocks with no success.

So how does one do CI and deployment in the cloud? Usually people will have a build server somewhere running jenkins, cruise control, hudson, team city… or something else… I wanted to get away from that. I also no longer wanted to manually copy files to the server.. even though that hardly took any time.

Since we already use a few of the Atlassian ondemand products; using Bamboo for automation sounded like a great idea; to use Bamboo for automation, you will also need an Amazon AWS account. The great news is that currently Amazon has a free program for new customers; the not-so-great news is that we cannot completely use the free program because Bamboos elastic agent performs slow and cpu hits 100%… but there is some benefit in being part of this program… so sign up as it offsets some of your costs.

Once you sign up for Amazon Web Services; you need to obtain a few things from the security panel.

1. Get your Access Key pair

 

2. create/get your certs

 

Once you have those two things; head on over to the Bamboo administration and configure your elastic bamboo

You will need to enter your AWS Access Key, I changed the shutdown delay to 100, and I opted to enable “Upload AWS account identifiers to new elastic instances.” I don’t think this is actually needed for windows systems (doesn’t work)., but the thought here was that you could start an elastic instance and have it “mount” a specific elastic volume…. this does not work in bamboo for windows systems., but whatever, if you look at the image, you will need to select “files will be uploaded from your PC” and then you can upload your cert key pair; it then uploads and saved it for you. I also opted for Automatic Elastic Instance management, and sent it to passive.. You can change these values if you will be doing a lot more builds; but for starting out and getting things going, the minimum is just fine.

 

Once that’s done, save the settings; you will then want to view/edit the Image Configuration.

In the image below, you will see that I disabled all the default images and have just one configuration enabled, my own image that I will show you how to create/obtain and get to in Part II; focus on the Default Image EBS x86_64 (windows) stock image, it will be enabled for you by default (this is fine for now). Also notice that the Instance type is set to Large. If you would rather not spend $’s in the setup/configuration you may want to change this to Micro (it will be slower) and its free under the AWS free program.

 

To change it to Micro, all you have to do is click the Edit link and you can change the value (image below)

Once this is all done; if you just want to check things out and see that they work, you can click on the start instance link in the “instances” page.

Once you click start, head on over to the AWS panel and select “instances“. In the image below, you will see that it displayed an instance, and if you right click, you will have an option to connect, click it

 

 

Once you click connect, you will get a popup that allows you to download a shortcut file to remote desktop to this machine; the username is administrator……

 

So what about the password? how do you get that? clicking the link wont help. for that., you need to head back to bamboo instance management.

The image below shows what you should be seeing, an instance name, and an elastic agent starting or started. Click the instance name

 

Once you click that, you will get a page that displays the details on the instance; see the image below, the password will be visible in this area, and you can use this to login. Once you are done messing around, you should terminate all instances (esp if you are not using free + micro), you can do that from the instance administration page…

If you try to use this default image as is and configure your build scripts with MS Build, things will not work, MVC3 is missing, a lot of windows updates are missing, nant doesn’t work correctly, and you will want some ftp tool + scripts on there… basically you will want to correct all this, and take a snapshot of the instance (this gives you your custom instance that is updated)…..

 

Rapid Agile – Real-time Actionable Prioritized Individual Delivery

So what does come after Scrum/Kanban/Agile?

The evolution of the SDLC continues as expected and if you look at the trend, the focus has been to get things done quicker – Rapid.

Andy @ Assembla calls it Scalable Agile and has great content explaining the concept behind it; I call it Rapid – Real-time Actionable Prioritized Individual Delivery, or Rapid Agile and the basics around the process are very similar. The focus or goal is to prioritize individual efforts rather than a team sprint, act upon real-time feedback and  deploy much quicker; often deploying new features and bug fixes several times a day rather than ever other week or so.

Case Study: Blank Label

At Blank Label when we were much younger, we manually deployed whenever we wanted as we were trying to rapidly enhance and stabilize our offering. With every feature came a lot of bugs and it was usually the changes in usability that brought inconsistency in usability as we had limited resources and a lot of “to-do’s”. Eventually we settled on a 2 week delivery cycle  but as we were attempting to find out who our customer was, we made some drastic changes only to see orders drop from several a day to almost none every week. We had no idea what of the 20 things we changed in the 2 weeks that killed it as A/B testing had told us that our sales would go up, not vanish.

Fast-forward many months – we saw that we had gone back to our old habits, but this time we had process and we were not disrupting things when we updated, we deployed to a staging server, tested things out there and then released to the live server. This still required manual builds and deployments, many times fixes just didn’t make it to the live system when issues were discovered because it required someone to build and upload…

Now fast-forward to yesterday – we now build the backlog in Jira and make use of green-hopper for their kanban board. We go through a to-do, doing, build and live workflow, where bamboo will automate code checkins and deploy with AWS ec2 to our staging server; once testing passes staging, the deployment to live is a simple click of a button and live is then refreshed.

For test, we have gone from  1-3 pushes to test per day to 5-8 pushes per day and for live will be going from one refresh per day to 2-3 refreshes. We still have a small team of developers, once this team grows we will probably see a large increase in pushes to test, but will probably maintain the 2-3 refreshes to live per day (depending on the functionality).

In the not so distant future, I will provide the development workflow process along with the tutorial to build all the Atlassian stuff that will get you to a rapid continuous integration, deployment and deliver model as I did not see a lot of solutions that focused on the .Net MVC3/4 Razor stack.

Building a dynamic onboarding program for Martians

Chances are that you have been through some form of schooling (high school, college, maybe some random instructional education) and have hopefully figured out that everyone learns differently.

For me, learning and passing my classes meant that I showed up to all classes, took no notes – just listened and the day or so before a test or final, skim through the text books (if i had purchased them) and then just showing up for the tests. Once I figured out how to do that very well, my last 3-4 semesters for my Bachelors, Comp Sc were filled with A’s and my Masters, Software Eng was a solid 4.0.

Was  it a piece of cake? Nope, but I surely made it seem like it was.

So whats the secret? or whats the relationship to that with onboarding? or well what is onboarding?

From Wikipedia

Onboarding, also known as organizational socialization, refers to the mechanism through which new employees acquire the necessary knowledge, skills, and behaviors to become effective organizational members and insiders.[1] Tactics used in this process include formal meetings, lectures, videos, printed materials, or computer-based orientations to introduce newcomers to their new jobs and organizations. Research has demonstrated that these socialization techniques lead to positive outcomes for new employees such as higher job satisfaction, better job performance, greater organizational commitment, and reduction in stress and intent to quit.[2][3][4] These outcomes are particularly important to an organization looking to retain a competitive advantage in an increasingly mobile and globalized workforce. In the United States, for example, up to 25% of workers are organizational newcomers engaged in an onboarding process

Some organizations have great onboarding programs; some don’t. There are going to be cases where you inherit a team that has single-threaded subject matter experts and as a manager you may be expected to distribute that knowledge and grow the team – with no process or onboarding program in place. Yes, you have to create it, so where do you start?

Do you invest time in meetings? create videos? printed materials? who will read all that? who will do the work if your team is off training new hires? is that really a good use of their time? or a real-world question “Do you have bandwidth?”. The answer is No.

So, why not use what you, or I learnt during schooling? when we ourselves were learning? how did you learn? How could you create an onboarding program from nothing? and how could you be sure it would work? You really do not want to invest time in something that is  not going to work so it needs to be agile enough to change on a whim.

Okay – enough of the red flags, here is what I did. Ill try to make this as generic as possible.

I inherited a team of martians, and the problem is that they only speak a special language, called martia. Turns out that its a very ancient language and that no one really speaks martia nor is it taught in college. The small group of martians have been speaking it for 15 years and they as a team are great at it, theres just a few of them. It also turns out that there are all these documents that come in that need to be checked for grammar and spelling, and corrections – in many cases the martians really have to research and see what the intent of the document was because in some cases they have to re-write the document correctly – it can definitely be time consuming and this is the only team that can do this.

This team of martians is also aging, some have retired, others were move to other planets so I have to hire more martians – but, there are none around. So I hire a martian from a different universe and tell it that it needs to learn martia and I will help it learn this language; the language it speaks, we dont care for it. Here is the process that gets put in place

1. Every day the new hire will sit with a senior martian for 2-3 sessions and learn stuff

2. The sessions will be 30 minutes long and after every session there will be a break, during which the new hire will document all that was covered

3. During the next session, the senior martial will review notes, as a refresh to where they left off, and continue the information offload

4. Steps 2 and 3, repeat for a week or so; after which the new hire will then attempt to work the documents

5. as the new hire works the documents, it will have questions, it will document them

6. the new hire will setup additional sessions with the sr martian to get clarification and answers

So – you say this is just common sense and normal stuff.. how are we reducing the dependency on the sr martian who is already busy? here is the answer:

A couple of months go by and another new hire is brought on

1. The new hire sets up sessions with the x-new hire, i.e. the junior martian.

2. the new hire reads all the documentation created by the junior martian

3. several sessions take place where the junior martian and new hire go over content

4. a session every now and then takes place where the sr martian comes in to listen in, and see how the training is going

5. if the sr martian adds anything, its documented in the growing on-boarding document

6. the new hire then also attempts to work documents and goes to the junior martian for assistance – and if needed, they both go to the Sr. martian.

So, its somewhat like train-the-trainer you say…. yes, it is., except, the trainer role gets passed down to the newest hire. if you keep hiring, you start building a 2-tier training team, where the junior martians, through teamwork, will try to come to a conclusion, and then will be empowered to go to the senior martians for confirmation. This helps build teamwork, confidence and helps them acquire the necessary knowledge, skills, and behaviors to become effective organizational members and insiders.

Sooner or later, your team of martians will grow and the martia language, once so uncommon, will become common and the perception that its the monster in the closet that only the select few can understand, soon goes away.

Knowledge – Know yourself

Beginning Process Improvement – What to do first

“Existing processes must be described before they can be well understood, managed, and improved. An organization must then define what these processes should be before attempting to support them with software engineering tools and methods; in fact, the definition forms the requirements for tool and method support. A variety of process description and definition technologies is available.” [*]

Ask a gardener how you can improve your software development practices and not only will you get a strange answer, you will also get a very confused look; unless of course the gardener use to be a software developer and knows your product (and current process) in an out. In other words… if one does not understand the inner working of things, such as the current chaos (or processes) or what goes on behind the scenes and how things work, then that person cannot provide you with useful information on how things can be improved.

A defined process is a prerequisite to process improvement; you cannot (well you could, but it would take quite a while) improve process without understanding what it is you are improving and how the change’s that are suggested and implemented will affect other processes.

As obvious as may sound; to begin improving process, you need to first draw it all out and identify all the bottle necks/issues one by one and strategize when and how to improve what. Many have wasted their time trying to implement something that may have worked elsewhere, or something that’s out of a book that’s there for the sake of “having a process” with no real benefit to the users.

When it comes to process – One size does not fit all.

[*] – Technical Report “Software Engineering Process Group Guide”. Flower, P & Rifkin, S, September 1990. CMU/SEI-90-TR-024, ESD-90-TR-255