Making CRM successful
By · CommentsThere are few technology projects that raise fear levels more than client relationship management. As CRM has grown in importance in the last decade, and the number of vendors in the field has broadened substantially, this area is renowned for its high profile failures and often-unimpressive ROI. I’ve managed a number of CRM projects and since the success rate of new CRM initiatives hasn’t improved much in the industry, I’d like to distill some advice in an attempt to help anyone out there attempting their own CRM deployment.
CRM is a strategy, not software
Starting with a particular software vendor rather than a set of strategic objectives tends to result in unnecessarily complex integration work and unhappy users. Deploying CRM requires a company to analyze its workflow and existing systems and look for areas of transformation in order to yield actual results. When CRM software is simply bolted onto a range of legacy systems, it usually causes duplication in workflow and reduces the buy-in from end-users. If you have a patchwork of existing data and systems – from users’ Excel spreadsheet up to corporate-level SAP platforms – you need to consider how to integrate or replace these up front.
Let the Project Manager manage the project
Since CRM cuts across silos and divisions, functionally-driven organizations are prone to having the biggest failure rate. It’s important to have a Project Manager empowered to use resources across divisions to have any likelihood of meeting the requirements of different divisions, and the strategic goals of the project should be realized to achieve milestones for every division involved. If CRM is created by the IT division and fostered onto the sales department without cross-divisional support, it simply won’t be used. A good Project Manager who is given authority to manage effectively will identify the scope of the project, have a much better chance of delivering within time and budgetary constraints, and achieving the overall goals as well as those for each stakeholder.
Workflow is critical
Organizations frequently have a series of informal workflow chains to create deliverables for their internal and external clients. These are usually not documented and proceduralized, but are well-understood by the subject matter experts at each stage. The front-to-back workflow within a company needs to be analyzed with the support of each group along the way before any decision is made about systems and software. When this is done correctly, CRM has a capacity for simplifying tasks, reducing workloads and creating rich management reporting. If the informal workflow is ignored, CRM becomes just another piece of corporate software that users ignore.
Managing Customer Relationships
Many CRM projects start with little or no customer involvement. If improving customer service and a desire to improve sales and client retention are the broad goals, it’s essential to find out from customers what they think about the organization’s strengths and weaknesses. In my experience, without exception, customers have provided feedback that has been critical to the success of CRM projects, and shown gaps previously not considered. Customers are often interested in improving multi-channel support (phone, web, email, etc.) and receiving more timely and higher quality communication from their vendors.
Don’t Under-estimate Data Cleanup
Since CRM projects almost never start from a blank state from a data perspective, it’s essential to plan how data will be migrated and cleansed. Duplicate and erroneous records from existing systems cause serious roadblocks to end-users, and unless poor quality data is handled appropriately, it prevents adoption of any new system. The biggest problem here can be the overwhelming quantity of data, mismatched primary identifiers in different datastores, and validating corrections.
In many ways, implementing a successful CRM platform is one of the largest IT projects that many corporations undertake. Approaching CRM as a strategic cross-divisional initiative with the goal of improving the customer experience while streamlining internal workflows is the first step towards success, but it’s essential to plan for and predict pitfalls along the way.
Optimizing WordPress for SEO
By · CommentsMatt Cutts, head of Google’s Webspam team, provided an insight to optimizing your WordPress site for maximum SEO effectiveness at the WordCamp 2009 Conference in San Francisco. SEO has gained a repution for being mysterious since the search engines don’t publicize exactly how their algorithms work, but his pointers confirm our opinion that quality of content is the critical element rather than focusing on keyword-stuffing and metatags.
That being said, here were his major observations:
- Don’t change old URLs if they don’t comply.
- Don’t over-do the mechanics of SEO: write about what you know and love, and ranking will follow.
- Build a reputation through original research, live blogging, finding a creative niche, making lists, creating code, being conversial (sometimes) and meeting people through social media.
- Reduce bounce rate by using ‘Show Related Posts’ feature.
- Security: keep WordPress updated and use .htaccess to limit IP access to your administration.
- Use Google Webmaster Tools and Analytics to check most popular referrers and manage 404 errors.
- 90% of WordPress installation are only in existence to created to create spam.
- The number one request from site owners is to improve their ranking in Google.
- GoogleBot considers over 200 factors in ranking pages. Pages, not sites, are ranked so the focus should be to improve the quality of every page on your site..
- “WordPress takes care of 80-90% of SEO” in the pure mechanics.
- Google rewards sites that are relevant and reputable, and inbound links from other pages with a high PageRank helps reputability. A description of the PageRank algorithm followed (see the presentation for details).
- Avoid the obsession with backlinks since low value inbound links don’t help your ranking. High quality and relevant links do.
- Translate your site into real English not technical speak or jargon – this helps both humans and search engines.
- Use the Google Keyword tool to find synonyms and commonly-used search terms around your topic.
- Don’t engage in keyword-stuffing techniques, since your pages will be penalized.
- In permalinks, use the custom structure ‘%post name%’ for maximum SEO usage of the URL (and put keywords in URL). Don’t update the old URLs if they don’t comply since this will result in broken links.
- Don’t over-do the mechanics of SEO: write about your area of expertise, and ranking will follow.
- Build a reputation through original research, live blogging, finding a creative niche, making lists, creating code, and meeting people through social media.
- Reduce bounce rate by using the ‘Show Related Posts’ feature.
- Security: keep WordPress updated and use .htaccess to limit IP access to your administration.
- Use Google Webmaster Tools and Analytics to check most popular referrers and manage 404 errors.
While these tips were geared towards bloggers, they’re relevant for every business website that wants to attract more traffic. The WordPress platform has simplified the mechanics of SEO, and now the challenge is to create high quality and relevant content that will increase your reputation – and consequently improve your PageRank.
Capturing non-ASCII keys in Microsoft Access
By · CommentsRecently, the need arose to capture function keys in a form and suppress Access’ response (eg. pressing F1 would not invoke the Help feature), and there is a surprisingly easy solution. You can also capture all the non-ASCII keys (shift, insert, alt, etc.) and choose to either ‘listen’ or prevent Access from handling these. This was used in a point-of-sale project, where function keys are used to change the mode of the application.
To do this, simply change the ‘Key Preview’ property of the form to ‘Yes’ and then use the ‘Form_KeyDown’ event in the form’s VBA module. The two parameters, KeyCode and Shift, indicate which keys are being pressed and if any of the character-set shifts (ie. shift, control, alt) are being held. This fires for every key, so you will need to parse the values for KeyCodes that interest you. Resetting the KeyCode parameter to zero will effectively cancel the keypress.
Importing Web Data into a Spreadsheet Dynamically
By · CommentsA very useful feature introduced in Excel 97 enables you to webscrape a site and import defined areas into a spreadsheet. There are a variety of situations where this could be useful:
- Utilizing real-time financial market data.
- Importing weather forecasts.
- Checking if your ads are appearing in a search engine.
- Viewing the latest headlines.
To import data from a webpage:
- Click Data –> Get External Date –> From Web.
- Enter the URL to scrape (eg. http://news.google.com/).
- Click the yellow areas for the page divisions you wish to import.
- Click ‘Options…” to specify how HTML formatting and PRE are handled.
After importing, right click anywhere in the imported block and click ‘Data Range Properties’ to specify how often the page should be refreshed (the minimum time is 1 minute). Click here for a spreadsheet that demonstrates the four sample uses above.
Unfortunately, there is no specific event that is fired when your web query refreshes. However, you can use the Worksheet_Change event and verify that the target range parameter matches the cell area for your web query (see the sample spreadsheet’s VBA module for details). Frequently this is required since there is usually some parsing required from the results.
If the source data of your query is dynamic (eg. you a looking up an area code driven by user-generated data), it is simple to use VBA to generate the web query results:
Dim sSearchTerm As String
sSearchTerm = Cells(2, 2) ‘ For example…
With ActiveSheet.QueryTables.Add(Connection:= _
“URL;http://www.google.com/search?hl=en&q=” & sSearchTerm, Destination:=Range(“$B$4″))
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh
.BackgroundQuery:=False
End With
Although web queries lack the full power available by using MSXML or WinSock to retrieve web data, for simple queries they provide a very rapid and reliable way to scrape a webpage.
Making a timer in Excel
By · CommentsThe Excel timer function OnTime is notoriously unreliable and difficult to use and if you are looking for the classic Visual Basic timer, VBA doesn’t have an equivalent.
So building a live clock on your spreadsheet, or having spreadsheets update themselves after an interval is not very easy. We’ve seen complex macros tied into the Open event of a workbook, launched by Windows Scheduler, and a whole array of other workarounds to achieve something that’s simple in most programming languages.
The VBATimer.dll (zipped version here) is a VB Timer, wrapped in a class that exposes events to Excel. Once the DLL is added as a reference, it can be used as in this example (placed in the ThisWorkbook module):
Dim WithEvents o As VBATimer.Timer
Private Sub o_TimedFired()
ActiveWorkbook.Sheets(1).Cells(1, 1) = Now()
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set o = Nothing
End Sub
Private Sub Workbook_Open()
Set o = New VBATimer.Timer
o.SetTimerMilliseconds 1000
End Sub
In this example, the time is placed in the first cell of the first worksheet, updating every second. While this is a trivial use, it has many other applications, such as detecting user inactivity or running tasks at specific times or intervals.
How to make Excel render (and calculate) faster
By · CommentsStrangely, Excel uses the installed printer driver to render the screen – the speed of the driver affects how quickly Excel renders and paints your workbook. If you have a slow driver installed, your workbook will not render quickly.
The HP LaserJet driver is significantly faster than many inkjet drivers installed. You can install this driver through Control Panel –> Printers, without actually needing to have the printer physically available. The only downside is that you will not be able to use the fast print icon on the toolbar (since the HP printer doesn’t exist), but you can select your ‘real’ printer but using the File –> Print option.
Switching between number bases in Microsoft Excel
By · CommentsConverting between decimal, binary, octal and hexadecimal is easy within Microsoft Excel. Prior to Office 2007, you need to ensure that the Analysis Toolpak Add-in is installed (these functions are available directly in 2007).
The functions are:
- DEC2HEX (decimal to hexadecimal)
- DEC2BIN (decimal to binary)
- DEC2OCT (decimal to octal)
Similarly, converting between another of the four numbering systems requires the formulas in the format 2 (eg. OCT2DEC will convert from octal to decimal). Note that when converting from hexadecimal, you should use quotes, since Excel will throw an error if the characters A-F appear.
If you wish to convert from binary to ASCII characters, you should then use the CHAR function to render the resulting decimal code to a character.
Using forms in Excel
By · CommentsExcel has some great functionality for creating forms without having to write any code. The major advantage here is not just simplicity, but you can avoid macro security prompts when other users open your file.
The procedure is:
1. Make sure the forms toolbar is turned on (View –> Toolbars –> Forms).
2. Select the control you wish to use and drop this on the form.
3. To size and move the control, right click and drag (this accesses the design mode of the control).
4. Right click the control to access its properties. Here, you alter the 3D appearance and other elements. Most importantly, you can create a ‘Cell Link’ entry, which is where the control will maintain its state.
You can download an example here, which shows a simple form with a listbox, checkbox and option group. The Cell Link value is the essential part to controlling the form: changing this value will update your control’s state, and when a control is modified, the value will also be updated accordingly.
Although Excel forms do not provide the richness of the VBA control box, they can offer a rapid way to generate user forms without the need for code.
Using New verses Set when creating objects
By · CommentsOne of the bad features of VBA is the ability to instantiate objects in the declaration, resulting in lines such as:
Dim oSomething As New SomeObject
Declaration and instantiation should always be separated. The reasons are numerous and complicated, but one of the best examples is this. When this code runs:
Sub test()
Dim oWinHttp As New WinHttpRequest
Set oWinHttp = Nothing
If oWinHttp Is Nothing Then
MsgBox “oWinHttp is nothing.”
Else
MsgBox “oWinHttp is NOT nothing.”
End If
End Sub
The result of this code is that the object will never be set to nothing. There are also overhead issues in the way that VB and VBA handles Dim/New in the same line, in terms of every time the object is used.
Due to these inconsistencies, it’s our recommendation to always split Dim and Set, since it results in the expected outcome of the programmer.