Sunday 7 March 2021

SaaS Product Customer Experience - level 101 Thoughts

Overview: With SaaS products is is easy for our customers to leave.  We need to reduce turnover/churn and technology can help to deliver great Customer Experience (CX).  CX is closely coupled with Customer Success.


Topics to Review:
  1. SLA's & OLA's
  2. Pricing: 
    1. per seat (subscription), 
    2. flat usage or 
    3. usage model (pay as you go).  
    4. Always keep it simple.   In B2B SaaS pricing keep it simple, aim for MMR, that clients understand for cost forecasting.  Make it easy to buy, increase/upsell and leave.  It's amazing how many companies try to hide the sale to reduce churn.  Build good products and service don't try hide exit so stop loosing customers, it's pointless and a poor long term strategy.  
    5. Tiered pricing is good, but keep it simple.  Try stick to 1 form of pricing, its aweful for the customer to have base usage costs and then some crazy secondary model to figure out and explain in the purchasing process.
    6. Companies want Monthly Recurring Revenue (MRR) or ARR and the ability to up sell later.  It depends on the nature of the business and product but monthly should be the default goal especially for B2B SaaS.
    7. Offer a free trial for E2E fairly long is not a bad idea depending on the product.  Two weeks is a rough starting point.  Less if you need them engaged quickly or even several months to get real value.  I tend to find E2E customers with free software don't tend to use it unless their is a limited time.  So I'd always limit to 1 month for a free trial. you can always extend.
    8. Freemium version may be useful (unlimited time) and generally are not applicable to B2B/E2E SaaS models.
  3. Service Status Page - Microsoft do a great job at showing status pages for their services.
  4. Incident Management - Convert into knowledge base both internally and customer facing.  Sales and customer management information alignment.  Find a customer, see their past requests, help reduce churn. service now incident management,   Generally, go for tech touch for interaction over low touch or even high touch.  In E2E, large customers want good tech touch but will require high touch, specifically around customization.  Beware the small customer demanding high touch for their "future potential growth/usage".
  5. Content - product documentation, community forum, online knowledge base, ability to have a good search to cross all the channels (think Coveo), support chat bots, live conversations with support.
  6. Certifications, "gamification" useful for building a community. 
  7. Communicate new features, educate support, educate sales and evangelists and clients.  Training and consultancy.  Monitor communication, use Sentiment Analysis.
  8. Support level i.e. free support may not allow phone conversations and not have an SLA whereas premium support may offer 24 hour production issue resolution with money back guarantees.  Example: Azure Support Plans.  Phone is expensive for support, do we offer this 24/7 and having good support is costly.  People are becoming more familiar with digital self service.  It is also a good idea to have a  warm hand-off from automation to a person.
Getting your processes correct and clear is key to your Digital customer experience (CX).  Key areas to consider: 
  • Advertising/attracting clients, converting leads to clients;
  • Trials and paying (make it easy, cost effective, billing) - customer must understand what they are paying for;
  • First time user experience (easy good experience the client can use);
  • Habitual users (once use to the system, do my users have the best experience - get usage telemetry); and
  • Support (levels of support, chat bots, email, call support).
Thoughts: SaaS world changes so quickly these days, great customer experience and support are more important than ever.  An interesting idea I heard, "You can loose a customer on price or customer service, you will only win them back thru customer service".  (KYC) Know Your Customer to ensure you can delight your customer and comply with AML rules.  Get one step ahead, try understand your customers concerns early.

There is a great book that has been around for a few years on Customer Success by Nick Mehta, Dan Steinman, and Lincoln Murphy.  How innovative companies are reducing churn and growing recurring revenue.


.NET versions no longer supported

Update 1 Feb 2022:  For new projects use .NET6 (Core) it needs VS2022.  Don't use any versions of .NET framework (last release was 4.8) or .NET standard (last release was 2.0).

Problem:  The client has several existing .NET applications/products.  These products are running on Azures Service Fabric, which has been developed over several years.  Service Fabric applications have various .NET core and .NET framework versions, and many of the apps have gone out of Microsoft support for the .NET version they are written on.

