Wednesday, November 11, 2015

Nansen Stockholm- kontorsliv

(Swedish) Kära besökare. Vi på Nansen gillar att dela med oss av både mjuka och hårda värden och även låta er ta del av högt och lågt vad gäller vad vi sysslar med. Fluffiga ord som inte alltid är lätta att konkretisera. Idag så ska jag dock ge er ett exempel på viktiga detaljer som vi brottas med men vars innehållsvärde kanske inte ligger högst upp på skalan.

Vi har haft en jobbig vattenläcka på stockholmskontoret vilket medför en del olägenhet just nu. Ett rör har stått och läckt en längre tid vid en av toaletterna och det har varit hantverkare här som hållit på och rivit ner väggar och golv. S ånu står det fläktar och torkar ut en del av lokalen. Fläktarna brummar en del och därför vill vi gärna ha stängt mellan den delen av lokalen och där vi sitter och jobbar i kontorslandskapet så folk slipper ådra sig tinnitus som arbetsmiljörelaterad skada.
Dörrhelvetet som ska dras igen krånglar dock lite och den är lite trixig att stänga igen. Genierna här på Nansen är dock inte bara jevvligt skarpa på att koka webb, vi är även rätt vassa på att skapa pedagogiska lappar och instruktionsvideos. Så, naturligtvis löste vi dörrstängningsproblematiken genom att sätta upp en otroligt pedagogisk lapp samt en instruktionsvideo för hur man går tillväga för att på ett korrekt sätt stänga dörren trots att den är lite kajko.





Friday, October 9, 2015

"Koka webb" in progress

What you see here is actually a rockstar and a sailor discussing some very intricate system architecture structure stuff at Nansen HQ, Stockholm. This is what we call "koka webb"
.

Friday, October 2, 2015

Timeout exception during PageTypeBuilder update - DefaultValueType need a companion

TL DR; On a page property in PageTypeBuilder (PTB) - If you have DefaultValueType = DefaultValueType.Value, you must have DefaultValue set to something. Otherwise your site might cause timeout on startup while PTB does it’s thing.

Background


The last months we've had problems with a clients test environment (EPiServer 6) regarding nasty timeouts while PageTypeBuilder does it's update on site startup. I spent some time cleaning the page types from missing/conflicting sort index on properties and removed tons of old page types that weren't in use anymore.

The issue


After the above mentinoed optimization, it felt like the startup ran smoother, but it was all an illusion. Every startup when PTB ran it's update, we got this exception:
Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
At first I assumed it was network related since the hosting provider have had problems during this period with their firewall and other network issues.

The solution


After I configured EPiServerLog.config to log level ALL, I began to see the truth.
Just before every timeout error there was the same page property, over and over again.

2015-10-01 13:54:46,383 DEBUG [39] PageTypeBuilder.Synchronization.PageDefinitionSynchronization.PageDefinitionUpdater.UpdateExistingPageDefinition - Updating PageDefintion, old values: Name: AddressSlimInfoText|Type:|EditCaption:Prenumerationen registreras på din..|HelpText:|Required:False|Searchable:False|DefaultValue:|DefaultValueType:None|LanguageSpecific:False|DisplayEditUI:True|FieldOrder:1120|Tab.ID:166|,new values: Name: AddressSlimInfoText|Type: |EditCaption:Prenumerationen registreras på din..|HelpText:|Required:False|Searchable:False|DefaultValue:|DefaultValueType:Value|LanguageSpecific:False|DisplayEditUI:True|FieldOrder:1120|Tab.ID:166|.
I navigated to the code for page type that had this property and saw this:
[PageTypeProperty(EditCaption = "Prenumerationen registreras på din..",
   Type = typeof(PropertyString),
   Tab = typeof(PurchaseFlowAddressSlimTab),
   DefaultValueType = EPiServer.DataAbstraction.DefaultValueType.Value,
   SortOrder = 1120)]
public virtual string AddressSlimInfoText { get; set; }

