Copying blobs between storage accounts / regions

Copying blobs between storage accounts / regions

So a common question I get is copying blobs. So if you are working with azure blob storage, it’s sort of inevitable that you would need to do a data copy. Whether that be for a migration, re-architecture, any number of reasons … you will need to do a data copy.

Now this is something where I’ve seen all different versions of doing a data copy. And I’m going to talk through those options here, and ultimately how best to execute a copy within Azure Blob Storage.

I want to start with the number 1, DO NOT DO, option. That option is “build a utility to cycle through and copy blobs one by one.” This is the least desirable option for moving data for a couple of reasons:

  • Speed – This is going to be a single threaded, synchronous operation.
  • Complexity – This feels counter-intuitive, but the process of ensuring data copies, building fault handling, etc…is not easy. And not something you want to take on when you don’t have to.
  • Chances of Failure – Long running processes are always problematic, always. As these processes can fail, and when they do they can be difficult to recover from. So you are opening yourself up to potential problems.
  • Cost – At the end of the day, you are creating a long running process that will need to have compute running 24/7 for an extended period. Compute in the cloud costs money, so this is an additional cost.

So the question is, if I shouldn’t build my own utility, how do we get this done. There are really two options that I’ve used in the past to success:

  • AzCopy – This is the tried and true option. This utility provides an easy command line interface for kicking off copy jobs that can be run either in a synchronous or asynchronous method. Even in its synchronous option, you will see higher throughput for the copy. This removes some of the issues from above, but not all.
  • Copy API – a newer option, the Rest API enables a copy operation. This provides the best possible throughput and prevents you from having to create a VM, allowing for asynchronous copy operations in azure to facilitate this operation. The API is easy to use and documentation can be found here.

Ultimately, there are lots of ways and scenarios you can leverage these tools to copy data. The other one that I find usually raises questions, is if I’m migrating a large volume of data, how do I do it to minimize downtime.

The way I’ve accomplished this, is to break your data down accordingly.

  • Sort the data by age oldest to newest.
  • Starting with the oldest blobs, break them down into the following chucks.
  • Move the first 50%
  • Move the next 30%
  • Move the next 10-15%
  • Take a downtime window to copy the last 5-10%

By doing so, you gain the ability to minimize your downtime window while maximizing the backend copy. Now the above process only works if your newer data is accessed more often, it creates a good option for moving your blobs, and minimizing downtime.

Azure Search SDK in Government

Azure Search SDK in Government

So I’ve been working on a demo project using Azure Search, and if you’ve followed this blog for a while you know. I do a lot of work that requires Azure Government. Well recently I needed to implement a search that would be called via an Azure Function and require the passing of latitude and longitude to facilitate the searching within a specific distance. So I started to build my azure function using the SDK. And what I ended up with looked a lot like this:

Key Data elements:

First to be able to interact with my search service I need to install the following nuget package:

Microsoft.Azure.Search

And upon doing so, I found so pretty good documentation here for building the search client. So I built out a GeoSearchProvider class that looked like the following:

NOTE: I use a custom class called IConfigurationProvider which encapsulates my configuration store, in most cases its KeyVault, but it can be a variety of other options.