Initial Hypothesis:  We have .NET framework and .NET Core apps.  .NET Core 5.0 has dropped the "Core" part of the naming, so it is merely .NET 5.   .NET framework came first, and the last version was .NET framework 4.8.  .NET Core is the follow on and .NET Core 3.1 next version has the name chnge to .NET 5.0.  The "Core" part is dropped.  Lastly, .NET Standard is often used by software companies to write dll's. Only class libraries are allowed, but any .NET framework or .NET core projects can reference them.

  • .NET Framework - 4.8 was the latest release version
  • .NET Core became .NET - Last was 3.1 but renames to .NET 5 which is the latest version
  • .NET Standard - Class projects only

Proposed Resolution: My preference is to upgrade .NET core and .NET Framework separately as this is the lowest risk, most extended life with minimized cost. 

 .NET Core

For .NET Core apps, if less than .NET core 3.1 migrate the app to .NET 5.  .NET Core 3.1 don't upgrade.  Any other versions should be upgraded to .NET 5. 

Version

Release date

Released with

Latest update

Latest update date

Support ends[20]

.NET Core 1.0

2016-06-27[21]

Visual Studio 2015 Update 3

1.0.16

2019-05-14

June 27, 2019

.NET Core 1.1

2016-11-16[22]

Visual Studio 2017 Version 15.0

1.1.13

2019-05-14

June 27, 2019

.NET Core 2.0

2017-08-14[14]

Visual Studio 2017 Version 15.3

2.0.9

2018-07-10

October 1, 2018

.NET Core 2.1

2018-05-30[15]

Visual Studio 2017 Version 15.7

2.1.26 (LTS)

2021-03-09

August 21, 2021

.NET Core 2.2

2018-12-04[16]

Visual Studio 2019 Version 16.0

2.2.8

2019-11-19

December 23, 2019

.NET Core 3.0

2019-09-23[23]

Visual Studio 2019 Version 16.3

3.0.3

2020-02-18

March 3, 2020

.NET Core 3.1

2019-12-03[24]

Visual Studio 2019 Version 16.4

3.1.13 (LTS)

2021-03-09

December 3, 2022

.NET 5

2020-11-10[25]

Visual Studio 2019 Version 16.8

5.0.5

2021-04-06

3 months after .NET 6 release


 
.NET Framework

For .NET Framework, anything less than .NET Framework 3.5, move to 3.5.  3.5 Framework based apps can stay on 3.5.  For app using .NET Framework 4.0 to 4.5.1 upgrade to .NET framework 4.8.  For app using .NET 4.5.2 to 4.7, stay on their versions.

Version

Existing Application Support

Target New Applications?

1.x

out of support - migrate ASAP

out of support - do not target

2.x

out of support - migrate ASAP

out of support - do not target

3.x

out of support - migrate ASAP

out of support - do not target

3.5

 Operating System (until 2029) 

Operating System (until 2029) target with caution

4.0 to 4.5.1

out of support - migrate ASAP

out of support - do not target

4.5.2 to 4.7

⚠️Operating System (mixed) - review support policy of each version

Operating System (mixed) - target with caution

4.8

 Operating System (indefinite)

 Operating System (indefinite)


.NET Standard


Sunday 28 February 2021

Uploading custom Teams Backgrounds


Instructions on how to Add a personalized meeting Background to your MS Teams Meetings and Calls.

Steps:

1.> Open Microsoft Teams, and click the "Chat" button, start the call to 1 or more people

2.> Select "More Actions" (Three dots)

3.> Click "Apply background effects"

4.> Select "Add new"
5.> 
Upload your customised background image

6.> Select the "Apply" button.  All future calls shall have the same background as the default background for all subsequent Team calls.

Note: Your Teams background may appear backwards to you.  The background will will display correctly to everyone else on the call

Friday 26 February 2021

Shopify Teams meetings backgrounds

Overview:  I like to use a custom background in my Zoom and Teams meetings as I don't need to worry about what people and clients can see in my home.  We used Shopify to sell digital good (the customized meeting backgrounds).  

Solution:  Users can select a background that the rights had been purchased for.  Then could upload the company logo and add their name. It makes a pretty cool background effect and we used Shopify to create a online shop to allow people to order.  Originally we planned to use a ReactJS application on Azure for the creation and ordering but Shopify had a plugin that stored all the digital assets on AWS for $10/month.  Coupled with Shopify's low fees it was better to keep the whole system under Shopify.

Shopify also provides Channel/Sales buttons that you can place on blogs and websites.  They get pretty advance as shown below.