Took a while before I saw what was different from the other properties. This:
DefaultValueType = EPiServer.DataAbstraction.DefaultValueType.Value
But no DefaultValue was set.

I corrected this and then updated the test environment. Still got the same error, but now the log told me about the next property that had the same issue, and the next and the next etc.

So I had to go through all the page type properties in the code that used DefaultValueType and check to see if it had the matching DefaultValue or not.

When this was done, took a while, the site has about 100 page types and I found about 10-15 properties that had to be corrected, I updated the test site again and tried to trigged the timeout.

But alas, there was none.

Wisdom


It seems weird that this causes a timeout, there should be an ArgumentException or something further inside the EPiServer.DataAccess-assembly that actually does the page definition update. So when you set DefaultValueType to Value, you have to set DefaultValue to something

For us I think it was a combination of unstable network environment and time consuming PTB update that triggered this timeout. As a developer, at least you can give PTB the best possible conditions so it runs as smooth as possible.

Anywho…  if you have weird timeouts on an Epi 6 site. Check the obvious PTB mistakes such as duplicate/missing sort index etc, but also check the DefaultValueType/DefaultValue pairings.

Thursday, September 17, 2015

Getting Visual Studio intellisense to play nice with RequireJS

I was trying to get the intellisense to work in my javascript files in my ASP.NET MVC project, for which i'm using RequireJS and here's how it all worked out.

Working with _references.js

Visual studio is using a file called _references.js to grant you the wisdom of intellisense in JavaScript files. First off, we need to make sure we have our _references.js file where Visual Studio can find it. By default Visual Studio will search for this file in the location "~/Scripts/_references.js" if your'e working with a web project. However if your scripts-folder resides in a different area of your project you can easily change where Visual Studio looks for this file.

Options → Text Editor → JavaScript → IntelliSense → References

In the dropdown called "Reference Group" choose "Implicit (Web)".

If you're interested you can read more on the history of _references.js here http://madskristensen.net/post/the-story-behind-_referencesjs



Configuring _references.js for RequireJS

I was reading up on the subject on at https://msdn.microsoft.com/en-us/library/dn904583(v=vs.120).aspx) but i was having issues with how the path was resolved to my RequireJS modules. So my scripts wasn't loaded correctly. 
While reading the debug messages in the output window for JavaScript Language Service, saw from where Visual Studio tried to load my files, C:\Program Files (x86)\Microsoft Visual Studio 14.0\JavaScript\References\require.config.

The solution was to configure the basePath for RequireJS in the _references.js file, and after RequireJS will handle the dependencies you have in your modules and Visual Studio will grant you IntelliSense.

Code

/// <autosync enabled="true" />
/// <reference path="Vendor/require.js" data-main="main.js" />

require.config({
baseUrl: '~/Assets/Scripts/'
});


Decorate your scripts with comments

In Visual Studio 2015, Microsoft has added support for JSDoc. Which is a documenting/comment syntax, and if you use it you get really sweet intellisense in correlation with _references.js. So instead of just getting what functions and properties an object might have you also get information of parameters and types if you choose to write it. Visual Studio also has support for xml based comments to complement your intllisense, but personally i prefer JSDoc.

You can read the documentation of JSDoc at http://usejsdoc.org/

E.g. creating a module like this will grant you the intellisense of the picture below.

Code

/**
* AWESOM-O
* @module modules/awesomo
*/
define('modules/awesomo', [
'underscore'
], function(_){
'use strict';

return {

/** Will return a random number between 0 and 100. */
randomNumber: function(){

return _.random(0, 100);
},

/**
* AWESOM-O will try to give you medical help
* @param {string} bodyPart - The bodypart in need of medical assistance
*/
giveMedicalHelp: function(bodyPart){

return 'Um, actually A.W.E.S.O.M-O is not programmed for that function.';
}
};
});

Result



Happy coding.

Thursday, June 25, 2015

Offline, can not save EPiServer 7.x