public class GeoSearchProvider : IGeoSearchProvider
    {
        IConfigurationProvider _configurationProvider;

        public GeoSearchProvider(IConfigurationProvider configurationProvider)
        {
            _configurationProvider = configurationProvider;
        }

        public async Task<DocumentSearchResult<SearchResultModel>> RunSearch(string text, string latitude, string longitude, string kmdistance, Microsoft.Extensions.Logging.ILogger log)
        {
            if (String.IsNullOrEmpty(kmdistance))
            {
                kmdistance = await _configurationProvider.GetSetting("SearchDefaultDistance");
            }

            var serviceName = await _configurationProvider.GetSetting("SearchServiceName");
            var serviceApiKey = await _configurationProvider.GetSetting("SearchServiceApiKey");
            var indexName = await _configurationProvider.GetSetting("SearchServiceIndex");

            SearchIndexClient indexClient = new SearchIndexClient(serviceName, indexName, new SearchCredentials(serviceApiKey));

            var parameters = new SearchParameters()
            {
                Select = new[] { "...{list of fields}..." },
                Filter = string.Format("geo.distance(location, geography'POINT({0} {1})') le {2}", latitude, longitude, kmdistance)
            };

            var logmessage = await _configurationProvider.GetSetting("SearchLogMessage");

            try
            {
                var results = await indexClient.Documents.SearchAsync<SearchResultModel>(text, parameters);

                log.LogInformation(string.Format(logmessage, text, latitude, longitude, kmdistance, results.Count.ToString()));

                return results;
            }
            catch (Exception ex)
            {
                log.LogError(ex.Message);
                log.LogError(ex.StackTrace);
                throw ex;
            }
        }
    }

The above code seems pretty straight forward and will run just fine to get back my search results. I even built in logic so that if I don’t give it a distance, it will take a default from the configuration store, pretty slick.

And I pretty quickly ran into a problem, and that error was “Host Not found”.

And I racked my brain on this for a while before I discovered the cause. By default, the Azure Search SDK, talks to Commercial. Not Azure Government, and after picking through the documentation I found this. There is a property called DnsSuffix, which allows you to put in the suffix used for finding the search service. By default it is “search.windows.net”. I changed my code to the following:

public class GeoSearchProvider : IGeoSearchProvider
    {
        IConfigurationProvider _configurationProvider;

        public GeoSearchProvider(IConfigurationProvider configurationProvider)
        {
            _configurationProvider = configurationProvider;
        }

        public async Task<DocumentSearchResult<SearchResultModel>> RunSearch(string text, string latitude, string longitude, string kmdistance, Microsoft.Extensions.Logging.ILogger log)
        {
            if (String.IsNullOrEmpty(kmdistance))
            {
                kmdistance = await _configurationProvider.GetSetting("SearchDefaultDistance");
            }

            var serviceName = await _configurationProvider.GetSetting("SearchServiceName");
            var serviceApiKey = await _configurationProvider.GetSetting("SearchServiceApiKey");
            var indexName = await _configurationProvider.GetSetting("SearchServiceIndex");
            var dnsSuffix = await _configurationProvider.GetSetting("SearchSearchDnsSuffix");

            SearchIndexClient indexClient = new SearchIndexClient(serviceName, indexName, new SearchCredentials(serviceApiKey));
            indexClient.SearchDnsSuffix = dnsSuffix;

            var parameters = new SearchParameters()
            {
                Select = new[] { "...{list of fields}..." },
                Filter = string.Format("geo.distance(location, geography'POINT({0} {1})') le {2}", latitude, longitude, kmdistance)
            };

            //TODO - Define sorting based on distance

            var logmessage = await _configurationProvider.GetSetting("SearchLogMessage");

            try
            {
                var results = await indexClient.Documents.SearchAsync<SearchResultModel>(text, parameters);

                log.LogInformation(string.Format(logmessage, text, latitude, longitude, kmdistance, results.Count.ToString()));

                return results;
            }
            catch (Exception ex)
            {
                log.LogError(ex.Message);
                log.LogError(ex.StackTrace);
                throw ex;
            }
        }
    }

And set the “SearchSearchDnsSuffix” to “search.azure.us” for government, and it all immediately worked.

Weekly Links – 5/4

Weekly Links – 5/4

So Happy May 4th, and May the 4th be with you! This is the well documented nerd blog, there would be something wrong if I didn’t make a star wars reference today.

See the source image

Down to business…

Fun Stuff:

Being May 4th, let’s keep star wars going, very excited to see Rise of Skywalker land on Disney Plus. I didn’t get to see this in theatres but will be watching it tonight, very excited.

