Cloud Assets – Build it Better, Stronger, Faster

October 18, 2013 Michael Press

This is the first blog post in an ongoing series in which we’ll highlight our Cloud Assets.  At Appirio we’ve spent the last couple of years building a Cloud Asset Library (CAL) – a repository of reusable code solutions and components that we use over and over again on our customer projects in order to help us deliver better…stronger…faster. (If you’re too young to get the reference, then think load-carrying exoskeletons).

As the CAL Lead, it’s my job to help our project teams find suitable Assets in the library to reuse, to help them identify and extract reusable code into Assets from custom implementations when no suitable Asset exists, and to refine and genericize (if that’s not a real word, it should be) our Assets to be as plug-and-play as possible.  Every week I Chatter a “Cool Asset of the Week” – a great new Asset that one of our consultants created the previous week. In this blog series, I’m going to share some of the Cool Assets and describe how they help us deliver cloud implementations more quickly, more repeatably (another word I need to invent), and more reliably.

Our Assets fall into a few broad categories.  I’ll feature Assets in two of those categories in this post – solutions and components.  Future blog posts will highlight Assets in other categories.

We Coded So You Can Click

One of the most important Best Practices on the Salesforce platform is captured in the phrase,“Clicks Not Code”.  That is, when implementing some functionality, strive to use the built-in declarative configuration features of the platform, rather than writing custom code, because every line of code is a liability.

For example, the platform supports using configuration to set up routing an incoming Service Cloud Case to the right queue, or creating an approval workflow to get the appropriate signoff on an outgoing quote.  However, many times our customers have business requirements that are so unique or complex that they can’t be implemented using the declarative features, and we have to write code.  At least, that’s what we used to do.

But on a project last year, Senior Consultant Peter Babalis (now a CloudSpokes Architect) saw that many of the complex business rules he was coding on a large project fell into a few distinct categories, and he realized that a framework could generalize those rules.  Peter used our  CloudSpokes community — running over 30 contests so far — to build what is now called the Advanced Workflow Engine (AWE).  AWE is now a mature Asset framework – what we call a Solution – that extends Salesforce’s declarative rules with a suite of new rules and actions that we commonly have to code for our customers, plus a user interface to allow declarative configuration of the rules through clicks.

Some examples of rules and actions:

  • Create a Chatter Post when a particular action happens on record.  A simple but common example – one customer needs to notify the Product Manager when the price of a product changes.  Implemented with 5 clicks in the Appirio Workflow Engine and zero lines of code.

  • Exceptionally complex sequence of rules.  A large customer has a sequence of 28 rules with corresponding actions that need to take place when the status of an Opportunity is changed, including performing complex actions on other objects. For example – create Campaign members to re-market to people in certain situations; spawn new renewal Opportunities after an Opportunity is won;  and register Contacts for training when specific conditions are met.  Coding all of that into a trigger or Apex classes could be a nightmare of difficult-to-maintain spaghetti code or interrelated actions that are difficult to debug, but in AWE the sequence is straightforward to follow in a simple declarative interface that’s familiar to Salesforce administrators.

  • Buttons with dynamically generated menu options based on record criteria evaluation.  One of our customers needed to arm their sales organization with the right content during meetings with their prospects. A feature of AWE allows the placement of a dynamically configurable button on a standard Salesforce record, with dynamically-computed actions presented to the user as options once the button is clicked.  The options presented vary based on criteria like the user’s profile and specific record values on an Opportunity, such as the stage and competitors.  This dynamic button provides the sales group with the appropriate content to help with closing the Opportunity.

AWE has been reused on 11 projects so far, and is currently in the planning stages for 9 more.  It’s saving our customers tons of code and lots of money, accelerating implementations, and allowing our project teams to concentrate on meeting critical business with declarative configuration instead of juggling lots of fiddly code.

Who Doesn’t Love a Type-Ahead Lookup

The standard Salesforce interface is a phenomenal solution to the problem of providing a single, generic interface that allows users to manage their business data, regardless of the design or complexity of their data model.  But the downside to that genericity (another word that should be a word) is that it can sometimes take a lot of clicking around to add or edit data.  The solution that we implement for a lot of customers is a custom VisualForce page that’s tailored to a particular business use case and allows the users to add or edit their data in one screen with just a few clicks.  Some examples are a page that L’Oreal uses to manage the points that salons earn through their loyalty program, and DeVry University’s online application.

So we write these kinds of pages a lot, and of course we have framework assets to speed the development of custom VisualForce forms.  But here I want to highlight another category of Asset – components.  A component is a  small code nugget that contributes a single valuable feature toward a full solution. Components are the single largest category of Assets in our Library.

Although I’m a Technical Architect with a Computer Science degree, one of my specialities is user interface design and a focus on the user experience (often called UX).  One of my favorite features that dramatically increases user productivity is the type-ahead lookup.  A great example is Google’s search box, which shows you other matching searches as you type your search criteria.  Not only is it faster to see and select a match from the dropdown, it allows you to type fewer characters (just enough for your intended value to appear in the list), and can even show you other similar values that might be relevant (or at least humorous) – a much improved user experience that makes searching not just faster, but better.

So I’m a strong advocate for supplying type-ahead searches whenever we write a custom form in order to maximize our customers’ productivity in their critical business activities.  We’ve accumulated several different type-ahead search Assets for various programming languages, interface presentations (dropdown of matches only, combobox of all options with matches highlighted, modern JavaScript chicklets) and data destinations (single object, multiple objects, Chatter “@mentions”, etc.)

These granular components quickly become proven and stable (think about how much time is spent debugging edge cases each time something is written from scratch), provide our customers with a superior experience and higher productivity in about the same amount of time as a standard Salesforce lookup, and free up our consultants and developers to focus on the core business needs of our customers.


Stay tuned for more Cool Assets in future posts!

Michael Press is on Appirio’s R&D team supporting asset development for the Workday and Salesforce consulting teams. 

Previous Article
Appirio releases open source AWS SimpleDB utility
Appirio releases open source AWS SimpleDB utility

By Neil Hastings Here at Appirio, AWS SimpleDB is used as a datastore for our CloudFactor app, which allows...

Next Article
How to push to multiple remote Git repositories using 1 Eclipse operation (killing 2 birds with 1 stone)
How to push to multiple remote Git repositories using 1 Eclipse operation (killing 2 birds with 1 stone)

By Enda Traynor I recently spent some time trying to figure out this very issue and so thought it would be ...