We recently started getting an odd error message whenever we edited a page. EPiServers auto save functionality was throwing an error in the console




POST http://mysite.local/episerver/cms/Stores/contentdata/ 500 (Internal Server Error)”.

We searched the internets for some clues about what could be wrong. Many posts hinted about page properties beeing missmatched with the settings in the database





Further digging into the logs we found this

Here’s the stack trace:
[InvalidOperationException: This request has probably been tampered with. Close the browser and try again.]
   EPiServer.Framework.Web.AspNetAntiForgery.ThrowForgeryException() +374
   EPiServer.Shell.Services.Rest.RestHttpHandler.ProcessRequest(HttpContextBase httpContext) +109
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +913

   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +165

and

ERROR - 1.2.5 Unhandled exception in ASP.NET
System.InvalidOperationException: This request has probably been tampered with. Close the browser and try again.
   at EPiServer.Framework.Web.AspNetAntiForgery.ThrowForgeryException()
   at EPiServer.Shell.Services.Rest.RestHttpHandler.ProcessRequest(HttpContextBase httpContext)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

ERROR - Cross-site request forgery detected [Client IP: XX.XX.XX.XX, Referer: http://mysite.local/episerver/CMS/#context=epi.cms.contentdata:///317, Url: http://mysite.local/episerver/cms/Stores/contentversion/, User: UserName]

although, the error that led us to the solution was this little fella

"the required anti-forgery cookie __requestverificationtoken is not present"

It turns out that we had marked the cookies as secure (as we all should) with the configuration setting
<system.web><httpCookies requireSSL="true" /></system.web>


But we were accessing the site with http. So the real underlying error was that last one, “the required anti-forgery cookie __requestverificationtoken is not present”. The site was requesting secure anti-forgery cookies but was getting standard unsecure cookies, thus the tampering exception

The solution, query the site with https or change the setting to requireSSL=”false”

Monday, June 1, 2015

EPiServer Digital Experience Cloud nyheterna

EPiServer Digital Experience Cloud DXC avtäcktes i slutet i förra veckan. Den nya paketeringen av EPiServer CMS, kundupplevelsehantering, digital marknadsföring och e-handel är riktad mot den nya tidens sälj- och marknadsinriktade organisationer som senaste året lärt sig utnyttja molnet för fördelar som enkel upprättning, flexibel skalbarhet och agil hantering av nya behov hos sina kunder.

Plattformen som tjänst erbjuds numera i pakteringar riktade sig mot de fyra målgrupperna:

  • Professional
  • Group
  • Corporate och 
  • Enterprise

Integrationsmotorn Digital Experience Hub (DXH) ingår numera i produkten och kopplar an till system som Marketo, Salesforce Marketing Cloud (ExactTarget), Microsoft Dynamics CRM, Google Universal Analytics, Hubspot och Salesforce Sales Cloud (Pardot).

Dessutom finns omfattande förbättringar inom Content Staging samt Content collaboration för effektivare samarbete kontor världen över.

Hör gärna av er om ni är intresserade av att veta mer om den nya plattformen.



Wednesday, May 20, 2015

Getting started with CXM - The User Journey Purchase Loop

No one is like the other 
In Sweden four large new pharmacies was founded exactly the same day. The first of July 2009 was the first day when deregulated non-government owned pharmacies was allowed in the country.

None of the new pharmacies had any time consuming legacy that day. No existing marketing plans, no previous IT-systems setup, specific digital marketing consultancies contracted nor any other general policies guides up and running.

Not even those four companies, founded at the exact same moment, should try to copy each other’s customer experience strategy.

Even if two competitors are in the same business, have the same clients, goals and means – successful customer experience management has turned out to be something absolutely unique.

 The management of a customer experience is much more than a market and a product. It boils down to one company’s:

• General marketing ambitions
• Basic knowledge of analysis
• Will to quickly adapt and..
 • Type of contracted and employed staff as well as hierarchies

However there are some aids to help you get started. Nansen will go through some of them here!

User Journey Purchase Loop
The definition of the customer journey has long been looked upon as a good start for Customer Experience strategy definition. One of the second best templates to originate from is the User Journey Purchase Loop.

A great and modern look into how the purchase process and the decision making steps within a buy rolls out. The sum of all interactions with a customer. Answers when the customers will feel and ask questions like "Be transparent", "Reward me", "Make it easy", Earn my trust" and so on.

A broad definition, open for each CXM-interested company to adapt and make their own. And once completed possible to plan for, target analytics and KPI:s towards as well as marketing automation. Therefor really useful. Take a look!


Tuesday, May 12, 2015

Localize Property Name Based on Content Language

We recently had a client request that a page property have a different display name for each language branch.  The function of the property was as an identifier and would always be used the same in the back end but the editors in each country had a different name for the property.

This isn't a particularly inspired solution, but I'm hoping to save someone else the time it took to stumble upon this.

It is possible to localize EPi property names using the built in Display attribute and keeping the translations in resources files (see this stackoverflow post here), but this is only based on the UI language in Edit/Admin mode and not on content language.

I created an EditorDescriptor that will take the string entered in the Name field and try to translate it using the registered LocalizationService (whatever that may be).  An important thing to note is the EditorDescriptorBehavior.  We have to have it as EditorDescriptorBehavior.PlaceLast to ensure that any other logic to get the Display Name (built in translation, etc) does not interfere with what we want displayed.

Code


[EditorDescriptorRegistration(TargetType = typeof(String), UIHint = SiteUIHints.LocalizedDisplay, EditorDescriptorBehavior = EditorDescriptorBehavior.PlaceLast)]
public class LocalizableDisplayEditorDescriptor : EditorDescriptor
{
   public override void ModifyMetadata(ExtendedMetadata metadata, IEnumerable<Attribute> attributes)
   {
      base.ModifyMetadata(metadata, attributes);

      Attribute attr = attributes.FirstOrDefault(a => a.GetType() == typeof(DisplayAttribute));
      if (attr != null)
      {
         string translated =                                     

             ServiceLocator.Current.GetInstance<LocalizationService().GetStringByCulture(metadata.DisplayName, 
             FallbackBehaviors.None, ContentLanguage.PreferredCulture);

         if (!string.IsNullOrWhiteSpace(translated))
            metadata.DisplayName = translated;
      }
   }
}



Usage

[UIHint(SiteUIHints.LocalizedDisplay)]
[Display(Name = "/properties/InternalId/displayname", Order = 200)]
public virtual string InternalId { get; set; }

Monday, April 27, 2015

Web site infrastructure security

Google Chrome has started to show sites that still uses the old SHA-1 cipher as not verified.  https://support.servertastic.com/deprecation-of-sha1-and-moving-to-sha2/

 

Sites with SSL certificates that expire before January 1, 2016 won’t be affected, but sites with certificates that expire later will need to have their certificates reissued.

Early 2015 – Chrome 41: Sites with end-entity certificates that expire between 1 January 2016 and 31 December 2016 (inclusive), and which include a SHA1-based signature as part of the certificate chain, will be treated as “secure, but with minor errors”.
Sites with end-entity certificates that expire on or after 1 January 2017, and which include a SHA1-based signature as part of the certificate chain, will be treated as “affirmatively insecure”. Subresources from such domain will be treated as “active mixed content”. The current visual display for “affirmatively insecure” is a lock with a red X, and a red strike-through text treatment in the URL scheme.”

Last month we had an issue with a customer site regarding this issue and some others more concerning issues. It all started as the customer had some unwanted publicity when the site was rated F by the ssllabs validation tool. It turns out that the infrastructure guys had missed was to turn on TLS 2.0 support and to disable the SSL V1-V3 and RC4 cipher on the web front servers and for the load balancers that terminates the SSL traffic. Along with a weak SSL certificate that uses SHA-1. This was bad news, but also things that where very easily fixed and the customer is at a considerable better, A- rating.

The remedies for this is to


There are more things you can do proactively to protect your sites. Some things must be dealt by the IT org. but some things can be done on the servers.

Check out this links:

PEN test your site

https://asafaweb.com/

Other PEN testing tools

PEN test the infrastructure

https://www.ssllabs.com/ssltest/analyze.html

http://www.pluralsight.com/courses/owasp-top10-aspdotnet-application-security-risks

OWASP

Is a great resource for web security. Here you can find almost everything you'l ever need regarding web security.

Cheat sheet

https://www.owasp.org/index.php/.NET_Security_Cheat_Sheet

And Troy Hunt has a great Plurar sigth course, top 10 ASP.NET list to check

http://www.pluralsight.com/courses/owasp-top10-aspdotnet-application-security-risks

This is how you disable exessivve response headers

http://www.troyhunt.com/2012/02/shhh-dont-let-your-response-headers.html

<system.web>
  <httpRuntime enableVersionHeader="false" />
</system.web>

The MVC version is also easy, although it does require us to touch code. Over in the Global.asax, we want to jump into the Application_Start event and add the following:

MvcHandler.DisableMvcResponseHeader = true;

I hope these tips can help you get a more secure site.

Tuesday, March 31, 2015

EPi Initialization Modules: A Practical Guide

If you've been working with EPi 7 or 7.5 (or even 8 for you early adopters), you've most likely created an initialization module.  For a thorough introduction, this link is a good resource. While they are really extensible, I've run into a few hiccups during development and would like to share some (hopefully) time saving tips.

Debugging

Debugging has proven to be quite a headache for me whenever I create an initialization module since I don't do it very often and always forget how I was able to do it the last time. Since you need to be attached to the debugger while the site is initializing, many common forms of debugging don't work very well (if you are using traditional IIS and not IIS Express). I've seen a couple blog posts on this topic, but none have worked for me (because it's for an older version of EPi or because it recycles the whole app pool).  

