Write your first APEX trigger – livecoding.tv stream!

Well heck, that was pretty cool.  As part of Salesforce Developer Champions, I set up a streaming channel on Livecoding.TV – a new service dedicated to streaming developers developing stuff.

My first experience was pretty slick – I broadcast live to about 40 people how to create your first APEX trigger.  You can watch the recording (it’s in two parts because my connection dropped) at https://www.livecoding.tv/techman97.

Favorite my channel for more streams coming soon!

Productizing your salesforce.com Deployment – Part 1


What the heck is “Productization”?  Is that even a word?  Not according to Merriam-Webster, but it’s a word that you will want to introduce to your vocabulary!

We all absolutely love implementing Salesforce – the thrill of setting up a new org (aahh that new org smell!), getting business requirements, and building out exactly what the business needs.  Who doesn’t love doing this part – I know I sure do!

So what happens after “launch”?  Many companies continue at the same velocity as they had during the build phase – which may keep noisy users at bay, but how often do we think about those non-noisy users?  How often do we think about “implementation fatigue”?  What about other areas of the business that want to onboard?

Often, we end up thinking of such things months or years down the road when data starts becoming shoddy, management stops managing from the tool, or you find the users have created a thousand Excel sheets with PivotTables to actually output useful reports because their data source keeps changing.


So what is “Productization”?  Productization is the process of taking your platform and taking it from the adhoc building phase to a more of a traditional enterprise platform “tool” that is predictable, stable, and trusted.  Picking the phrase apart – you are essentially making a “closed” product that your users just pick up and use, similar to how they would use Excel, Word, etc.

One thing that many people confuse with a “Productized” solution is one that is static, closed, or non-responsive to changing business needs – absolutely not the case!  This is where you start really exploring and implementing those fancy themes that consultants throw around such as governance/change management, formalized ideation, or formal on-boarding processes.  You want to create a PRODUCT.

This blog post is the first in a series that will discuss the overall themes and approaches of a “Productization” roadmap.  Today we’ll be talking about user expectations/management, speed/velocity of change, and involving your users in the ideation process.

calm1Let your users breathe!

The double-edged sword that is salesforce.com is that it’s incredibly configurable…by anyone in the organization.  This ability is second-to-none when we’re building and honing in the platform, but all of that effort is leading you to your “release version [x]”.

One of the greatest hurdles to any salesforce.com implementation is adoption; many adoption approaches can be utilized such as “creating [x] records per week”, “managing from the tool”, or “compensation driven from the tool”, but for those doing day-to-day work in the system stability can mean just as much or more than anything else.

Think about it – would you look forward to using a tool at work that you never trust is going to be the same tomorrow?  How much effort would you put in to learning how things work or much less how to make them more efficient if tomorrow everything could change?  Having a tool that is predictable fosters an environment where users trust the system and invest more time/energy to using it.

Slow your roll….

This also introduces an almost backward concept – slowing down the speed at which your business customizes salesforce.com.  Out of the gate, you are making objects, fields, rules, and writing code to beat the band.  Once you get to “release version 1”, you need to switch your thinking away from “YES!  THERE!  HOW’S THAT??!” to “Yes, let me understand exactly what you’re trying to do, and how it can benefit or detriment the entire organization”.  (ok, that’s a pretty major generalization, but roll with me here…)

To associate a silly visual – “the cockroaches scatter when you turn on the lights”.  The same visual can be applied to users and change – if you change your system haphazardly, your users will scatter!

No, I did not just compare users with cockroaches.  🙂

Ideation Collection and Execution

Very few things have the impact on the overall success of your solution more than a fully engaged user base.  Providing your user base with a forum where they can bring new ideas to light, have prioritization input on the implementation of said ideas (with the assistance of a steering committee), and can bring fixes/improvements back to their peers is both empowering and invaluable.

Next up…

Once you throttle back the engines and make the current users and management stable and happy – then let’s start talking onboarding units and users, but next time!

The New Way to Socialize at Dreamforce 2014

This is a GREAT post by Mark Ross on greeting new and existing colleages at Dreamforce 2014! See you all next week!

The Swamps of Salesforce-Dagobah

Influenza. Enterovirus. Ebola.

Ok, come back, it’s alright. Just reading the names won’t make you sick, alright?

It’s no secret that 2014 has been a bit of a banner year for infectious disease. And, not to scare anybody, but a LOT of us are about to all gather in a location with 150,000 other people from around the world, all at the same time. I don’t know about you, but that gives me just a liiiiittle pause.

But there is a solution! And it is a good one. Recently, the Harvard Medical School published its findings on the nature of hand-to-hand communications, and the likelihood of transmission of diseases in its different forms. The short version: fist bumps are a safer and cleaner alternative to handshakes.

That’s right, you read correctly. Harvard has officially stated that we should all be fist bumping.


Absurd as it sounds, there is a very…

View original post 306 more words

“Salesforce is Slow” – what can you do?

20080730_server-crashYou cringe when you hear it – “Salesforce is slow!” or “Salesforce is broken!”.  Those two phrases increase stress levels and can quickly catch fire in your organization and negatively impact user adoption and confidence.

In the YEARS I have been working with Salesforce, I can count on two hands the total number of times that the service has been actually “DOWN”.  Most of the time, it’s internet routing issues, DNS, and a whole slew of other factors, some of which you can help mitigate if you take a look at the connection between the end user’s workstation and the Salesforce server pods.

The areas YOU can have an effect on are split in to three areas, starting with the client workstation and moving out to the cloud:

Workstations (and mobile devices!)

Workstations are the “front lines” of your organization – computers, tablets, phones, etc.  This is where the majority of your problems are reported and where you can spend a lot of time supporting ghost issues.

Standardize your company on a single (and current!) web browser