Log Analytics – Disk Queries

Log Analytics – Disk Queries

So Log Analytics is a really powerful tool, the ability to ingest a wide variety of logs can help you to really build out some robust monitoring to better enable your application. And this ultimately enables the ability to build out robust dashboards.

Now I recently had to do some log analytics queries, specifically around disk statistics to monitor all the disks on a given machine. And if your like me, you don’t write these queries often so when you do it can be a process.

Now a couple of things to note about log analytics queries that matter, especially KQL. The biggest and most important being that order of operations matter. Unlike SQL, when you apply each clause this is a lot closer to using a | in Linux than a “where” clause in SQL. You need to make sure you use the right clause as it can make things a lot harder.

So anyway, here are some queries I think you’ll find helpful:

All Disk Statistics:

Perf 
| where ObjectName == "LogicalDisk"
| summarize Value = min(CounterValue) by Computer, InstanceName, CounterName
| sort by CounterName asc nulls last 
| sort by InstanceName asc nulls last 
| sort by Computer asc nulls last 

% Free space – Graph

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "% Free Space" and InstanceName != "_Total" and Computer = ""
| summarize FreeSpace = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by FreeSpace asc nulls last 
| render timechart

Avg Disk sec / Read – graph

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Avg. Disk sec/Read" and InstanceName != "_Total" and Computer = ""
| summarize AvgDiskReadPerSec = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by AvgDiskReadPerSec asc nulls last 
| render timechart

Avg Disk sec / Write

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Avg. Disk sec/Write" and InstanceName != "_Total" and Computer = ""
| summarize AvgDiskWritePerSec = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by AvgDiskWritePerSec asc nulls last 
| render timechart

Current Disk Queue Length

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Current Disk Queue Length" and InstanceName != "_Total" and Computer = ""
| summarize CurrentQueueLength = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by CurrentQueueLength asc nulls last 
| render timechart

Disk Reads/sec – graph

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Disk Reads/sec" and InstanceName != "_Total" and Computer = ""
| summarize DiskReadsPerSec = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by DiskReadsPerSec asc nulls last 
| render timechart

Disk Transfers/sec – Graph

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Disk Transfers/sec" and InstanceName != "_Total" and Computer = ""
| summarize DiskTransfersPerSec = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by DiskTransfersPerSec asc nulls last 
| render timechart

Disk Writes/sec – Graph

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "Disk Writes/sec" and InstanceName != "_Total" and Computer = ""
| summarize DiskWritesPerSec = min(CounterValue) by InstanceName, Computer, TimeGenerated
| sort by DiskWritesPerSec asc nulls last 
| render timechart

Alert = % Free Space Warning

Perf 
| where ObjectName == "LogicalDisk" and CounterName == "% Free Space"
| summarize FreeSpace = min(CounterValue) by Computer, InstanceName
| where FreeSpace < 20
| sort by FreeSpace asc nulls last 
| render barchart kind=unstacked
Book Review – The Infinite Game

Book Review – The Infinite Game

So I’ve been trying to do more reading, and this book in particular got my attention after this video was referred to me.

I particularly found this interesting because if you watch the video. It discusses the differences between an infinite strategy and a finite strategy. And it struck me because to be honest I had been explaining to friends the differences between board games and TableTop Roleplaying Games. And more importantly, I saw the implications of this with regard to a career. Business / Technology is a game that will continue long after I am gone, and to build anything worthwhile it would require movement in that direction from a strategic perspective.

So after that I heard that Simon Sinek wrote a book that went into this more:

See the source image

What I found interesting reading this book?

For me the interesting part of this book was that it put forward a mathematics based theory, that attempts to model human behavior. And I find some of this completely fascinating. But more than that I found the original premise, of the infinite vs the finite strategy to be something very telling. And one of the things I love about my current position is that it affords the ability to to see a bigger picture than I used to, and the opportunity to see beyond the technology to the broader picture and to focus on a mission.