Here is the easiest way I've found to quickly and easily debug my initialization modules:

1. In your Initialization module, add this line where you would like the debugger to break

System.Diagnostics.Debugger.Break();

2. Using Visual Studio's Debug > Attach to Process menu, attach to all of the w3wp processes.  This makes sure that you are still attached to the process running the initialization even when you restart the site in the next step.



3. In IIS, restart the website you'd like to initialize

You should see your break point hit and be able to debug your initialization module now.  If you know a better way to accomplish this, please let me know in the comments! This has been the simplest solution I've found.

InitComplete

In EPi's documentation, they mention that the InitComplete event's "typical use case (also featured in EPiServer Community) is to attach event handlers to an instance property that may be overridden by third-party code."

Another use case for InitComplete is if you need to access the Start page of your site or any other site specific properties.  These are only available after the site has been initialized.

One "gotcha" to keep in mind, is that you must have the wild card site binding in order for the initialization module to properly find your Start Page.  Otherwise, ContentReference.StartPage returns an empty content reference.



Do you know of any other tips when developing initialization modules? Let me know in the comments!

Monday, March 30, 2015

How agile is reviving the marketing industry

"Best practice" has been a mantra that many in the marketing industry have depended on over the last few years. On first glance it makes sense: sticking to what has - in the past - been proven to yield the most effective results seems like a guaranteed strategy for future success. 


