Thursday, 2 February 2023

Customer DT

In digital transformation there are four primary pillars of value:

  • Customer expectations
  • Operations
  • Employee experience
  • Business models
The fundamental pillar of any business is the customer, without them, it is impossible to operate, for they exchange their money for an organizations product and/or service. Without customers any organization large or small, this is why generally the greatest opportunity to add value through a digital transformation is through the customer experience.


Attracting and retaining customers is at the heart of any business and hence at the heart of any digital transformation. Customers are expecting more digital offerings with each year, customers no longer expect a business to have website, and a social media presence, customers now expect virtual agents to answer simple queries, customers expect contactless payment and delivery of their purchase within the same business day if not the next.

Businesses in the coming years will either embrace digital, or be eclipsed by those who do. To remain relative, organizations must apply the principles of customer experience design, similar in principle to user experience design but much broader in scope. Where user experience design focuses on user experience of a particular service or product, Customer experience design focuses on the customers experience with the organization as a whole, each touchpoint, each product, each service must have a consistent and delightful experience, with continuality, if a customer begins a journey with one product as the move between channels their identity and progress must move with them.

To map a customer journey a customer experience designer needs to leverage the same soft skills that a UX designer needs, empathy and creativity to map out the customers journey. The customer journey map is a complex representation of how a potential customer transitions to a loyal customer, it is far too complex and unique to each organisation to create a generic one-size fits all solution. However at macro level, there are five main stages, Awareness, consideration, acquisition, service, loyalty.




These stages are unique to each individual channel, however each channels experience must be as consistent between channels as possible. Each potential and loyal customer must feel that regardless of channel their journey is familiar, simple, and most importantly delightful. Acquiring new customers is valuable, however retaining customers is priceless. 

Each channel touches multiple departments sometimes differently per leg of the customer journey, per channel, understanding these touch points and which department is responsible per channel per leg is essential to providing the maximum customer care, satisfaction and conversion from potential to loyal customer.


Before an organisation can convert a potential customer to a loyal one, it must fist identify the potentials ones, not every person or business is a potential customer. Expending resources on unlikely customers, is a waste which could be better utilised on potential customers. Customer experience designers leverage various experience research techniques to identify and model potential customers to best understand, who they are? where they are? what they want? and any potential pain points that the customer journey needs to address and relieve to successfully acquire a loyal customer.

Wednesday, 1 February 2023

Digital disruption

Digital disruption happens when one organisation leverages technology to fundamentally change the way an industry works while gaining a competitive advantage, often times resulting in taking a industry or market lead, leaving the competition struggling for survival. Digital disruptors accomplish this by providing more value to customer at a lower capital and labour costs, generally by leveraging technology. 

The past twenty years is rife with such examples:

  • Netflix went from a small niche DVD mail service to the market leader.
  • Apple went from a failing computer hardware producer to leading the smartphone revolution.
  • Amazon went from a small online book retailer to completely revolutionizing the way customers purchase everything from books to toothbrush's to timbre.

Netflix vs Blockbuster

Netflix was founded in 1997, originally, the company offered a direct DVD-by-mail rental service where customers would order DVDs online, and the company would mail the DVD's to the customers' homes. In 1999, Netflix introduced a monthly subscription service where customers could rent an unlimited number of DVDs for a flat fee. This was a significant disruption to the traditional video rental industry, which relied on physical storefronts.

In 2000, Netflix proposed a partnership with Blockbuster, the largest video rental chain in the world at the time, to handle its online operations. Blockbuster declined the offer, believing that the online rental market was too small to be of any value. This decision would prove to be a critical mistake, as Netflix grew rapidly in the following years and would ultimately put Blockbuster out of business.

In 2007 Netflix introduced its streaming service, allowing customers to watch movies and TV shows instantly on their computers. This revolutionized the entertainment industry, it provided customers with a convenient and affordable way to access an enormous library of content without ever leaving their homes. As the streaming industry continued to grow, Netflix invested heavily in producing original content, such as the critically acclaimed series House of Cards and Stranger Things. This move cemented Netflix's position as the leading streaming service and further accelerated its growth, while Blockbuster continued to struggle with declining revenue and increasing debt. In 2010, Blockbuster filed for bankruptcy, and its remaining stores were eventually sold off to other companies.