What is the difference between “Finite strategy” and “Infinite strategy.”

Now I’ve mentioned this a couple of times. So what is a “Finite strategy”, and an “infinite strategy.”

A Finite game, is a game that meets certain types of parameters and must be played as such. In a finite game, the following elements are true:

  • All players are none.
  • The conditions to “win” are transparent and clearly defined.
  • All rules are defined and agreed upon up front.
  • The duration of the game is defined.
  • A clear “winner” is defined at the end.

The best example of a Finite game I can think of are sports. Take hockey for example. A set number of players for two teams are set to play with the game starting at a specific time, and ending at a specific time. Because of this there is a very specific set of strategies that needs to be implemented to win.

Now an Infinite game, creates a very different situation, and requires that it be handled very differently. In an infinite game.

  • Players are both known and unknown, and can enter and leave the game at any time.
  • The conditions of “Winning” are to be able to continue to play the game.
  • Rules are both written and unwritten.
  • The duration of the game is infinite.
  • A player wins by creating a scenario where they continue to play the game. This requires creating situations that support maintaining the will and resources to continue.

The important part of this is the “Will and the Resources” to continue playing the game. In an infinite game setting, the goal is to stay in the game, and part of it is the realization that there will always be a competitor, and that you can’t ever assume you’ve “won” the game in any way.

A great example of this I find is the example of business. The business world doesn’t end. There is never a circumstance that says “Oh well Company X won…everyone time to go home.” The landscape of the game is always changing.

A perfect example of this is the COVID-19, situation around the world. The important part of this is to remember that the game conditions are changing at all time. But the companies that are going t o weather the storm are the ones who can make adjustments and flex their strategy to survive.

Why does this matter?

if you look at the companies and individuals that are most successful, they all focus on their values, and trying to continue to drive towards a goal / calling that helps them to keep the will in the game. And by having this longer term vision, and a clear mission the companies and individuals out there that embrace an infinite mindset and strategy are able to make the right adjustments to do what’s required to see that mission successful.

Final Thoughts?

I really enjoyed this book, and I found it to provide some very interesting ideas and insights that really forced me to question traditional thinking. Simon Sinek has this great ability to take these concepts and present them in such a way that they come off as mind-blowingly obvious. I definitely recommend this book overal.

Weekly Links – 4/27

Weekly Links – 4/27

So I know this post got out a little late today, and for that I do apologize. Home schooling has been interesting at our house. Its definitely been a transition for everyone involved. But overall its been going well. My kids have been real troopers. My wife is the most amazing woman on the planet, and has been the expert in all of this.

My daughter has setup a desk in my office, so its nice to think that during COVID, my home office has basically become a Wework.

See the source image

Down to business…

Fun Stuff:

So I’ve made no secret of my enjoyment of Outside cooking, and over the past two weeks I’ve done a lot of work with my Weber smoker. And this past week turned out great. I went from a small chicken, to a 11 lb Brisket! And then 12 hours later, we had an amazing meal.

Cloud Networking and Security

Cloud Networking and Security

Now here’s a fun topic I wanted to share, as I’ve been looking more and more into this. When many people think of the cloud, in my experience the ideas of networking and security are what has changed so vastly compared to what they think of in a normal circumstance.

At its core, there is a mindset shift between the way on-prem data centers, and cloud based networking function. And its important to remember these fundamental differences or else you run into a variety of problems down the road. It’s easy to get overwhelmed to be honest, and I don’t mean for this to seem complete by any stretch of the imagination. But you have to start somewhere right.