Chrome, Internet Explorer, Firefox, Opera – whatever your organization’s preference is – make a decision and stick with it.  You can read the official “Supported Browsers” article by Salesforce to get additional information, but there are so many issues that exist because people are using outdated browsers!


Ensure that your workstations and devices have the latest and greatest security patches

Salesforce.com has a very low risk of malicious code or other in-sundry hacking things being done, but patches cover more than just security issues.  Network resolution, memory usage, all kinds of other things are regularly addressed through service packs and periodic updates.

Don’t cheap out on memory!

Memory is relatively cheap now – when purchasing a new workstation, 4gb or 8gb is now the MINIMUM you really need in a workstation, no longer is it only reserved for developers or engineers!  Low memory can manifest itself in a general computer or device slowdown and even to slowed rendering of web pages.



The one major thing that your server infrastructure (or if you’re a small biz or home worker, your router itself) provides for you is DNS resolution.  DNS stands for “Domain Name Resolution” and is the sole player that sends your request for “login.salesforce.com” to an actual server on the Internet.  Without DNS, you cannot reference ANYTHING on the internet by name.

Part of a solid “consumption” DNS strategy is to be able to reference multiple providers across multiple carriers.  Most of the time, IT departments have either just one or a few DNS servers defined that reference your ISP’s servers only.  If your ISP has issues – the broader Internet isn’t down, but you are!

There are a number of public DNS servers – most notably Google Public DNS – that you can reference along with your ISP’s DNS servers to help in the event something somewhere goes awry.


Quality of Service / Traffic Prioritization

How your browser request makes it through the “series of tubes” to the Salesforce servers and back (it’s a round trip!) can be affected by a large number of factors.

In most business environments, there is an appliance that controls all traffic in or out of your network – typically called a “router” or “firewall”.  These appliances often have a feature called “Quality of Service” or “Traffic Prioritization/Shaping” that can help prioritize the transmission of packets meant for Salesforce.com over those that belong to someone’s music streaming or Youtube video.  Most of the time, you can prioritize based on destination and source IP address – which you can set to be the Salesforce pod addresses.

NOTE!  You can use QoS to control packet transmission on YOUR NETWORK ONLY.  QoS has no lasting effect as it transmits across the Internet.  Often times though, proper prioritization within your network is enough to know if it’s either how you are using your bandwidth, or if you have to upgrade your…..

Internet Speed

This is a common issue that I see when I hear that dreaded “Salesforce is slow!” comment come across.  There are two sides to your internet connection:  upstream and downstream.  When you hear an ad for Comcast / Cox / <name here> advertising “the fastest speeds around”, they are only talking about downstream – or how much bandwidth you have downloading content.  Rarely do they ever mention how fast you can UPLOAD things.  I know that sounds weird, but even while browsing, at minimum you have to use the upstream side of your connection to acknowledge the receipt of what the web server is sending you.

If someone else on your network is uploading a huge file to a vendor via FTP and taking up all of the bandwidth, you will see a MARKED slowdown in your regular browsing speed.  (you can help this – see the QoS topic above)

Failover / Multiple Internet Connections

If you have a larger organization or one that very data-intensive, you could also benefit from having multiple internet connections.  Most enterprise-grade (and even some small business grade ones!) have connection load balancing or failover built-in or available as an upgrade for a small fee.  Apart from the obvious benefit of if one connection fails completely that you can seamlessly roll over to another one, you can setup rules to ensure that certain traffic goes out over one connection and other traffic (like Salesforce!) goes out another.

You can also read this article from Salesforce that talks about some of these items and a few more:  https://developer.salesforce.com/page/Network_Best_Practices_for_Salesforce_Architects

Happy networking and questions down below!

Passing Variables to Local Application from Salesforce.com

shiftyCreating solutions for a living often puts you in situations where business needs sometimes just don’t align to “how technology normally works”.  One of these situations came up today.

Requirement:  We have information in Salesforce.com that we need to pass to a local (on the Workstation) Access Database and then open it up.

My brain starts screaming “WHAT?!?!  You can’t do that…the browser won’t let you interact with the local file system!”  After some noodling around, my brain reaches WAAAAY back to VB6 days – Microsoft VBScript.  We could use old school ADO and VBScript commands to open up the Access Database, insert records, and then open that same database through a Shell Run command!

Now – only if Salesforce could be manipulated to build the VBScript file and then the user could just execute it!

After a little messing around, here’s the code!  This code generates the VBS, downloads it with a specific name, and the user can just execute it.

**NOTE – It works with one click in IE, but in Chrome and FF you have to execute the file manually from the downloaded location (clicking on the file via the browser throws an error for some reason)

Visualforce Page

<apex:page standardController="Account" extensions="VBScriptGeneratorController" showHeader="false" sidebar="false" contentType="application/vbs#OpenWord.vbs">
<apex:outputText escape="false" value="{!strOutput}" />


public VBScriptGeneratorController(ApexPages.StandardController scController) {
 // TODO
 this.soObject = (sObject)scController.getRecord();
Account acct = [SELECT Id, Name FROM Account WHERE Id = :(Id)this.soObject.get('Id')];
strOutput = '';
strOutput+= 'Set conn = CreateObject("ADODB.Connection") \r\n';
 strOutput+= 'conn.Open "Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Users\\Andy\\TestADO.accdb;" \r\n';
 strOutput+= 'strSQL = "INSERT INTO tblData (Var1, Var2) VALUES (\'' + acct.Id + '\',\'' + acct.Name +'\')" \r\n';
 strOutput+= 'Set rs = conn.Execute(StrSQL) \r\n';
 strOutput+= 'conn.Close \r\n';
 strOutput+= 'CreateObject("WScript.Shell").Run "C:\\Users\\Andy\\TestADO.accdb" \r\n';