Apple vs Research in motion 

In the early 2000s, Research In Motion (RIM) was the dominant player in the smartphone industry, thanks to their Blackberry line of devices. Blackberry's unique selling point was its secure email and messaging system, which made it a favorite among business professionals. At the time, Blackberry had a large and loyal customer base, and it was widely believed that RIM had a stranglehold on the smartphone market. However, the emergence of Apple's iPhone in 2007 quickly disrupted the industry and began to dethrone RIM.

When Apple introduced the iPhone, it was unlike anything the world had seen before. It had a large, high-resolution touchscreen display, a sleek design, and a user-friendly interface that was easy to use. The iPhone quickly gained a following, and soon it was clear that it was a game-changer in the smartphone industry. Apple's App Store also gave developers a platform to create innovative apps that enhanced the user experience, and this was a major factor in the iPhone's success.

RIM failed to adapt to the changing market, and its products quickly became outdated. The Blackberry's design remained largely unchanged for years, and the company was slow to adopt touchscreens and other new technologies. In addition, RIM's focus on enterprise customers meant that it missed out on the growing consumer market for smartphones. As a result, RIM's market share began to decline rapidly, and by 2013, it was clear that the company was no longer the dominant player in the smartphone industry.

Amazon vs the world

Amazon started in 1994 as a small online bookstore founded by Jeff Bezos in his garage. His goal was to create an online store that could offer more books than traditional brick-and-mortar stores could. Bezos saw the potential of the internet and the convenience it could bring to the shopping experience. With a focus on customer service and efficiency, Amazon quickly expanded its offerings beyond books, adding CDs, DVDs, and other items. The company was profitable within its first two years and went public in 1997.

Over the years, Amazon has continued to innovate and disrupt the retail industry. The company has expanded its offerings to include nearly everything under the sun, from electronics to groceries, and has become one of the most valuable companies in the world. Its success is due in part to its focus on customer experience and convenience, such as its Prime membership program which offers free shipping, streaming of movies and TV shows, and other benefits. Amazon has also invested heavily in technology, such as artificial intelligence and robotics, to streamline its operations and improve efficiency.

Today, Amazon is one of the largest retailers in the world, with a market capitalization of over $1.5 trillion. It has transformed the retail industry, forcing brick-and-mortar stores to adapt or risk becoming obsolete. Amazon's success has inspired countless entrepreneurs and startups, and has forever changed the way people shop. Despite criticisms of its impact on small businesses and concerns over its dominance in the market, there is no denying that Amazon has revolutionized retail and set a new standard for customer experience and convenience.

Digital Transformation

Digital transformation is the integration of digital technology into business models and processes, resulting in changes to how an organisation operates and delivers value to employees and customers alike. It enables organisations to take advantage of new opportunities created by digital technologies, leading to improved processes, enhanced customer experiences and increased competitiveness. In essence digital transformation leverages technology to optimise and often times redefine business models to provide more value to customers as well as employees.

Some of the benefits of a successful digital transformation can include:

  • Shorter process times
  • Faster time to market
  • Cost reduction
  • Increased revenue
  • Customer loyalty 
  • Employee retention
  • Reputation gain
  • Competitor advantage

Sound's great right? If it was only that easy, Digital transformation is not a simple or straightforward process. It involves a significant shift in organisational culture, processes, and technology. It requires a deep understanding of technology, data, and customer needs, as well as the ability to adapt to changes in the market. Additionally, implementing digital solutions often involves a large investment of time, resources, and money. It also requires overcoming resistance to change from employees, stakeholders, and customers. Overall, digital transformation is a complex journey that requires careful planning, execution, and continuous improvement.