The most important thing to remember is that some elements of security just don’t apply anymore, at least not in the traditional sense. And here are some of those concepts:

  • Perimeter Security is not what it used to be: This is the hardest thing for a lot of people to realize, but everyone still tries to cling to these notions that the only way to secure a workload is through locking down every public endpoint, and build a perimeter around your application, and then call it a day. Do a search online of the number of companies who implement perimeter security practices and how many times it blew up in their face. Security Threats, attack vectors are always changing and to consider the idea that you can build a fence and that’s good enough is just ridiculious.
  • Authentication / Authorization are the new IP address: Another situation that I see all too common with the cloud is people clinging to IP whitelisting. IP Whitelisting is not sufficient for many of the more sophisticated attackers any more. And to be honest, your preventing yourself from taking advantage of cloud based services that are more secure than what you are capable of implementing yourself. The idea of Zero trust has been growing more and more, and here we assume that no sending is safe, without credentials. This ensures better security overall.
See the source image

So what do we have to look at to start. I wanted to provide some ideas of potential areas to focus when it came to security for the Cloud and those options are here.

  • Here is a quickly consumable “Best Practices” for IaaS workloads for security.
  • Additionally there is a link to security documentation for azure, and this provides a lot of details on different topics and questions.

And here is a reference on the Microsoft Shared Responsibility model for Security.

  • Network Security Options:  Here is a list of options for network security.
  • Network / Application Security Groups:  NSGs are a great way of limiting the traffic within a virtual network.  But additionally in this space, we provide service tags, which allows you to manage the different azure services you might allow to communicate for rule creation.  Things like “AzureTrafficManager”, “VirtualNetwork”, “Sql”, “Storage”.  Additionally there is an option with Application Security Groups (ASGs), which enable you to configure the NSGs to be based on the application architecture. 
  • Virtual Network Service Endpoints:  This provides an option to extend your virtual network private address space to Azure services without traveling the public internet.  So the intention here would be, I want my machines to access “KeyVault”, but I don’t want it to be accessible outside of the vNet.  This is important as it allows you to further lock down your networking and access.
  • Virtual Network Peering:  As you identified in your network diagram, you were implementing two virtual networks.  If you want communication to occur across the different virtual networks, you would need to implement vnet peering to enable that traffic. 

Ultimately as I mentioned above, Zero Trust security models are really the direction of the future from a Cyber Security direction. A great site that covers the idea of Zero trust, and all the considerations can be found here. As well as a great whitepaper here.

https://www.secureworldexpo.com/hs-fs/hubfs/meme-cybersecurity1.gif?width=600&name=meme-cybersecurity1.gif
AI / Analytics Tools in Azure

AI / Analytics Tools in Azure

So when its comes to Artificial Intelligence in Azure, there are a lot of tools, and a lot of options and directions you can explore. And AI is a broad topic by itself. But that being said I wanted to share some resources to help if you are looking for some demos to show the “art of the possible” or tools to start if you are a data scientist or doing this kind of work to help.

Let’s start with some demos.  Here are links to some of the demos that I find particularly interesting about the capabilities provided by Azure in this space.

  • Video.AI : This site allows you to upload videos and run them through a variety of cognitive / media services to showcase the capabilities. 
  • JFK Files : This is one of my favorites, as it shows the capabilities of cognitive search with regard to searching large datasets and making for a good reusable interface for surfacing some of the findings of things like transcription. 
  • Coptivity : Here’s a link to the video for CopTivity and how the use of a modern interface is interesting to law enforcement. 

Now when its comes to offerings in this space, there are a lot and its always growing but I wanted to cover some at a high level that can be investigated quickly.

Cognitive Services : This includes azure services that are more using APIs to provide AI capabilities to your applications without having to build it yourself.  These include things like Custom Vision, Sentiment Analysis, and other capabilities.  Here’s a video discussing it further. 

DataBricks : DataBricks is a great technology for generating the compute required to run your Python, and Spark based models and do so it a way that minimizes the management demands and requirements placed on your application. 

Azure Machine Learning : Specifically this offering provides options to empower developers and data scientists to increase productivity.  Here’s a video giving the quick highlights of what Azure Machine Learning Studio is.  And a video on data labeling in ML Studio.  Here’s a video about using Azure Machine Learning Designer to democratize AI.  Here’s a video on using Azure Machine Learning DataSets. 

