I did something apparently controversial today. I sent a mail out to our team asking if I could spend some time with each of them over the next month to learn how they sell our service to our customers; how they describe it to others and how they evangelise it. And that was my mistake. I framed it wrong.

You see, our service is many things to many people. It has to be – it’s part of the value we bring to the table. For example, consultants are traditionally either technical or non-technical. It’s rare to find someone who is a good blend of both, and at the right times. Rarer still is to find a whole team of them together and arm them with the some of the best technologies and the right kind of ethos.

I was actually a little shocked at some of the responses I got back. Most were positive, but some are clearly designed to probe deeper: why do I want to know this? Is it aligned to other activities? How does it relate to those – does it replace them? The tone is defensive and it saddens me (perhaps though, I have misunderstood) that people may not see the value in defining something more clearly – if not to the outside world but at least to ourselves.

We all do fantastic work and I want to make sure that we do, each of us, share the best bits of what we do and capture those. I suspect we’ll see many common themes occurring but I hope we’ll be pleasantly surprised at some of the ‘secret ingenuity’ that I’m sure goes on.

Our identity

Whenever we are engaged in conversations internally or externally about what it is we do, we invariably start off by listening. We try to understand what is important to our audience and figure out if we have something that we can offer along those needs. Sounds sensible, right? And I think it absolutely is.

What I’m interested in, though, is how those folks who are not on my team – folks who we task with making initial introductions – how do those guys view us? What do they think we do? How much do they understand? Are they good evangelists for our service?

And that, right there, is our identity. Not what we want it to be. Well, if we are lucky – it might be! But ultimately I think another team member actually summed it up beautifully:

Your brand is what you want. Your identity is determined by others.

And this ties in neatly with my belief that there is actually a stark difference between ‘brand’ and ‘identity’ and the two are not to be confused with ‘brand identity’ which is an altogether separate beast invented by marketing people.

So we need to work on our identity – and if it is given to us by others, I’d like to influence them in the most positive way possible to align that identity with our brand.

And that’s why I believe a conversation, with everyone on the team, is absolutely critical to defining what that is. Every one of us will have a perspective and a view on what it is we do and what the magic of our service actually is. And although I’m driving this activity, I’m certainly not arrogant enough to believe I can answer such a complex question myself.

Diversity

Part of the problem is our diversity and flexibility to work across the key stakeholders both vertically and horizontally.

But there’s strength in our diversity: we cover a range of technologies, and we have a broad range of expertise, each of us bringing our own unique experiences from our careers and hobbies and interests into the mix. There’s also strength in the team – nobody knows everything, but between us we are very likely have some of the best subject matter experts in the field and importantly, we network with other areas of the business to find the answers if we don’t have them.

So the question I am asking is, what is our brand and identity and more importantly, how do we communicate the value of something which is so many things to so many people? It might be that the output of this exercise is actually the discussion itself – the conversation and the thoughts and the emotion that goes into it will in and of itself, I think, be a valuable task. But it might also be true that the results can be fed back into all these existing activities to enhance and complement them – double win!

First impressions

We obviously do a good job of this today. Our business is growing. Our team is strong and getting stronger. But I wonder how much of this is ‘by default’ or ‘by design’? We rely a lot on a member of our team to ‘get in through the door’ and then start making headway to scope out requirements. I think that’s absolutely fine, and of course it is a requirement when discussions start to progress. But is it enough to expect someone to be able to do a decent job of promoting what we do and recognising if there’s potential by simply telling them that they should ‘call us in at the first sign’? No, I don’t think it is.

And here’s why I think that.

At that moment – at that very first introduction to the notion of working with us, a potential customer is forming an opinion. They’re forming a first impression. And most of that first impression is going to come to them from someone who doesn’t, in all probability, understand our diverse and complex service well enough to be able to communicate it’s benefits clearly and succinctly.

So we lose momentum at that very point. And I want everyone to know that we work in a great team; we have some fantastic people and I know, having worked on this team, that we deliver brilliant and lasting change into the customers we work with. I am excited about that. It drives me to get out of bed every day because I love my job.

And I just don’t think that other resources perhaps ‘get that’ – and maybe they can’t. Maybe they never will. And if that’s the case, I still don’t think there’s any harm in doing what I suggested which is taking a good look at how we ourselves describe our service. What is our key message?