Due to its complexity, digital transformation requires expertise to successfully implement. Experienced professionals must analyse and understand the current state of the organisation, where it needs to be in the future, conduct a gap analysis between the two states, and develop a plan for bridging that gap. This includes not only implementing new technology and processes, but also managing the change to ensure adoption and buy-in from customers, stakeholders, and employees. The digital transformation team must also be able to identify and manage any potential roadblocks, risks, and challenges that may arise during the transformation process. Without this level of expertise, the digital transformation process is likely to stall or fail, resulting in missed opportunities and wasted resources. Hence, having the right expertise is crucial in ensuring the success of digital transformation.

To help guide an organisation, we can follow the digital transformation compass, a twelve step representation of an organisational digital transformation journey. These twelve steps will minimise risk and cost during a transform while maximising engagement and chances of success.

There are four main phases to a digital transformation journey, they are:
  • Framing the digital challenge: In the first leg of our Digital Transformation journey the champions: 
    • 'Build awareness' throughout their organisation that change is possible, they raise awareness of digital opportunities as well as threats to their business. A classic example of an organisation ignoring digital threats and opportunities is Blockbuster.
    • 'Know your starting point', organisation must take an honest look in the mirror, they must understand there own digital level of digital majority. Before an organisation can properly prepare and have realistic goals in mind, they must first assess where they are. This understanding is crucial in forecasting budgetary as well a time requirements for a successful digital transformation.
    • 'Craft a vision and align a top team', before an organisation can begin their journey, they need to have a clear vision of their destination and the right team to get the organisation there. The transformation team should be a cross-functional team with representatives form every impacted group within the organisation working with transformation experts who can ensure a successful journey. The transformation team along with the cross-functional representatives form the vision that will drive and guide the digital transformation.

  • Focusing investment: In the previous leg, the organisation assessed if they needed a digital transformation, where they are in their journey, where they want to go and who's going to get them there. Now it's time to plan the journey and acquire the the resources and governance needed to successfully compete the digital transformation.
    • 'Translate your vision into action': Now that you have an understanding of where your organisation is and where it wants to go it's time to build a roadmap of how to get there. 
    • 'Build your governance': Establish a clear framework for decision-making while ensuring accountability for the results. Effective governance will help to ensure the transformation aligns with the overall business strategy, stays within budget, and meets regulatory requirements. 
    • 'Fund the transformation': With a digital transformation team, goal, governance and plan ready to move forward, it's time to allocate an appropriate amount of resources to see the transformation through to a successful end.

  • Mobilising the organisation: While the the transformation team executes the transformation plan, it is up to the 'Change management team' along with the support of the initial transformation champions and the management of the organisation to clearly communicate the transformation progress and impact to the organisation to lead by example and be the early adopters of the digital change.
    • 'Signal your ambitions': Leadership should communicate early and often with the organisation, how the transformation is going, howe each individual and their role will be enhanced by the change, how their role will improve.
    • 'Earn the right to engage': Leadership along with change need to walk the talk, they need to demonstrate that they are adopting the change in their day-to-day, that it is a positive thing for the organisation as well as the individual.
    • 'Set new behaviours & evolve culture': Leadership must identify key stakeholder and support them into becoming early adopters within their organisation and support them in their transition, these early adopters will lead the charge and show their colleagues the benefits of the transformation.

  • Sustaining the digital transition: Once the transformation is implemented, it is not yet complete, the organisation, must now foster an environment of adoption, to ensure that all of the effort put into the transformation is not wasted.
    • 'Build foundation skills': The organisation, must support the individuals with the training required to leverage the new ways of working to maximise their investment.
    • 'Align incentives & rewards': Individuals as well as groups should have incentives to adopt the new ways of working, change is difficult and without value to the individual will not be adopted. Incentivise and reward change.
    • 'Measure, monitor & iterate': track KPIs to ensure that the organisation is benefiting from the transformation, and iterate when and where appropriate.


Saturday, 7 January 2023

Blob Storage Info

Azure Blob storage is Microsoft's object storage solution for the cloud. Blob storage is optimized for storing massive amounts of unstructured data. Unstructured data is data that does not adhere to a particular data model or definition, such as text or binary data. It is ideal for flat-files, images, videos and sound files.