Data Studio : Along with tools like VS Code, which is a great IDE for doing Python and other work, we do provide a similar open source tool called Azure Data Studio, which can help with the data work your teams are doing.  Here’s a video on how to use Jupyter notebooks with it.  Additionally VSCode provides options to support this kind of work as well (video). 

Azure Cognitive Search:  As I mentioned above Search can be a great way to surface insights to your users, and here’s a video on using Cognitive Search. 

Azure Data Science VM: Finally, part of the battle of doing Data Science work is maintaining all the open source tools, and leveraging them to your benefit, the amount of time required for machine configuration is not insignificant.  Azure provides a VM option where you can create a VM preloaded with all the tools you need.  Azure has it setup for Windows 2016, Ubuntu, CentOS. And there is even have a version built around Geo AI with ArcGIS.  There is no additional charge this, as you pay for the underlying VM you are using but Microsoft do not charge for the implementation of the data science tools on this. 

I particularly love this diagram as it shows all the tools included:

Now again, this is only scratching the surface but I think its a powerful place to start to find out more. I have additional posts on this topic.

See the source image
Weekly Links – 4/20

Weekly Links – 4/20

So this weekend, I was able to actually get out and use the smoker I’ve had for a while and no time to use. I am a huge fan of outdoor cooking, and have been grilling for years. To the point that my kids know that “Dad’s night to cook” means a grill is involved. And a while ago I got a smoker but our lives were always too busy to use it.

For those of you who have never used one (there will be a blog post about my first time). But it can take a long time. But totally worth it.

Down to business…

Fun Stuff:

As I mentioned, I did use my Smoker for the first time this weekend and it worked out great. Below is the video I used for the “how to” of using a smoker. For those interested check it out, it really is the best one i’ve found that explains the process.

How to pitch an idea! And make them actually want to do it.

How to pitch an idea! And make them actually want to do it.

So I wanted to do another post on soft skills, and this is one has really been top of mind lately, as I was in a situation where I had to pitch an idea to several key decision makers, and had to structure it in such a way as to make them want to adopt it.

So this post your going to see several tips on how to pitch this idea to gain the most support. And to be honest, I see this as one of those essential skills that for a career, as everyone has ideas. And ideas are great but they only move from the planning phase to reality if you are able to gain support. This is ultimately just as true for junior devs as it is for CEOs. You can’t force people to adopt ideas (you can try, but it usually fails). Ultimately you need to be able to pitch an idea to move it forward.

See the source image
Let’s avoid this!

Without going into specifics, I was pitching a new process to benefit customers. And as such had to prepare and assemble that presentation to help get support for this idea to move forward. And it occurred to me, how much I’ve learned over the years from crashing and burning on this kind of thing, and I thought I’d pass this along to you.

So let’s talk about pitching that idea…so you’ve come up with the next amazing idea, something you want to change that you think is going to benefit your entire workplace. So what do we do now? Where do we start?

Step 1 – Ask the 3 questions.

This is honestly the hardest part because it can put a lot of doubt on yourself, but its important. Before you do anything else, based on your idea you just had I ask 3 questions of myself.

  • What is the problem I’m solving?
  • Is this a problem worth solving?
  • Is my idea actually going to solve it?

Now the above questions are hard, if you use them correctly when proposing an idea. Because things like “Yes because it drives me crazy” is not enough in most cases to justify the effort.

The simple fact is this, you only have so many resources, and the people you are proposing ideas to also have resource constraints on them as well. So at the end of the day, you have to make sure this is worth pursuing.

So what I mean here is looking at the overall scope of the problem, and if its worth doing. And would this idea actually solve the problem.