Problem:  Customers, originally we planed to sell each customise image for about the price of a cup of coffee ($5, £4).  The hard part was finding a way to get customers and convert them into paying customers.  Also as you generally only use 1 image their is no returning customer to offset the cost of acquisition.  Adwords proved nonviable, the cost of attracting customers was way in excess of  the return.  Also convincing people to input credit card made the  conversion rate even more difficult to make Adwords a viable option.

Summary:  Shopify is a great ecosystem and I have setup a couple of stores using it now.  It is fast, customisable, well thought out, great for a new starter.  It has tons of plug-ins, lots of free and purchasable themes/templates.  There is a lot of documentation, and a lot of expertise to help out.  We used Fiver for some scaling on my theme as i couldn't get the scaling 100%, easy to find and they person helped me right out.  In the end, a good experience, Shopify is awesome and easy.    

Friday 12 February 2021

APIM debugging, tracing, monitoring tricks and tips

Debugging APIM requests from Visual Studio code 

Has an extension for debugging APIM.

Azure API Management - Visual Studio Marketplace


It's also useful to have a APIM requesting/client extension installed

Tracing APIM

To get a full trace add the HTTP header "Ocp-Apim-Trace: true" to the request and the response shall contain a URL to retrieve the trace information.




App Insights for APIM
Logs in three places:
  1. Incoming requests (come into APIM)
  2. Dependency request (go to backend/outgoing)
  3. if an exception occurs it is also logged in App Insights
So logging can be set at either the global or API level.
Setup in APIM > Monitoring > Application Insights (link APIM to the App insights Logger).

Documentation Tips

Ensure you fill in relevant descriptions and summaries.  It's also key to provide examples.  

https://swagger.io/docs/specification/adding-examples/

My Technical Working Notes for Microsoft Technology: APIM OpenAPI Specification Documentation Example within the Developer Portal (pbeck.co.uk)

APIM documentation updates on the Developer portal (after re-publishing).  It has a great UI, but ensure the summaries are added for param/attributes to get a truly rich integration set of documentation (it will save so many questions and time).   I also like to add a getting started guide, keep it short and simple and most importantly have a simple explanation of security/authentication and connectivity.

- in: query
  name: age
    schema:
      type: integer
      maximum: 3
    examples:       # Multiple examples
      max: # Distinct name
        value: 3   # Example value
        summary: The age is dependent on dob, min is 0, can't be negative 

Thursday 28 January 2021

Encryption Options for Azure SQL

Overview:  With all IT storage, we are looking for encryption at rest and making sure the data is encrypted “over the wire” until it is stored storage.  For encryption in transit, Azure SQL supports TLS/SSL versions 1.0, 1.1,and 1.2.  If possible got for TLS 1.2.

Azure SQL Server Transparent Data Encryption (TDE) related to encryption at rest by encrypting the log and data files on the storage; Azure enforces TDE as the default on databases.  TDE can be turned off on your Azure SQL instance.  The disks that the database files and backups are block encrypted automatically by Azure.

Backups should also be encrypted, and if TDS is enabled on Azure, your backups are also automatically encrypted.  Tip: Validate your restore of Azure Backups to another instance.

Column encryption is useful for encrypting a column within a table.  I prefer to use a Key Vault and use a SQL column to point to the database for things like tokens and secrets, but something like credit card numbers column encryption is ideal.

Always Encrypted allows for one or more columns to be encrypted within a database.  Client application shall decrypt and provides for separation where database owners/access cannot validate/view the encrypted column/columns.

Encryption at Rest on Azure SQL Server (PASS) Summary:

  1. Disk Encryption - Always can't change
  2. TDE - Server-Side - On by default (can be turn off)
  3. Column level encryption - Server-Side (Needs configuration, encryption done inside SQL for columns)
  4. Always Encrypted - Client-Side.  Columns are encrypted inside the db and only the application can unencrypt the column.

Wednesday 27 January 2021

Tree Testing and Heuristic Reviews - Ux for dummies

I was speaking to two Ux experts in a meeting and they referred to Tree Testing when discussing Information Architecture and the users working there way around a new SaaS product.  "Tree Testing" is not a term I had heard before so they showed me this site and it fantastic.

https://www.optimalworkshop.com/learn/101s/tree-testing/

I'm more familiar with Heuristic Reviews - that I find useful for improving UI/UX using an iterative approach that suits Agile nicely.