I know our team has done a lot of great work defining cornerstones and pillars and guidelines and processes and what not. There’s even, I’m sure, some brilliant marketing collateral. But there’s no substitute for watching someone enthusiastic describe something to you because you catch a bit of that. And the best introductions for potential are when a customer sees that enthusiasm, understands what might be doable and are inspired to come talk to you about it.

Because in my mind, that’s a win – and that’s where the real value conversation starts.

Where next?

‘Sales’ and ‘pre-sales’ is one such obvious application for a better, cleaner and neater description of what it is we do. Of course it is – clear communication is key. But it is not the only purpose for having such a discussion and I shudder at the thought that it becomes labelled as a sales-related activity.

It’s actually a business development activity, I think. And that’s where I went wrong in my email – or at least, one of the places Smile

Some of my team have – rightly – focused on the output, but unfortunately immediately; asking what are the deliverables? Where do they apply? What is the delivery mechanism? These are great questions – but for me, at this point, the value of this exercise is in the conversation and the understanding. This is arguably such a fundamental task that to focus on the output would skew the discussion; the fact of observation altering the outcome.

If we can’t talk to each other – or explain to a colleague in passing what it is we do – then perhaps we have a little more work to do!

In certain circumstances, you might find yourself with a need to install SQL Server Express on one of your Windows Azure worker roles. Exercise caution here though folks: this is not a supported design pattern (remember, a restart of your role instance will cause all data to be lost).

It was however exactly what I needed for my scenario and I thought I’d share it in case it serves a purpose for you.

There are a couple of approaches you can take, of course, one of which is ‘startup tasks’ specified in the service definition files. However, these offered me limited configuration options because I needed to customise some of the command line arguments being passed to the installer based on values from the Role Environment itself.

The trickiest part was actually figuring out the correct command line parameters for SQL Server 2008 R2 Express, which to be honest wasn’t that fiddly at all. Here are the parameters you’ll need:

/Q/ACTION=Install/FEATURES=SQLEngine,Tools /INSTANCENAME=YourInstanceName
/HIDECONSOLE /NPENABLED=1 /TCPENABLED=1 /SQLSVCACCOUNT=”.\YourServiceAccount\” /SQLSVCPASSWORD=”YourServicePassword” /SQLSYSADMINACCOUNTS=”\.\ADMINACCOUNT” /IACCEPTSQLSERVERLICENSETERM S/INSTALLSQLDATADIR=”FullyQualifiedPathToFolder”

In the parameters above, we’re specifying a silentinstall with the /Qparameter, installing the SQL Database Engine and Management Tools (basic) with the /FEATURESparameter, setting the instance name, enabling named pipes and TCP, while setting service accounts and specifying the SQL data directory.

The next part then, is to actually build this as a command line and execute it in the cloud environment. How do we do this? Simples: we use System.Diagnostics to create a new Process()object and pass in a ProcessStartInfoobject as a parameter:

var taskInfo=new ProcessStartInfo
{
FileName=file,
Arguments=args,
Verb="runas",
UseShellExecute=false,
RedirectStandardOutput=true,
RedirectStandardError=true,
CreateNoWindow=false
};
//Starttheprocess
_process=new Process(){StartInfo=taskInfo,EnableRaisingEvents=true};

For good measure, we’ll also redirect the standard and error output streams from the process so that we can capture those out to our log files:

//Logoutput
DataReceivedEventHandler outputHandler=(s,e)=>Trace.TraceInformation(e.Data);
DataReceivedEventHandler errorHandler=(s,e)=>Trace.TraceInformation(e.Data);

//Attachhandlers
_process.ErrorDataReceived+=errorHandler;
_process.OutputDataReceived+=outputHandler;

Then, we’ll execute our task and ask the role to wait for it to complete before continuing with startup:

//Startprocess
_process.Start();
_process.BeginErrorReadLine();
_process.BeginOutputReadLine();

// Wait for the task to complete before continuing...
_process.WaitForExit();

Stick all of that into a method that you can re-use, and don’t forget to add parameters called fileand args(strings) that contain the path to the SQL Server Express installation executable and the command line arguments you want to pass in.

How to build your command line argument

If you’re wondering why I didn’t hardcode my command line options, it’s because up in Azure, the standard builds for web and worker roles don’t come preloaded with any administrative accounts – you have to specify those during design time. I actually ‘borrow’ the username of the Remote Desktop user (which is provisioned as an administrator for you when you ask to enable Remote Desktop).

I actually end-up with this quick-and-dirty snippet:

stringfile=Path.Combine(UnpackPath,"SQLEXPRWT_x64_ENU.exe");
stringargs=string.Format("/Q/ACTION=Install/FEATURES=SQLEngine,TOOLS/INSTANCENAME={2}/HIDECONSOLE/NPENABLED=1/TCPENABLED=1/SQLSVCACCOUNT=\".\\{0}\"/SQLSVCPASSWORD=\"{1}\"/SQLSYSADMINACCOUNTS=\".\\{0}\"/IACCEPTSQLSERVERLICENSETERMS/INSTALLSQLDATADIR=\"{3}\"", username,password,instanceName,dataDir);

So, ultimately, you’ll then want to wrap all of this up in to your role’s OnStart() method. Include a check to see whether SQL Express is already installed, too.

And, if you’re stuck trying to debug what’s going on with your otherwise silent installation, SQL Server Setup Logs are your friend. You’ll find them by connecting to your role via Remote Desktop and opening the following path:

%programfiles%\Microsoft SQL Server\100\Setup Bootstrap\Log\

Enjoy!

The WordPress.com stats helper monkeys prepared a 2011 annual report for this blog.

I didn’t quite get around to blogging as much as I’d have liked during 2011, but 2012 is a new year and I’ll have a lot more things to blog about, including my new job and the discoveries we make. So, go on – subscribe; you know you want to!

Here’s an excerpt:

The concert hall at the Syndey Opera House holds 2,700 people. This blog was viewed about 22,000 times in 2011. If it were a concert at Sydney Opera House, it would take about 8 sold-out performances for that many people to see it.

Click here to see the complete report.

Slides everywhere, but not a coherent flow in sight! :)

Way back on 11th June 2011, I was lucky enough to be invited to present my session – “Getting Started in .NET” – at the DDD Southwest 3 conference. I remember thinking, “gosh, I’d really love to speak at one of these events but I missed the deadline for submitting sessions”. So, I pinged an email over to Guy Smith-Ferrier and asked him if they needed any help, thinking maybe they’d want room monitors or other volunteers to ferry folks around. As it turned-out, Guy actually still had two slots to be filled on the ‘Getting Started’ track. And this is how my presentation was born…

Nervous? Me?

It was to be the first training session I’d ever given on a topic such as this, so I was both very excited and a little nervous (geeks can be so nit-picky!).

Fortunately though, the bunch of folks that attended my session (some 30-odd I think) were all very friendly and eager to listen – I couldn’t have asked for a better group!

In the top 3? No way!

In fact, I think they were so nice they voted me in to the Top 3 “Speakers by Knowledge of Subject” and “Speakers by Presentation Skills” – accolades that I will soon be transferring onto a tattoo on my forehead, such is the level of my humility (and astonishment!) at appearing here with these two other fantastic speakers. Maybe it had something to do with the fact I was lobbing ‘Telerik Ninjas’ – stress toys – at anyone who asked a question (as a reward, folks – not as punishment)…

By Knowledge of Subject

  1. Steve Sanderson and Getting Started in ASP.NET MVC - 8.88 out of 10
  2. Richard Campbell and Why Web Performance Matters - 8.85 out of 10
  3. Richard Parker (that’s me!) and Getting Started in The .NET Framework - 8.56 out of 10
By Presentation Skills
  1. Richard Campbell – 8.73 out of 10
  2. Richard Parker – 8.33 out of 10
  3. Steve Sanderson – 8.30 out of 10

Looking for the slides?

If you attended and are looking for a copy of the presentation, you can download it below. Well, it’s actually a PDF – handier if you want to stick it on your Kindle, for example.

Getting started with .NET (PDF, 2.4MB)

Find out when your next DDD event is

If you’ve never been to a DDD event, then stop whatever it is you’re doing right now (well, after you’ve finished reading this post, of course) and go figure out when the next one is. They’re all over the place now – even Australia! It won’t cost you a penny to go as the events are all supported by sponsorship, so you’ve really got no excuse to go. The speakers are excellent (yes, even at the events I don’t speak at) and you’ll get a chance to mingle with some very friendly and amazing folks.

I’ve attended these events in the past as a delegate and have always had an absolutely brilliant time. And, this time around I was fortunate enough to be able to attend as a speaker; an experience I enjoyed thoroughly and would love to repeat again (if they, and you, Dear Reader) will have me again …

The .NET community, put simply, rocks. You guys are awesome!

Follow

Get every new post delivered to your Inbox.

Join 261 other followers