Here let me give you an extreme example, but it illustrates the point. When I was a younger junior dev, I had been working on internal applications for use at a company to automate internal processes. We like any dev shop would move forward with new technologies as we could. So at the time, and I’m dating myself, we had just moved to the wonderful new world of MVC. So nothing was worse as a dev, than having to step back into the older applications to do maintenance once, maybe twice a year and deal with Web Forms.

So like any junior dev, I came up with the idea, we should rewrite it. And I put together a pitch and presented it to the dev manager, and it crashed and burned so hard it was spectacular. And here’s why, I didn’t ask the 3 questions, if I had I would have found the following:

1.) What is the problem I am solving?

Well I want to rewrite this older application, that is extremely stable, used infrequently, and I have to spend about a week of my year working on.

2.) Is this problem worth solving?

If I do an estimate it would take about 3 months to completely rebuild this application from scratch, and most of the existing code could not be reused, and that’s not including testing effort and risk attached to the new code.

3.) Is my idea actually going to solve it?

Yes and no, it will bring it in line with our other applications, but the application is used infrequently, and it probably another few years we will need to do this again. Now I can architect it for more code reuse, but there will still be effort.

If I’m being critical, and asking these questions…this idea fell apart pretty fast. And to be honest, the people you pitch to are likely going t o ask these questions first and foremost, so you should ask them to yourself to start.

Step 2 – Make sure the idea is fully baked?

This is the hardest step to me, its taking a step back, and playing “Devil’s advocate.” Making sure that you are able to “battletest” this idea in your own head. Because here’s the thing you need to accept…change is hard. So if your idea is going to have any hope of seeing reality, it has to be able to survive some scrutiny.

So how do you do that. I find you start asking questions, and some of those questions are going to be things like:

  1. Has this ever been attempted before?
    1. If yes, then how is this different?
  2. How much is this going to cost?
  3. What’s the return on investment?
  4. What kind of work would this idea demand to make it a reality?
  5. Do I think others will accept this?

Questions and being critical of your idea will ensure that you have done all you can to make sure the idea is fully formed. If you don’t do that, then the people you are pitching to, will feel like you are wasting their time.

Step 3 – Solicit Feedback from people you trust

Honestly, this is important. Find people you trust, and make sure they are in different positions, and have different perspectives, and dry run your idea by them. Feedback will help you come up with questions you never thought to ask before. And they can only help you strengthen your idea.

But this step only works if you accept the feedback, and don’t get defensive. If you ask for feedback, give a lot of thought to everything that comes back and don’t blow anything off. They are trying to help not pick at you. Don’t take feedback personally or get defensive. No one is attacking you.

Step 4 – Structure / Rehearse the pitch

If you are going to pitch an idea, make sure you take the time to figure out the “How?” of pitching the idea. How will you present the idea? How are you going to address everyone involved?

During this step its important to take a step back and think about the people who you will be pitching to. Look at how they respond and how they like to be addressed or have information presented to them.

And above all, be mindful of time. If they are giving you a gift of their time, don’t waste and don’t take more than they are willing to give.

The next couple points will be more on the “How” when it comes to structuring your idea.

Step 5 – Make sure you get to “Why should you care” early.

The most important thing to get to early in your presentation, is “Why should I care?” And to be honest, I usually actually title my first slide that. It gets attention immediately, and if you don’t hook them with a reason to care, they likely won’t.

So what do I mean by “Why should I care?” If you want people to consider supporting your idea, it needs to be meaningful to them. And it pays to know your audience here.

If I’m talking to a Finance Manager, and start with “And by implementing this new technology we can expand the amount of capabilities we offer.” – Odds are they don’t care. But if I start with “By adopting this new technology I can generate a 30% savings with a 10% investment and save us $_______,” I’ve immediately gotten their attention.

Or the ever popular, “By not doing this we are wasting $________, a year”, and I can bet they will be laser focused on everything you have to say.

So make sure you start with why they should care, and then they are more likely to hear the other things you want them to.