But “past” is the key word. Progress requires that we make new discoveries - and if we always do what we have done in the past, the future will look very similar. 

For outstanding success going forward, we need to find new ways of doing things; we need to forge solutions, not follow them. 

This is not going to be achieved by following best practice.



Monday, March 16, 2015

Wintercamp II – Day 1, arriving

The second Wintercamp took place at Koppars on the 11-14 march 2015.

Feedback from last years’ Wintercamp was that we should decide and prepare some themes and projects prior to going up to Koppars.

So, when we, the 20 people from the Chicago, Stockholm, and London offices drove up to Koppars, there were six themes pre-baked and everyone felt roughly prepared for what was going to take place.



The idea behind Wintercamp is to unite people from all the offices and create, code, build, write, hang out, cook, and spend some time together outside of client projects. 

There are no rules except :

  • 1. We do Wintercamp stuff from 09.00-17.00 - even though it was really hard to get people away from the keyboards before 20.00 sometimes :-)
  • 2. We do a short demo of the progress each day at 17.00.


We arrived at Koppars just outside Järvsö. The place is at the shore of river Ljusnan and consists of one main building and a few smaller. Once settled in we started off with lunch, a brief intro to all the themes.

Koppars is located just next to the Ljusnan river and it's a beautiful place in the wintertime. 