Though there are four types of Blob storage types: Standard general, Premium block blobs, Premium page blobs, and Premium file shares; odds are you are going to need the standard general.

Storage account type Supported storage services Usage
Standard general-purpose v2 Blob, Queue, and Table storage, Azure Files Standard storage account type for blobs, file shares, queues, and tables. Recommended for most scenarios using Azure Storage. If you want support for NFS file shares in Azure Files, use the premium file shares account type.
Premium block blobs Blob storage Premium storage account type for block blobs and append blobs. Recommended for scenarios with high transactions rates, or scenarios that use smaller objects or require consistently low storage latency.
Premium page blobs Page blobs only Premium storage account type for page blobs only.
Premium file shares Azure Files Premium storage account type for file shares only.

Each of the types has 3 tiers of access:

  • The Hot access tier, which is optimized for frequent access of objects in the storage account. The Hot tier has the highest storage costs, but the lowest access costs. New storage accounts are created in the hot tier by default.
  • The Cool access tier, which is optimized for storing large amounts of data that is infrequently accessed and stored for at least 30 days. The Cool tier has lower storage costs and higher access costs compared to the Hot tier.
  • The Archive tier, which is available only for individual block blobs. The archive tier is optimized for data that can tolerate several hours of retrieval latency and will remain in the Archive tier for at least 180 days. The archive tier is the most cost-effective option for storing data, but accessing that data is more expensive than accessing data in the hot or cool tiers.
In all likelihood, the Hot access tier will be the most appropriate.

When accessing your blobs, there are basically levels of organisation:
  • Storage account: this is the url level, each storage account has their own unique URL, and it will look like "http://foobar.blob.core.windows.net", this is the top level url your blobs will sit at.
  • Container within the storage account, it can be thought of as a folder, you can have any number of them, but should probably ensure that they make some sort of sense, they can also be used to restrict access using permissions, so you may have one for flat files that's secured, but one for media that's public
    • http://foobar.blob.core.windows.net/data
    • http://foobar.blob.core.windows.net/images 
  • Blobs: the actual files you are storing inside your containers.

sdf

Friday, 6 January 2023

Web App Service

Now that we have our Resource group and App service plans set up, let's create a Web App service. A web app service can contain either a traditional web application such as on made using html or an API.

It's pretty straight forward, this time go to your resource group and create the 'Web App service' from there.



Then, as before select the create drop down at the bottom of the web app card and choose new 'web app'


Now this configuration is a bit more complicated


to select the previous plan that we created, our OS and region have to match, in our previous post we configured it to be west Europe and Windows at least in the PowerShell, these two properties filter which App service plans we can connect our web app service two, meaning that an App service and it's plan must be of the same OS type as well as in the same geographic region, however they do not have to be in the same resource group.

Before we create our application, go to the monitoring tab, this is because, by default app-insights is enabled, though this can be a useful service, it can also be a pricy one depending on your app usage, so I generally disable it.


Next, click the 'Review + create' button where you do one last final sanity check, make sure your spelling and naming conventions are correct and that you have the right plan connected to your web app, double check that cause it can prove to be an expensive mistake.


Now if we create our 'Web app service' we should see it in our resource group along with our app service plan (Assuming the app service plan is in the same resource, generally I like to distinguish between my environments by resource groups). 

With that done, as aways it's PowerShell time.


# create app service
function CreateAppService {
Param(
[Parameter(Mandatory = $true)] [String] $name,
[Parameter(Mandatory = $true)] [String] $prefix,
[Parameter(Mandatory = $true)] [String] $location,
[Parameter(Mandatory = $true)] [String] $environment,
[Parameter(Mandatory = $false)] [Microsoft.Azure.Management.WebSites.Models.AppServicePlan] $servicePlan,
[Parameter(Mandatory = $false)] [String] $servicePlanName)
$rgName = "rg-$name-$environment"
$appName = "app-$prefix-$name-$environment"
Write-Host "Createing $appName web app in $rgName resource group" -ForegroundColor Magenta
#check if web app already exists
$webApp = Get-AzWebApp -ResourceGroupName $rgName -Name $appName -ErrorAction SilentlyContinue
if ($webApp) {
Write-host "Web app ""$appName"" already exists" -foregroundcolor yellow
return $webApp
}
#create web app
try {
if ($servicePlan) {
$servicePlanName = $servicePlan.Name
}
$webApp = New-AzWebApp -ResourceGroupName $rgName -Name $appName -Location $location -AppServicePlan $servicePlanName
Write-host "App service ""$appName"" Created" -foregroundcolor Green
return $webApp
}
catch {
Write-error "App service NOT created" -ErrorAction Stop
}
}