Step 6 – Make sure you explain how your idea will solve the problem.

I’ve been on the receiving end of presentations like this, and honestly I’ve seen people do step 5, and they then explain their idea and say “Any questions?” With the “Why should I care?” statements, you are essentially throwing down the gauntlet. After doing that you better, in-very-short-order, turn around and say how your idea will solve that problem.

Don’t assume your audience will immediately see it. Everyone has different perspectives, and might not see the connections the same way you do.

Step 7 – Make sure to describe the return on investment

If they move forward with this, and they put their time and energy into your idea, what is going to come back to them. There needs to be a return on their investment for them to get behind you. So spend some time getting to find out what bothers or motivates the people you are talking to. How can you align your idea with what they want to accomplish to get further support.

Step 8 – Make sure you are “laser-focused” on the asks.

This is an area I usually struggle with, but its the most important. Before you pitch is over, make sure you have a moment where you say “Here’s the ask”. You’ve essentially done the following:

  • Identified a problem
  • Given us a reason to care
  • Told us your idea
  • Told us how it will solve the problem

At this point, the next question is “What do you need to get it done?” Let’s face it, if you could do it without their support, you should. So if your going to take their time, there has to be a reason. Or more specifically what do you need from them to make this a reality. Be very clear about these asks, call them out on a slide, or given a list, something that makes it very clear.

And avoid the common mistakes with asks. The most common I see / have done are the following:

  • Make sure its something they can actually do: I’ve been in meetings where as a Dev Manager I was told “And Kevin we want you to require that all projects leverage nuget in their solutions.” Now one problem, when I was a dev manager…I was 1 of 3, all at the same level. I had zero authority to follow through on that ask, even if I wanted to.
  • Make sure it is a specific ask: This is my favorite, and I am SO guilty of this. Way more than I’m willing to admit. But saying things like “And have your support to adopt this across the team.” What the hell does that actually mean? You leave the person you are pitching to questioning that and what you actually want. This is the equivalent of asking them to write a blank check, and that’s not going to happen. There needs to be a call to action for any movement. We are all busy people.

Final Tips

Now once you’ve done all this, you are ready to pitch your idea. During the pitch I have a few final tips to remember and keep in mind to set yourself up for success.

  • Be mindful of time: I’ve said this a couple of times, but its worth repeating. Time is a gift, use it wisely.
  • Be concise and to the point: Your pitch relies on you holding their attention, don’t ramble.
  • Make sure you are able to answer questions: There will be questions, don’t hide from them. Make sure you allow time for them, and answer them to the best of your ability. It’s ok to admit that you still need to figure something out. The honesty will pay off.
  • Your idea is not you: I can’t stress this enough, I’ve been in meetings where questions are asked, or weaknesses are being discussed in a new idea. And people get defensive. This will torpedo your idea faster than anything. No one will want to engage if you get defensive. So accept it and feedback to help.
  • Be honest with yourself and accept feedback: Everyone brings different perspectives, and the inclusion of those perspectives can only make the idea stronger. I had an idea that I pitched and felt strongly about, but it wasn’t exactly ground breaking. And I had a manager say in my pitch, “No offense Kevin, I love the idea but its not exactly brand new, but it is a variation we haven’t done before.” And in my youth, I would have gotten defensive. But I responded “You’re absolutely right, it isn’t groundbreaking, just a different approach.” And I could see a shift in the room, that they knew I could accept feedback and the conversation got much better and helped.
  • Take ownership and invest in it: Look, I’ve done it. You accept that you are going to pitch this idea, and then somehow they wave a magic wand and all of a sudden its a reality. Not true, and believing that you are going to hand over the keys to the people in this pitch meeting and walk away is a delusion. Don’t be afraid to take ownership of following up with key people, or doing parts of it. By investing in it yourself it will help them to want to invest as well. If you’re not willing to have “skin in the game,” they won’t either.

And with that, best of luck on your pitch!

See the source image