Lunchtime day one.

Theme briefing

This is the pre-defined themes we wanted to dive deeper into at the wintercamp:

New Nansen.com


Initial wireframe for the news Nansen.com

This is the big one! It’s the most demanding theme since it will be the replacement of the current Nansen site that has existed for three years.

The goal was to leave Koppars with very, very well worked version 0.96 of the site. Everything had to be created from scratch.

GUI for Blueprint prototype tool


Proof of concept for the prototyping GUI is built in Umbraco.

Last year we refined and continued to build upon our prototype framework Blueprint. It is now in such a mature state that we have decided to try to build a graphical interface for it so that we UX:ers and designers can create prototypes without having to touch HTML and CSS. 

NAPC 2015 conference app


Photo-feed in the NAPC conferance app.

This is a theme initiated by the Chicago office. The idea is to dive into Xamarin, a framework where you build native apps for iOS, Android, Mac, and Windows, and build an app for our yearly internal Nansen NAPC conference. This year the conferance will be held in Chicago and will include staff from all our offices; Stockholm, London, New York and Chicago. The app will house travel information, speaker/session schedules, photo-stream so that the attendees can get the most out of the conferance.

Create templates for our new PRINCE2 project management process




The project management team has been working with our new project process Nansen NEXT. We are integrating the PRINCE2 project methodology with the agile development process. The work involves creating project management templates, and defining which work is done when.

"Concept" section for our client preview area




We have a Preview.nansen.com domain where our clients can login and access the visual design and prototypes that we build for them. But one thing that has been missing is a section where we can summarize concept and strategy for the clients projects. Goal is to get this in place.

Automatic style guides




We all love style guides! In a few projects we have drafted a style guide tool that automatically generates them for us from our LESS, SASS, or CSS files. At this Wintercamp it was time to refactor it, structure it a bit more seriously and integrate it more deeply with our Preview-area and the Blueprint framework.  

Friday, March 13, 2015

Digital consumers don't experience what we expect

A new eConsultancy Digital marketing report about what consumers find really important online vs. what we as an agency finds important contained some groundbreaking facts.

Our view of the consumers’ digital experience doesn't always correlate with their own.



Especially the -70% factor regarding how consumers request "information about your account" support and the -65% difference regarding the importance of "account details" is remarkable. Integrity aside, a digital solution never seems to become too relevant for users. Worth keeping in mind.

Also, the 106% difference between "social touch points", the 72% on a tablet and the 128% smartphone are interesting numbers.

The report featured 1500 respondents and was published in February2015.

Vi är överallt, iallafall i Järvsö, Vemdalen och Austin Texas

Det händer otroligt mycket hos oss just nu. Inte bara när det gäller kunder och projekt.
Här på Nansen så försöker vi, förutom att koka riktigt bra webb, även att ha kul tillsammans och även vidareutveckla oss. Så vad händer just nu då undrar ni?

Vi skyfflat iväg 22 personer, från våra kontor i London, Chicago och Stockholm, till vår årliga wintercamp uppe på gården Koppars i Järvsö. Där är tanken att vi ska skapa en massa nyttiga och coola verktyg, proccesser och material som vi använder i vår dagliga verksamhet.
Grejer som tex vårt prototypverktyg Blueprint och vår plattform Encore filas det på. Saker som våra kunder får nytta av i våra projekt sen. Men även interna grejer tas fram.
Följ hasthtaggen #napc på twitter och facebook för massa fina bilder och intressanta posts från wintercampen!