# these guids will be unique to your Azure tenant and subscription
# fyi these are randomly generated and not my actual guids
$tenantId = "ba9ff786-e26a-4a09-ac62-412a0d1f1d76"
$subId = "d8cddcf7-1050-4524-89e3-28cea221fd80"

$azContext = Get-AzContext

if (!$azContext) {
Connect-AzAccount -Tenant $tenantId -SubscriptionId $subId -UseDeviceAuthentication
}

# create resource group
CreateAppService -name pav-example -prefix api -location westeurope -environment dev -servicePlanName plan-pav-example-dev

# Disconnect active account
Disconnect-AzAccount


Thursday, 5 January 2023

App Service Plan

An app service can be thought of as the runtime environment in azure for your application, it could be an API, or a web app or a SPA (Single page application, Angular, React, Vue.js, etc). However before we can create an App Service we need an App service Plan. 

An App service plan, can be thought of as the infrastructure for your application, as in all things in life, you get what you pay for, the more expensive the app service plan the more 'Horsepower' you have, the question you must ask yourself do I need a Porche to get my groceries... the answer is generally yes if you are a god damn douche-bag... otherwise just get a ford escort.

To set add a service plan to your Resource group click the 'Create a resource' button on the home screen of your azure portal.


this will bring up your 'Create a resource page, in the top search bar just search for 'Service plan'.


It should be the first search result look for 'App Service plan'


The fastest way to get started is to select the 'Create' drop down and choose 'App Service Plan', this will navigate you to the 'Create App Service Plan' page, here you'll have to specify some basic configuration.


Two things to point out, are one, to get the free tier for linux based OS you have to click the 'Explore pricing plan' link button and manually select it, and try to use a reasonable naming convention to make it easier on yourself later.

Next optionally if you like you can hit 'Next: Tags >' to add tags to your 'App Service Plan' unless you have 100 of resources, this may be a bit overkill. Just keep in mind like all things, before adding tags you should come up with a tagging strategy something that is repeatable and beneficial.

Whether you choose to add tags or not the final step is to click the 'Review + create' button.


Here you just do a final sanity check of what you are about to deploy, make sure your spelling is right, the pricing tier is correct, and create your application.

Once your plan is deployed, you can navigate to your resource group that you created earlier and do one last double check to make sure it is where you expect it to be.


And that's it, our App service plan is ready to go.

So that is all fine and dandy, however I generally prefer to use powershell to deploy all my infrastructure, hence the following 


# Create app service plan
function CreateAppServicePlan {
Param(
[Parameter(Mandatory=$true)] [String] $name,
[Parameter(Mandatory=$true)] [String] $location,
[Parameter(Mandatory=$true)] [String] $environment)
$rgName = "rg-$name-$environment"
$planName = "plan-$name-$environment"
Write-Host "Createing $planName ($location) app service plan in $rgName resource group" -ForegroundColor Magenta
#check if service plan already exists
$servicePlan = Get-AzAppServicePlan -ResourceGroupName $rgName -Name $planName -ErrorAction SilentlyContinue
if($servicePlan){
Write-host "App service already exists " -foregroundcolor yellow
return $servicePlan
}
#create service plan
try{
$servicePlan = New-AzAppServicePlan -ResourceGroupName $rgName -Name $planName
                                            -Location $location -Tier 'Free'
                                            -NumberofWorkers 1 -WorkerSize 'small'

Write-host "App service plan Created" -foregroundcolor Green
return $servicePlan
}
catch{
Write-error "App service plan NOT created: $Error[0]" -ErrorAction Stop
}
}