Vi har även ett gäng sköningar som är uppe och åker skidor och bräda i Vemdalen denna helg. 10 vintersportare intryckta i en trevlig stuga. De kanske inte producerar en massa coola verktyg, men de bygger väl nån slags broar tillsammans...who knows?

Markus Bereflod och Joe Grause från vårt chicagokontor är just nu iväg på SXSW Interactive i Austing, Texas.

Vi andra som inte åker nerför pisten i Vemdalen, är på wintercamp i Järvsö eller konferensar i Austin Texas håller ställningarna här hemma. Jag köpte iaf glass till oss som var kvar här på kontoret och faktiskt såg till att det kokades lite webb åt alla våra kunder.

/Rudde

Friday, February 13, 2015

Så börjar allt arbete med CXM, kundupplevelsen. Praktiska exempel från Nansen



På Nansen fick vi den första förfrågningen om att föreläsa och om kundupplevelser, Customer Experiences eller CXM redan för 3 år sedan. Sedan dess har vi dissekerat ämnet på Webbdagarna, Hyper Island och Berghs samt skrivit krönikor i Resumé.

Än idag tolkas den välanvända akronymen på helt nya sätt. Synen på vad som ingår i hanteringen av en digital och fysisk kundupplevelse förändras. Så må vara, det är ett brett begrepp och praktiska tillämpningar är fortfarande ovanliga både i Sverige och internationellt.

Men efter att jobbat med CXM för Telia.se, Electrolux och många fler av våra kunder har vi några handfasta tips att bjuda på.

Samt en absolut grundregel: Vet ni inte - så vet ni inte.

Det finns ingen CXM-checklista. Det finns inget färdigt CXM-paket. Inte ens något definitiva fakta framtagna för er bransch.

På pappret kan ni vara väldigt lika er närmsta konkurrent. Sett till omsättning, målgruppsfokus och geografisk spridning. Men ändå så är ni ändå inte det.

Ni har helt olika hierarkiska organisationer, olika system, olika säkerhetspolicies och olika syn på hur projekt ska drivas. Det gör att ni inte kommer veta hur ni ska få de olika digitala delarna med innehåll, kommers, analys, befintliga och nya data samt alla kopplingar dessa emellan att fungera. Inte innan ni faktiskt testat.

Det finns bara ett sätt att påbörja ett CXM-arbete. Genom att starta någonstans.

Tänk er en tårtbit. Ett tvärsnitt rakt in på er webbplats. Där hittar ni på sidnivå två eller tre en relativt viktig sida med en typ av konvertering. Kanske ett köpavslut eller ett formulär ska ska fyllas i. Utgå från den. Bygg in profilering med CRM-kopplingar, marketing automation triggers, tät analys, A/B-test och få in alla e-handelskopplingar till just den sidan. Bara den.

Sedan väntar ni. Sedan analyserar ni. Sedan förbättrar ni. Sedan börjar ni om. Sedan för ni ut erhållna kunskaper på fler sidor, kanske en nivå upp i trädet. Mät igen. Förbättra igen osv.

Några månader fram kallar ni till ett ledningsmöte och redovisar alla resultat. Därefter kommer ni finna er i en situation där ni både får medel, all teknisk tillgång och framförallt beslutsrätten att välja ett system framför ett annat inom organisationens tekniska stack.

Men börja med mandatet att förändra just den där sidan på nivå två eller tre. Det är så upplevelsearbetet börjar.

Wednesday, February 11, 2015

Fyra nya GAIQ!

Grattis till Tove, Jens, Robert och Steve som igår tog certet Google Analytics Individual Qualification, GAIQ. Nansen har nu totalt 13 stycken certifierade GAIQs.

Läs mer här på vår facebooksida