# these guids will be unique to your Azure tenant and subscription
# fyi these are randomly generated and not my actual guids
$tenantId = "ba9ff786-e26a-4a09-ac62-412a0d1f1d76"
$subId = "d8cddcf7-1050-4524-89e3-28cea221fd80"

$azContext = Get-AzContext

if(!$azContext){
Connect-AzAccount -Tenant $tenantId -SubscriptionId $subId -UseDeviceAuthentication
}

#create service plan
$servicePlan = CreateAppServicePlan -name pav-example -location westeurope -environment dev

# Disconnect active account
Disconnect-AzAccount

One caveat, by default the PowerShell command 'New-AzAppServicePlan' will create a Windows based app service plan, according to the documentation on MSDN, by appending the -Linux switch this should not be the case, however when I tried it, I kept getting an "A parameter cannot be found that matches parameter name 'Linux'" exception, kind of a pain in the arse, one day I hope to come back and figure that out.

Wednesday, 4 January 2023

Resource groups

Before we can configure just about anything in azure we need to create a 'Resource group' to hold our 'stuff'. If your are wondering what a resource group is in azure, you can think of it as a logical container for resources linked with your subscription. Basically it's a way to organise the things out deploy, those could be virtual machines, storage accounts, virtual networks, app services, app service plans, blob storage, etc. Basically any resource within azure must be stored within a resource group. One caveat is Azure services, they generally run at the subscription level, which is more ore less the thing you pay for.

To setup a resource group is pretty simple, log into your azure portal, and click the resource groups icon

you should see something like the following
I've blacked a few things out, for no particular reason, all of those details would be different for you anyway, the important thing is to click the create button.
once you've filled out all the mandatory details, you can add some tags if you like, this could prove useful especially if you are managing lots of resource groups and would like an easy way to filter them by, however you can always do it later... which is my favourite time to think of new key value pairs. 

Rather than expend mental energy thinking of good contrived tags, we're just gonna go ahead and create our resource group.
Let's click the 'Create' button and see what happens.... Shockingly, there's a resource group now listed with the name we provided.
We have our resource group, now that is good and dandy, now personally I prefer to script the creation of my Azure resources, so rather than going through the UI I can run a powershell script and create everything that I need. This way if i mess something up, I can just delete everything and start over. 


#create resource group
function CreateResourceGroup {
Param(
[Parameter(Mandatory=$true)][String]$name,
[Parameter(Mandatory=$true)][String]$location,
[Parameter(Mandatory=$true)][String]$environment)
$rgName = "rg-$name-$environment"
#check if resource group already exists
$resourceGroup = Get-AzResourceGroup -Name $rgName -ErrorAction SilentlyContinue
if($resourceGroup){
Write-host "Resource group already exists" -foregroundcolor yellow
return
}

#create resource group
Write-Host "Createing $rgName resource group in $location" -foregroundcolor magenta
Write-Host "With tags [application = $name; environment = $environment]" -foregroundcolor magenta
try {
$resourceGroup = New-AzResourceGroup -Name $rgName -Location $location -Tag @{Application=$name; Environment=$environment}
Write-host "Resource group created" -foregroundcolor green
write-host $resourceGroup
return
}
catch {
#failed to create resource group
Write-error "Resource group NOT created" -ErrorAction Stop
throw
}
}

# these guids will be unique to your Azure tenant and subscription
# fyi these are randomly generated and not my actual guids
$tenantId = "ba9ff786-e26a-4a09-ac62-412a0d1f1d76"
$subId = "d8cddcf7-1050-4524-89e3-28cea221fd80"

$azContext = Get-AzContext

if(!$azContext){
Connect-AzAccount -Tenant $tenantId -SubscriptionId $subId
}

# create resource group
CreateResourceGroup -name pav-example4 -location westeurope -environment dev

# Disconnect active account
Disconnect-AzAccount


this is the way I prefer to automate my deployments, there are other methods, namely config files you can use, and maybe one day I'll take the time to learn them.