Featured Post

Twenty Practical Steps to Better Corporate Governance | The Corporate Secretaries International Association (CSIA)

Twenty Practical Steps to Better Corporate Governance | The Corporate Secretaries International Association (CSIA) Please click the li...

Showing posts with label #Sales. Show all posts
Showing posts with label #Sales. Show all posts

Monday, April 3, 2017

Lightning Inter-Component Communication Patterns

http://ift.tt/2n4XuwR

post-logo-200_jgpyq7.png

If you’re comfortable with how a Lightning Component works and want to build production-grade applications for use in your org or to sell in AppExchange, this article is a must read. Understanding how a singular component works is important, but understanding how they work together is essential for building an effective application.

Interactive applications require components that can exchange data. In traditional HTML and JavaScript, this is straightforward as any script can modify the whole page. The modular nature of the Lightning Component Framework (LCF) requires more consideration for interactivity.

In line with best practices for security concerns, Lightning components are intentionally initially isolated from each other. By default, they’re safe from receiving or causing unwanted interference that can be exploited for malicious purposes. In practice, a Lightning component’s code cannot directly interact with its parent and vice versa. A parent component cannot manipulate its children or siblings as with standard JavaScript and the DOM. Inter-component communication must be specified by the developer.

options_ub9c1z.png
In LCF, inter-component communication is supported in several well-defined ways. One can only use the following developer-defined interfaces to specify what can be exchanged:

  • Attributes or Methods to pass data down the component hierarchy
  • Lightning Events to pass data up and around in the component hierarchy

Passing data down the component hierarchy

Attributes

Attributes are the most commonly used element to pass data down the component hierarchy as they are simple to use. In order to pass data down from a parent component to its child, simply use the following code:

Parent component

<aura:component> 
   <aura:attribute name="parentAttribute" type="String"/>  
   <c:childComponent childAttribute="{!v.parentAttribute}"/> 
</aura:component> 

Child component

<aura:component> 
   <aura:attribute name="childAttribute" type="String"/>  
</aura:component> 

In this example, the parent component value of parentAttribute is transferred to the childAttribute of the child component via the {!v.parentAttribute} expression.

This is perfect if you just want to display the data in a child component. What about if you also want to execute some logic when the attribute’s value changes?

Consider the following updated definition of childComponent :

<aura:component> 
   <aura:attribute name="childAttribute" type="String"/>  
   <aura:handler name="change" value="{!v.childAttribute}" action="{!c.onChildAttributeChange}"/> 
</aura:component> 

With the addition of a change handler, the child component can now trigger the onChildAttributeChange controller function automatically when the value of childAttribute changes. This allows us to implement some custom logic such as:

({ 
    onChildAttributeChange : function (component, event, helper) { 
        console.log("Old value: " + event.getParam("oldValue")); 
        console.log("Current value: " + event.getParam("value")); 
    } 
}) 

We now have established a top-down communication chain between the parent and the child component. This can be summarized in these few steps:

attribute-change_e70oir.png

  1. parentAttribute value changes
  2. parentAttribute value is transferred to childAttribute
  3. childComponent’s change handler triggers the onChildAttributeChange controller function

This approach works great for processing an attribute. What about multiple attribute changes? If you want to change two or more attributes and then trigger some logic, this method becomes unwieldy. You can either combine the attributes into a larger object (not always practical) or write a complex synchronization algorithm (please don’t). Instead, I recommend methods for multiple attribute changes.

Methods

Based on frequent exchanges with the developer community, I have gathered that methods tend to be overlooked in favor of attributes. However, I have found methods to be quite flexible, as they allow users to create and expose component APIs.

Let’s look at an example involving two components communicating with a method. Here we have a child component that exposes a myMethod method with two parameters (param1 and param2).

<aura:component> 
    <aura:method name="myMethod" action="{!c.executeMyMethod}">  
        <aura:attribute name="param1" type="String"/>  
        <aura:attribute name="param2" type="String"/>  
    </aura:method> 
</aura:component> 

myMethod is hooked to an executeMyMethod function in the component’s controller:

({ 
    executeMyMethod : function (component, event, helper) { 
        var params = event.getParam('arguments'); 
        console.log('Param 1: '+ params.param1); 
        console.log('Param 2: '+ params.param2); 
    } 
}) 

This function retrieves the arguments (param1 and param2) passed to myMethod and outputs them in the console. Note that the arguments key used in event.getParam is a constant.

Let’s now look at the parent component. It has two attributes (parentAttribute1 and parentAttribute2), a reference to the child component, and a button.

<aura:component> 
    <aura:attribute name="parentAttribute1" type="String" default="A"/> 
    <aura:attribute name="parentAttribute2" type="String" default="B"/> 
     
    <c:childComponent aura:id="child"/> 
     
    <lightning:button label="Call child method" onclick="{! c.onCallChildMethod }" /> 
</aura:component> 

When clicked, the button calls a onCallChildMethod function in the component’s controller. This function retrieves the value of the two attributes and retrieves the child component by using its aura:id. It then calls a myMethod method on the child component and passes the two attribute values as parameters.

({ 
    onCallChildMethod : function(component, event, helper) { 
        var attribute1 = component.get('v.parentAttribute1'); 
        var attribute2 = component.get('v.parentAttribute2'); 
        var childComponent = component.find('child'); 
        childComponent.myMethod(attribute1, attribute2); 
    } 
}) 

If we now step back and look at the big picture, here’s what happens:

method_tuaizu.png

  1. When the parent component button is clicked, the onCallChildMethod controller function of parentComponent is called
  2. onCallChildMethod retrieves a reference to childComponent using find with an aura:id
  3. onCallChildMethod calls the myMethod method of childComponent
  4. myMethod triggers the executeMyMethod controller function of childComponent

This “method” approach is quite powerful as users can pass data to a child component and perform some operations once this is done. Users can also create distinct methods involving the same arguments but triggering different functions. Finally, developers get the benefit of clarity by exposing named methods that—hopefully—reflect their intended behavior.
Achieving all of this is not possible by just passing attributes from parent to child components.

Passing data up and around the Lightning component hierarchy

The way to pass data up and around in the Lightning component hierarchy is to use events. There are two types of events that users can employ for that purpose: application events and component events.

There are some minor syntax differences between these two types of events, but we do not discuss them in this article for the sake of brevity. Instead, we focus on their propagation mechanisms, which in turn dictates their use cases.

Application Events

Application events are broadcast to all Lightning components that are registered as listeners for that specific event.

application-event_hbnbk0.png

If we look at the example described in the schema on the right, here’s what happens:

  1. A component fires an application event.
  2. All other components can handle the event provided that they have registered the appropriate event handler.

All event handlers are triggered simultaneously. There is no way to cancel an application event once fired.

Application events are great for supporting business logic events as they are quite flexible: They do not impose a particular architecture. This is ideal when building components that are exposed in the Lightning App Builder. However, bear in mind that this flexibility comes at the expense of performance in certain use cases due to the event broadcast.

For example, it can be expensive to use an application event for a fine-grained component such as a button to notify other components that it is clicked. Your event will be sent to all of the components. They have to identify the source of the event then, verify if they handle it. Typically all components except one are registered to handle the event. Conversely, if you use an application event for a coarse-grained event in the App Builder that two other components may listen to, there is no performance impact.

Component Events

Component events are “clones” of standard DOM events (mouse clicks, key press, and so on). Just like their DOM counterparts, they propagate up in the component hierarchy via a bubbling mechanism and can be stopped en route to the application root component.

Here is an example of such a behavior:

component-event_hywzsn.png

  1. Component E fires a component event.
  2. Event bubbles to E’s direct parent: component D.
  3. Component D can handle the event or not and optionally prevent its propagation by capturing it.
  4. If Component D did not capture the event, it propagates to A (this applies even if D did not handle the event).
  5. Component B and C do not handle the event, as they are not in the ancestry line of E.

The advantage of component events is that you know their maximum scope in advance (all parent components) and you have some degree of control over it (you can capture the event along the way).

Advanced event architecture

As a rule, consider using a component event before employing an application event. These are more common and usually have little effect on performance. However, when facing a blocking use case or an overly complex architecture, think about going for an application event.

Consider using a component event for handling low-level UI interactions such as selections and form validation. You can then combine these with application events that handle “business” events. This integrates into a larger architecture via a central “dispatcher” component such as this:

dispatcher_q4t3mz.png

Closing words

In this article we covered Lightning inter-component communication options. You learned about passing data down the component hierarchy with attributes and methods. You also had an overview of the different event types with their use cases and limitations. You are now ready to build a larger Lightning project with a robust architecture that you can quickly deploy to production. If you have any questions, reach out to our community’s Stack Exchange.

Code samples

Here are some working code samples covering the inter-component communication patterns presented in this post:

SforceBlog?d=yIl2AUoC8zA SforceBlog?d=qj6IDK7rITs SforceBlog?i=rc77adhwqPM:unV9PJC0B6A:V_s SforceBlog?i=rc77adhwqPM:unV9PJC0B6A:F7z SforceBlog?d=l6gmwiTKsz0


April 03, 2017 at 11:45PM

http://ift.tt/2oRiKm7

from Philippe Ozil

http://ift.tt/2oRiKm7

Why Drill a Hole At All? – Episode 78

http://ift.tt/eA8V8J

People don’t want to buy drills. They want holes. The questions for salespeople to answer now is “Why drill a hole, on what wall, and for what outcome?”

The post Why Drill a Hole At All? – Episode 78 appeared first on The Sales Blog.



April 03, 2017 at 10:00PM

http://ift.tt/2oR6oL0

from Anthony Iannarino

http://ift.tt/2oR6oL0

YouTube Video SEO Essentials: 5 Metrics You Need to Track

http://ift.tt/2nRZeIG
YouTube SEO

Do you want to improve and grow your channel, but aren’t necessarily sure how to improve your video SEO? In this article, we'll cover the essential...

The post YouTube Video SEO Essentials: 5 Metrics You Need to Track appeared first on The Sales Lion.

TheSalesLion?d=yIl2AUoC8zA TheSalesLion?d=7Q72WNTAKBA TheSalesLion?d=qj6IDK7rITs TheSalesLion?i=2pbCMgnc7Fw:LgOc7z-u1o8:g


April 03, 2017 at 05:57PM

http://ift.tt/2oQwg9s

from Zachary Basner

http://ift.tt/2oQwg9s

17 Email Subject Lines Sales Reps Swear By & Why They Work So Well

http://ift.tt/2nS7zMB

email-subject-lines-compressor-879774-edited.jpg

While many people agonize over their email copy and then slap a hastily written subject line on two seconds before hitting "send," sales reps know that the situation should actually be reversed.

After all, there's no point in crafting a beautiful message if buyers don't even open it. And what prompts the all-important open? The subject line.

Find out your industry's email open rate benchmark and start being better than average. Now.

But with only a tiny bit of real estate to work with, there's no room for mistakes. With this in mind, we took to Reddit's Sales channel to round up sales email subject lines vouched for by real sales reps. Instead of reinventing the wheel with your messages, use these subject lines knowing that they've been tried, tested, and verified to work by reps around the world.

Interested to learn why these subject lines do the trick? We've also included the logic behind each for your knowledge.

1) "I hope all is well"

The Reddit user who suggested this subject line says that "it gets a lot of reads from decision makers who are tired of people trying to serve their own self interests." Demonstrating genuine concern for the email recipient is refreshing.

Why it works: In a study, Ferrazi Greenlight found that reps who focused primarily on building relationships rather than generating transactions were more successful in the long run. Prioritizing the relationship from the very beginning will separate your message from the scores of other hard sales pitches.

2) [Personal tidbit about the buyer]

The more you can personalize your email subject line to the person at the other end of the "send" button, the better. According to Ali Powell, principle account executive at HubSpot, the secret to writing a phenomenal sales email subject line is to make it something about them -- that couldn't apply to anyone else. 

Why it works: People prefer personal over pretty. Consider the fact that plain text emails soundly beat beautifully designed HTML emails in a series of A/B tests. Why? They look like one-to-one messages. So even though the subject line "love that you're in a band" doesn't look as sophisticated as "Technology For the Future," it's a lot more appealing to your buyer who moonlights as a drummer and controls the tech budget purse strings for her company by day.   

3) "Your annual goal"

The essential nugget in this subject line is "your." Pair "your" with any goal or problem the prospect might be experiencing, and you've got a hyper-relevant email subject line. And if you can't nail down an issue unfolding at the buyer's company? As the redditor who vouched for this subject lines points out, "then you're just spamming an advertisement."

Why it works: It's a well-known anecdotal fact that most people prefer talking about themselves than listening to others, but we now have the science to back this up. Research from Harvard shows that when people talk about themselves, areas of the brain pertaining to motivation and reward spring into action. 

4) "Quick question"

Curiosity didn't just kill the cat, it also made the buyer click. This subject line is a favorite among redditors.

Why it works: According to curiosity-drive theory, people find uncertainty unsettling. Conversely, clearing up areas of uncertainty is mentally satisfying. Teasing the email recipient with a "quick question" without telling them what it is prompts prospects to open your message and alleviate the ambiguity.

5) "One more thing"

What could it be? The prospect will have to open your email to find out.

Why it works: Similar to "quick question," this subject line plays on the buyer's curiosity. They must either read your email ... or live with the unease of not knowing what you're offering.

6) "[Name] referred me to you"

Smart reps know that referrals are as good as gold in sales. According to NoMoreColdCalling.com, referred prospects have a whopping 50% close rate. If you've been introduced to a prospect by someone they trust, make it clear in the subject line that it's referral.

Why it works: Referral sales expert Bill Cates notes that salespeople who get referred to new prospects "borrow trust" from the referral source. This means that instead of coming in cold, the relationship between the rep and the prospect automatically becomes warmer thanks to the relationship between the referred prospect and the referral source. 

7) "Contacting you at [Referral]'s suggestion"

Different phrasing, same idea. 

Why it works: Think of a referral as social proof on steroids. The closer the prospect is to the referrer, the better.

8) "You are not alone"

Generally, prospects only have visibility into their own organization while salespeople enjoy a broader vantage point that spans countless buyers and customers. One Reddit user pointed out that this subject line provides a good opening to an email containing a case study or testimonial from an organization similar to the prospects'.

Why it works: Who likes to be alone? The mere fact that other people have done or are doing something is often enough to sway opinions and drive action, thanks to the bandwagon effect.

9) "Good morning, [Name]"

According to Laurie Puhn, 94% of couples who greet each other with "Good morning!" each day report they have an "excellent" relationship. Granted, you probably don't want to date your prospect, but you do want to forge a strong bond with them. A simple salutation might be just what the doctor ordered.

Why it works: In a world where fewer and fewer people greet each other when they get into the office, a simple "good morning" is a humanizing differentiator for your email. 

10) "[Name], we can help you [goal]"

Would a rose by any other name smell as sweet? To be honest, I really don't care as long as you use my name in conversation. Inserting a prospect's name into your email's subject line emphasizes that the message is just for them.

Why it works: Not only has research shown that people respond positively to hearing their names, the phenomenon of implicit egotism holds that our name-based preferences extend to the cities we choose to live in, and what occupations we pursue. 

11) [Referral name]

This is another one from Powell's arsenal"Just put the full name of the person in the subject line and nothing else. I promise this works!" she writes. For example: "Jane Smith" or "John Doe." It really doesn't get any easier than that.

Why it works: We've already talked about the power of referrals, which is one reason this subject line is so potent. But there's another reason -- in a sea of emails labeled with verbs and adjectives, a person's name (and one the recipient knows well at that) stands in stark contrast.

12) "Possible meeting [date] at [time]"

The user who added sales trainer's Kate Kingston's subject line to r/sales gave one additional tip as to how to use it: "Setting an appointment on the :45 is much less pressure than setting it on the :00 or even :30 because it appears that you will only take up 15 minutes of your decision maker's time."

Why it works: According to Copyblogger, "A specific headline conveys more valuable information to a potential reader, which acts to draw them magnetically into the content." Although a subject line isn't exactly a blog post title, the principles of specificity still apply, and can help boost your open rates.

13) "[Situation] at [Company]"

For example, "Sales Training at Business Inc." or "HR Services at Organization Y." Whatever it is that you sell, connect it with the company you're prospecting into for a subject line one-two punch.

Why it works: Just like the prospect's own name, buyers are also partial to the name of their company. When in doubt, personalize.

14) "Who is in charge of X at [Company]?"

Seeking an introduction to the right contact at the buyer's organization? There's nothing like getting right to your point in the subject line of the message.

Why it works: According to sales trainer Jeff Hoffman, approaching prospects like a curious student instead of a knowledgeable expert boosts engagement. Posing a question in your subject line asking for the prospect's help paves the way for a conversation -- the point of a prospecting email.

15) [blank]

Can't think of a great subject line? One Reddit rep endorsed using a blank subject line every once in a while.

Why it works: Research from HubSpot Sales revealed that no subject line is the most powerful subject line of all. An analysis of 6.4 million emails showed that messages with a blank subject line were opened 8% more often than those with subject lines.

16) "Can I help?"

The age of Always Be Closing is dead -- to be successful, salespeople must practice Always Be Helping. Use this subject line to tell the buyer you're eager to add value.

Why it works: As soon as your prospect sees this in her inbox, she'll wonder, Help with what? To find out, she will read your email. The well-written, personalized contents will prompt her to respond.

17) "This is a sales email"

 

Another commenter on the Reddit thread said messages with this title are opened at a "very high" rate.

Why it works: Rather than trying to disguise the reason you're reaching out, be honest --prospects appreciate when you don't beat around the bush. You'll earn instant trust, not to mention differentiate yourself from less straightforward sales reps.

What's the subject line that you swear by? Share in the comments.

New Call-to-action



April 03, 2017 at 05:34PM

http://ift.tt/2nS75Wy

from ebrudner@hubspot.com (Emma Brudner)

http://ift.tt/2nS75Wy

3 Huge Objection Handling Mistakes Costing Salespeople Deals

http://ift.tt/2nO75oW

sales-objection-handling-mistakes-compressor-041178-edited.jpg

To be a top-performing salesperson, you must master the art of answering objections. Without this skill, the number of deals you close will be dramatically lower -- it’s like only being able to pick the lowest fruits from the tree when you could get a ladder and pick all of them.

Some reps attempt to get better through sheer practice. However, this strategy doesn’t always work: If you’re using the wrong approach, simply repeating it will actually make matters worse.

I’ve observed three major mistakes salespeople make when they handle objections. Avoid these errors if you want to close more business.

1) Holding the Wrong View of Objections

You can dramatically improve your responses by reframing how you think about objections. Some salespeople view objections as an invitation to play tennis. They think they’ll win the game by tossing off a clever answer and therefore quickly putting the ball back in the customer’s court.

Meanwhile, some reps are scared of objections. Every time their prospects voice reservations, these salespeople feel like they’re getting further from the finish line.

Not only are these viewpoints inaccurate, they also make it harder to resolve objections.

Objections are normal, healthy elements of the sales process. In fact, I’d argue they’re essential to winning your prospect’s business. You’re driving the majority of the sales process: Doing discovery, giving a presentation or demo, arranging a trial, and so on. The only time the customer gets to drive is when they speak up with an objection. It’s a great opportunity to give them some control and make them feel empowered. They’ll feel like your peer rather than a passive recipient of information.

Consider this as well: Prospects have objections whether or not they say them out loud. Getting to hear them is a good thing -- it gives you a chance to neutralize their fears or worries.

2) Walking Into Trap Objections

Reps fall for “trap” objections all the time. A “trap” objection comes from an internal blocker who is looking for reasons their company shouldn’t purchase your product.

These sound like casual, easy questions, so salespeople typically answer them quickly and move on -- with the false assumption they’ve handled it appropriately.

Suppose you get a question that touches on a weakness or missing feature of your product. You give a roundabout answer. Here’s an example:

Stakeholder: “Are you compatible with the latest version of Scaler?”

Rep: “We currently support 90%. Scaler will be fully supported in our next release, which will be live in six months.”

Stakeholder: “Great, thanks.”

As soon as you leave, they’ll turn to their colleagues and say, “I told you, their offering won’t be ready for six months!”

You’ve just given the blocker ammunition.

Next time you get an objection like this, consider where it’s coming from. If it’s from a naysayer or the champion of the competition, delve into their reasons for asking instead of responding immediately:

Stakeholder: “Are you compatible with the latest version of Scaler?”

Rep: “Yes, why do you ask?”

Stakeholder: “It’s crucial your current version is fully compatible, since we need it right away.”

Rep: “Can you give me some context on your needs, so I can tell you what we can and can’t do?”

Stakeholder: “Well, we need X, Y, and Z … ”

Rep: “X, Y, and Z are available in our latest version.”

Taking this approach forces the stakeholder to reveal what they’re really asking and helps you avoid getting burned.

3) Spend Less Time on Threats from Your Competition

This might sound counterintuitive: When your prospect voices an objection based on information from a colleague or competitor, don’t defend yourself or give data. Instead, give a brief answer and move on.

Not only will your confidence reassure the buyer, it’ll also make the claim feel less believable. Dwelling on the objection actually reinforces and validates it.

To illustrate, here’s a hypothetical conversation:

Prospect: “I understand you have some quality issues.”

Rep: “Where did you get that knowledge?”

Prospect: “Competitor X mentioned 3% of your shipments have defects.”

Rep: “That’s incorrect.”

You never want to fight a battle you didn’t plan. If the customer wants to pursue this topic, they will -- but 99% of the time, they’ll be satisfied.

On the other hand, if their objection stems from their own observation, you’ll need to patiently and methodically resolve it. Quickly shutting the objection down will implicitly attack your prospect’s analytical and reasoning skills, which for obvious reasons you don’t want to do.

Here’s how you’d respond in this scenario:

Prospect: “I understand you have some quality issues.”

Rep: “Where did you get that knowledge?”

Prospect: “I remember reading 3% of your shipments have defects.”

Rep: “I see. Our defect rate is actually 0.02% -- I have our latest quality report and can send it to you if you’d like to take a look. Is quality one of your main priorities?”

Salespeople commonly have this ratio flipped: They’ll spend a lot of time answering attacks from their competitors and far less time delving into the prospect’s concerns.

Once you take the opposite tack, you’ll see far more success.

Strengthening your objections strategy will pay major dividends. Not only will you pinpoint and resolve minor concerns before they become full-blown issues, but you’ll empower your prospect, solidify your position as a trusted advisor, and win against the competition.

HubSpot Free Sales Training



April 03, 2017 at 04:34PM

http://ift.tt/2nO910I

from jeff@mjhoffman.com (Jeff Hoffman)

http://ift.tt/2nO910I

The Ultimate Guide to Sales Forecasting

http://ift.tt/2osJZXU

sales-forecast-829336-edited.jpg

Sales forecasting can play a major role in your company’s success. According to research from the Aberdeen Group, companies with accurate sales forecasts are 10% more likely to grow their revenue year-over-year and 7.3% more likely to hit quota.

But despite the advantages, many sales leaders struggle to create sales forecasts that are anywhere near reality.

We’ve compiled an in-depth guide to creating a trustworthy sales forecast -- rather than a wish-cast. Read on to learn:

What Is a Sales Forecast?

A sales forecast predicts what a salesperson, team, or company will sell in a given time period -- weekly, monthly, quarterly, or annually.

Managers use their reps’ individual sales forecasts to estimate how much business their entire team will close. Directors use team forecasts to anticipate sales for the entire department. The VP of Sales uses department forecasts to project sales for the entire organization.

These reports are typically shared with company leadership, along with board members and/or stockholders.

Why Is Sales Forecasting Important?

Sales forecasts allow you to spot potential issues while there’s still time to avoid or mitigate them. For example, if you notice your team is trending 35% below quota, you can figure out what’s going on and course-correct. Maybe your competitor has started an aggressive new discounting campaign, or your new sales comp plan unintentionally encourages bad behavior.

Discovering these problems now -- versus at the end of the month or quarter -- has a huge impact.

Sales forecasts also come into play for a number of decisions, from hiring and resource management to goal-setting and budgeting.

Suppose your sales forecast predicts a 26% increase in opportunities. To make sure you’re keeping up with demand, you should start recruiting. If opportunities are predicted to go down, on the other hand, it would be wise to pause your hiring efforts. Simultaneously, look at bumping up marketing spend and investing in prospecting training for your reps.

In addition, a sales forecast is a powerful motivation tool.

For example, each week you might update your quarterly sales forecast to see if your team is on track to hit its target. You could also create a forecast every day for an individual sales rep on a performance plan to make sure he’s not falling behind.

One of the most important points to remember about sales forecasts: They don’t need to be perfect to be valuable. Your sales forecast will often, if not always, be slightly different from your results. Of course, wildly inaccurate results are problematic -- but if you’re using clean data and have chosen the right method (which we’ll get to), your sales forecast will help you both plan and drive growth.

What You Need for a Sales Forecast

An accurate sales forecast requires the following elements:

  • Individual and team quotas: To gauge performance, you need an objective definition of “success.”
  • A documented, structured sales process: If your reps aren’t consistently using the same stages and steps, you won’t be able to predict the likelihood of an opportunity closing.
  • Standard opportunity, lead, prospect, and close definitions: Everyone needs to agree about when and how to count leads entering and exiting the funnel.
  • A CRM: Reps need a database for tracking opportunities to give you accurate close predictions.
  • Accountability: When a salesperson misses their forecast, do you follow up to figure out why? If not, you’re implying forecasts don’t need to be grounded in reality.

Common Factors Impacting Your Sales Forecast

Watch out for these factors, which you’ll need to account for in your forecast.

Internal Factors:

Hires and fires: When salespeople leave your company -- either because they quit or were terminated -- revenue will decrease unless you have a pipeline of potential hires. If a significant number of reps came on board at one time, your sales forecast should predict a big jump in business when they’ve ramped.

Policy changes: Don’t adjust your sales comp plan without adjusting your forecast. If you implement a four-month clawback on commissions, for example, revenue will decrease because your reps will only sell to best-fit prospects. However, in a quarter when far fewer customers churn, your profits will increase.

Or perhaps you say reps can’t discount after the 15th of every month. You’ll see a spike in close rates in the first two weeks, followed by fewer sales than normal.

Territory shifts: It takes time for reps to familiarize themselves with a new territory and build their pipeline, so expect your close rate to dip before picking up again (assuming you planned your new territories well).

External Factors:

Competitive changes: Unsurprisingly, what your competitors are doing will impact your win rates. If another company in the space slashes their prices, your reps may need to discount more aggressively or risk losing business. If a competitor goes out of business, on the other hand, you’ll probably see increased demand.

Economic conditions: When the economy is strong, buyers are more likely to invest in their businesses. When it’s weak, the sales cycle usually takes longer and there’s a greater level of scrutiny for every purchase.

Market changes: Stay on top of what’s happening with your buyer’s customers. For example, if you sell consulting services to hotels, you’d be interested in an anticipated rise in tourism.

Industry changes: If a complementary solution sees unexpectedly high demand, you’ll probably see your sales go up too. Imagine you sell jelly. The more peanut butter people buy, the more jelly they’ll buy as well.

Legislative changes: New laws and mandates can either help or hurt your business -- either by creating demand for your product or making prospects reluctant to buy anything new.

Product changes: Are you rolling out a highly-requested feature, introducing a new pricing model, or offering a complementary product or service? These changes can help your salespeople increase their average deal size, shorten their sales cycle, and/or win more business.

Seasonality: Your customers might be more likely to buy at certain times of the year. For instance, school districts typically assess new purchases in spring and decide what to buy in fall.

5 Different Sales Forecasting Methods

Not all sales forecasting methods are created equal. Here are the five most common.

1) Opportunity Stage Forecasting

This method accounts for the various stages of the sales process each deal is in. The further along in the pipeline, the likelier a deal is to close; for example, you may find prospects who schedule an initial discovery call are 10% likely to become customers, while those who make it to the demo stage are 30% likely.

Once you’ve picked a reporting period -- usually month, quarter, or year, depending on the length of your sales cycle and your sales team’s quota -- you simply multiply each deal’s potential value by the probability it will close. To illustrate, a $1,000 deal is 40% likely to close, your forecasted amount would be $600.

After you've done this for each deal in the pipeline, add up the total to get your overall forecast.

Although it’s relatively easy to create a sales forecast this way, the results are often inaccurate. This method doesn’t account for the age of an opportunity. In other words, a deal that’s been languishing in your rep’s pipeline for three months will be treated the same as one that’s a week old -- as long as their close dates are the same. You have to trust your salespeople to regularly clean up their pipelines, which isn’t always feasible.

This type of forecast also may rely too heavily on historical data. If you’re changing your messaging, products, sales process, or any other variable, your deals will close at different percentages by stage than they have in the past. And if you don’t have much data to go off of, you’re essentially guessing.

2) Length of Sales Cycle Forecasting

This forecasting method uses the age of individual opportunities to predict when they’re likely to close. For instance, if the average sales cycle lasts six months, and your salesperson has been working an account for three months, your forecast might suggest they’re 55% likely to win the deal.

Because this technique relies solely on objective data rather than the rep’s feedback, you’re less likely to get a prediction that’s too generous. Suppose a salesperson books a demo with a prospect before they’re ready. They might tell you the prospect is close to buying -- but this method will calculate they’re unlikely to buy because they only started talking to the salesperson a few weeks ago.

Furthermore, this technique can encompass different sales cycles. A normal lead might take roughly six months to buy, but referrals could typically need only one month, and leads coming from trade shows may require approximately eight months. You can bucket each deal type by average sales cycle length.

To get accurate results, you’ll need to carefully track how and when prospects enter your salespeople’s pipelines.

If your CRM doesn’t integrate with your marketing software as well as automatically log interactions, your reps will be spending a lot of time manually entering data.

3) Intuitive Forecasting

Some sales managers simply ask their reps to estimate likelihood of closing. The salesperson might say, “I’m confident they’ll buy within 14 days, and the deal will be worth X.”

On the one hand, this method factors in the opinions of the ones closest to prospects: Your salespeople. On the other, reps are naturally optimistic and often offer overly generous estimates.

There’s also no scalable way to verify their assessment. To see whether a prospect is as likely to close as the salesperson says, her sales manager would need to listen to her calls, shadow her meetings, and/or read her conversations.

This method is most valuable in the very early stages of a company or product, when there’s close to zero historical data.

4) Historical Forecasting

A quick and dirty way to predict how much you’ll sell in a month, quarter, or year is to look at the matching time period and assume your results will be equal to or greater than those results.

For instance, if your team collectively sold $80,000 in monthly recurring revenue (MRR) in October, you’d assume they’d sell $80,000 or more in November.

You can make this prediction more sophisticated by adding your historical growth. Let’s say you consistently increase sales by 6-8% each month. A conservative estimate for November would be $84,800.

There are a few issues with this method. First, it doesn’t take into account seasonality. If November is a bad month for sales across the industry, you might end up only selling $70,000 in MRR.

Second, it assumes that buyer demand is constant. But if anything outside of the ordinary happens, your model won’t hold up.

Ultimately, historical demand should be used as a benchmark rather than the foundation of your sales forecast.

5) Multi-Variable Analysis

The most sophisticated forecasting method uses predictive analytics and incorporates several of the factors mentioned, such as average sales cycle length, probability of closing based on opportunity type, and individual rep performance.

Here’s a simplified example to illustrate: Imagine you have two reps, each of which is working a single account. Your first rep has a meeting with Procurement scheduled for Friday, while your second rep just gave her first presentation to the buying committee.

Based on your first rep’s win rate for this stage of the sales process, combined with the relatively large predicted deal size and the number of days left in the quarter, he’s 40% likely to close in this period. That gives you a forecast of $9,600.

Your second rep is earlier in the sales process, but the deal is smaller and she has a high close rate. She’s also 40% likely to close, giving you a forecast of $6,800.

Combine those, and you’d get a quarterly sales forecast of $16,400.

This forecast tends to be the most accurate. However, it requires an advanced analytics solution, meaning it’s not always feasible if you have a small budget. You’ll also need clean data -- if your reps aren’t dedicated to tracking their deal progress and activities, your results will be inaccurate no matter how great your software is.

Sales Forecasting Template

There’s a common theme throughout these sales forecasting methods: Data. Even the most lightweight forecasting options (like #3, intuitive forecasting) relies on knowing how many opportunities are in each rep’s pipeline and their project likelihood of closing.

To keep track of all these details, you can use a free sales forecasting template. We’ve created a sales pipeline tracker that includes:

  • A spreadsheet for tracking which deals are guaranteed, likely, potentially, and unlikely to close this month
  • A monthly revenue forecast that automatically updates with the information you entered in the first spreadsheet
  • A yearly goal tracker so you can monitor your progress

This sales forecasting template is ideal when you’re just starting out. However, if your company is more established, consider using a CRM instead. A CRM will calculate all of the above on its own -- so you don’t need to lift a finger.

Try HubSpot’s free CRM. Not only will it keep track of your actual and predicted revenue, it automatically logs every interaction with prospects -- emails, calls, and social media -- making your ability to gauge the likelihood of a deal closing even more accurate.

With a thoughtful sales forecasting strategy, you can be ready for the future -- whatever it brings.

HubSpot Free Sales Training



April 03, 2017 at 03:32PM

http://ift.tt/2nRvI5y

from afrost@hubspot.com (Aja Frost)

http://ift.tt/2nRvI5y

On Those Who Say You Can No Longer Succeed in Sales

http://ift.tt/eA8V8J

You don’t want to take advice about how to be fit from someone who is not fit. If what they believed was working, they’d be fit. There are a lot of people who can tell you what to do to be fit and healthy—even though they are not these things themselves.

There are even more people who will tell you about money without having any themselves. They too will tell you what you need to do to increase your income and grow your wealth, having never done so themselves. The people who share this advice will share a certain incongruity, their actions will be in stark contrast to their words.

There is (still) a growing cottage industry of sales experts who can tell you how difficult sales is. They’ll tell you that there is no way you can create enough value as a salesperson to be relevant, how buyers have all the power, how outside sales is dead, and how social selling is the only way to create opportunities. They’ll go on about how you can’t win anymore, and how only their product or service can help you.

What you are hearing from these voices is their own experience. They believe sales is too difficult because they found it difficult. They found it difficult to create value, and therefore, difficult to create a preference. In their experience, buyers have more power than sellers, and because they lack the deep chops to sell as a peer, you must also lack that ability.

You will always hear that cold calling is dead from those who cannot successfully use the telephone to schedule an appointment with their dream client. You will hear from those who can’t win that you also can’t win, and that because they aren’t a peer, neither are you. Their truth is not a universal truth. They only perceive it as a universal truth because it is easier for some to believe that external events are responsible for their poor results than to own up those results.

You should not take advice from people who preach the death of sales unless you are also willing to follow their example. To follow their example would be to leave sales and start a business to support other people who are failing in sales with an offering that promises them better results without having to do the work necessary to sell effectively today.

The post On Those Who Say You Can No Longer Succeed in Sales appeared first on The Sales Blog.



April 03, 2017 at 06:21AM

http://ift.tt/2o0VBRc

from Anthony Iannarino

http://ift.tt/2o0VBRc

Sunday, April 2, 2017

Why Salespeople Fail – Episode 77

http://ift.tt/eA8V8J

Salespeople don’t fail because they can’t learn to sell. They fail because they are unwilling to do what is necessary.

The post Why Salespeople Fail – Episode 77 appeared first on The Sales Blog.



April 02, 2017 at 10:00PM

http://ift.tt/2opWnYE

from Anthony Iannarino

http://ift.tt/2opWnYE

Working Harder Won’t Kill You

http://ift.tt/eA8V8J

There was a time when work was grueling. It was dangerous, and it was physically taxing. There was a also a time when that physical labor went on for hours and hours in places like coal mines or factories. At that time, and in that place, it may have been possible to work too hard. It was very possible that you could hurt yourself physically.

Fortunately, this is, for the most part, no longer true (although carrying shingles up to a roof isn’t the most pleasant work you’ll ever do). For the most part, we have tools and technologies and rules and laws that make things a bit easier. More still, we are primarily knowledge workers.

This popular article about the gig economy suggests that we have to be careful not to glamorize hard work and hustle or we risk people taking it to heart and literally working ourselves to death. Literally.

The gig work the article is talking about? Physically demanding jobs like working on an oil rig? Labor intensive jobs in risky settings, like building a skyscraper? Well, not exactly. The work the article is complaining about is work like driving a car and graphic design. Not the kind of work where many people are at risk of dying of exhaustion.

Maybe there was a time when it made sense to suggest to people, “Don’t work too hard,” but if there was a time, that time is long past. The better advice to offer today would be, “Hey, remember to work harder. You’re not going to hurt yourself by working, but you are going to hurt yourself by being lazy and distracted and living in your inbox!”

The truth of the matter is that most people could stand to work a lot harder. It would serve them well, and it would serve their families well, too. They’d make more money, and they’d have a lot less stress and strife in their lives. People that give themselves over to their work are happier, too.

Since the beginning of human life, nature has required that one labor to take care of oneself. This is not a man-made phenomena. It’s not the result of any particular political or economic system. It’s the result of a company organizing people to drive cars, or finding ways to help artists support themselves through their art. It’s what has always been necessary for human beings to live, thrive, and survive, and it will be for some time into the future.

So, work harder. It won’t kill you.

The post Working Harder Won’t Kill You appeared first on The Sales Blog.



April 02, 2017 at 07:19AM

http://ift.tt/2nXVOnY

from Anthony Iannarino

http://ift.tt/2nXVOnY

Saturday, April 1, 2017

Choosing the Right Medium – Episode 76

http://ift.tt/eA8V8J

Email is not the right medium for your most important conversations.

The post Choosing the Right Medium – Episode 76 appeared first on The Sales Blog.



April 01, 2017 at 10:01PM

http://ift.tt/2ou9hBO

from Anthony Iannarino

http://ift.tt/2ou9hBO

Aggregate Tasks and Build Momentum

http://ift.tt/eA8V8J

There are two under appreciated ways to improve your productivity: aggregation and momentum.

Like Work

If you need to make cold calls, doing all the research at once is more effective than doing that same research between calls. By aggregating that work, you focus on a certain type of work, the work of seeking answers to questions you ask yourself before you make a call. Then, you aggregate your calls. By making all your calls together, you get more work done faster.

You might also aggregate work like email and voicemail. You can keep your inbox shut for hours, open it long enough to respond to anything urgent (which is more rare than you might believe), and then save the emails that don’t require an urgent response for a time that makes more sense. I like to respond to email on Wednesday and Saturday mornings, if it is something that doesn’t require an immediate response (you don’t get paid for responding to emails or getting to Inbox Zero).

If you want to be super productive, aggregating your work will help you do more, and it will allow you to do more in less time.

The Big, Big Mo

If you want momentum, do one task for a long period of time. There is something about giving yourself over to a single task that produces a flow state. In that state, you and the work become one, and you get more work done than you imagined. The time passes without you noticing.

Aggregation is what allows you to build momentum.

Back to cold calling. If you want to get really good at making calls, make a lot of calls in a row. With every call, you will get better. Your confidence will grow. After a full day of calls, you will be most effective. You can’t get the benefits of momentum when you are always switching tasks.

I recently got rid of my giant monitors, and now I do everything on a laptop. I have one window open when I am writing. I have one window open when I am editing videos for the YouTube channel. I have two windows open when I process email, but the second window is only open so I can move tasks to Omnifocus, my task manager.

Focus is the discipline of the super-productive.

If you want to get more done, aggregate your work, and focus on one task so that you can build momentum.

The post Aggregate Tasks and Build Momentum appeared first on The Sales Blog.



April 01, 2017 at 07:41AM

http://ift.tt/2orlBTo

from Anthony Iannarino

http://ift.tt/2orlBTo

Infusionsoft vs. HubSpot: Which is the Best Marketing Automation Software?

http://ift.tt/Kc178l

The post Infusionsoft vs. HubSpot: Which is the Best Marketing Automation Software? appeared first on The Sales Lion.

TheSalesLion?d=yIl2AUoC8zA TheSalesLion?d=7Q72WNTAKBA TheSalesLion?d=qj6IDK7rITs TheSalesLion?i=KlA_9ESdJvI:M0aWSRb4PvA:g


April 01, 2017 at 03:27AM

http://ift.tt/2nscrFr

from Marcus Sheridan

http://ift.tt/2nscrFr

Channeling My Inner Millennial

http://ift.tt/2okFYF9

blog_photo.jpg

As a very late Boomer or -- as The New York Times columnist Richard Pérez-Peña likes to call us -- a Boomer reboot, I find that I have Millennials on my mind all the time! I'm not on social networks for 3 hours a day; I'm just an avid user. I sleep with my smart phone on my bedside table, and I'm a pretty good multitasker. I work with a group of phenomenal Millennials at Forrester, and I now clock more than a year in terms of researching, writing, and speaking about Millennials in the workplace. As I think about our team of researchers, I'm reminded of a Forbes quote of the day that Caroline Robertson shared with me recently: "If you put Boomers and Millennials together in the same place and with the right setting and conditions, it's amazing how they spark each other." I wholeheartedly agree.

Check out our most recent report, "Millennial B2B Buyers Come of Age," and see if you agree. Shanta Samlal-Fadelle and I coauthored this report, which looks at the impact that the heads-down generation is having on purchasing decisions for their firms. Although 73% of Millennials in B2B organizations tell us that they have involvement as influencers or decision makers, our research shows that B2B marketing and sales leaders are not paying enough attention to this increasingly present and influential constituency. In the report, you'll hear directly from Millennials regarding their engagement and channel preferences, while Shanta and I provide actionable advice on how to fine-tune your approach to attract, rather than repel, Millennial buyers.

Read more

April 01, 2017 at 02:37AM

http://ift.tt/2mWtu6s

from Mary Shea

http://ift.tt/2mWtu6s

Friday, March 31, 2017

5 Ways You Need to Invest In Yourself – Episode 75

http://ift.tt/eA8V8J

You are the greatest investment vehicle you will ever have. Here are 5 ways you need to invest in yourself.

The post 5 Ways You Need to Invest In Yourself – Episode 75 appeared first on The Sales Blog.



March 31, 2017 at 10:01PM

http://ift.tt/2nnvUq3

from Anthony Iannarino

http://ift.tt/2nnvUq3

Lightning Components Best Practices: Caching Data with Storable Actions

http://ift.tt/2nqZprC

lightning_components_whpxie.pngCaching data at the client side can significantly reduce the number of server round-trips and improve the performance of your Lightning components. Using the Lightning Component Framework, you can access server data using either server actions or the Lightning Data Service. Server actions support optional client-side caching, and the Lightning Data Service is built on top of a sophisticated client caching mechanism. In this article, we focus on server actions and explore how to use them to cache the response of server method calls at the client-side and improve the performance of your application.

In Lightning terminology, a server action is an Apex method that you invoke remotely from your Lightning Component. A storable action is a server action whose response is stored in the client cache so that subsequent requests for the same server method with the same set of arguments can be accessed from that cache.

To make an action storable, you simply call its setStorable() function. For example:

var action = component.get("c.getItems"); 
action.setStorable(); 
action.setCallback(this, function(response) { 
        // handle response 
}; 
$A.enqueueAction(action); 

When an action is marked as storable, the framework automatically returns the response from the client cache (if available) so that the data is immediately available to the component for display or processing. The framework might then call the server method in the background, and if the response is different, invoke the action callback function a second time.

Using storable actions, the cache behavior is controlled by two parameters set internally in the framework :

  • Expiration age: maximum age of the cached response. The cached response is discarded if it is older than the expiration age. In Lightning Experience, the expiration age is currently set to 900 seconds. This value is subject to change, and you can’t change it yourself.
  • Refresh age: maximum age for the cached response to be considered “fresh.” If the cached response is older than the refresh age (and younger than the expiration age), it is provided to the client, but the framework also invokes the server method in the background to refresh the cache. If the new response is different from the cached response, the action callback function is called a second time. In Lightning Experience, the refresh age is currently set to 30 seconds. Like the expiration age, this value is subject to change, and can’t be changed.

Storable action scenarios

Here are the possible scenarios when invoking a storable action:

Scenario 1: The response is not available in the cache (or has expired)

storable-1_ejutvh.png

  1. The component calls a server method
  2. The framework checks if the response is available in the cache
  3. The response isn’t available in the cache or is expired (cached response age > expiration age)
  4. The framework calls the server method
  5. The server returns the response
  6. The framework caches the response
  7. The framework calls the action callback function providing the server response

Scenario 2: The response is available in the cache and doesn’t need to be refreshed

storable-2_jspynq.png

  1. The component calls a server method
  2. The framework checks if the response is available in the cache
  3. The response is available, and doesn’t need to be refreshed (cached response age <= refresh age)
  4. The framework calls the action callback function, providing the cached response

There is no server round-trip in this scenario—a nice performance win!

Scenario 3: The response is available in the cache and needs to be refreshed

storable-3_jeeof9.png

  1. The component calls a server method
  2. The framework checks if the response is available in the cache
  3. The response is available in the cache and needs to be refreshed (cached response age > refresh age)
  4. The framework calls the action callback function providing the cached response
  5. The framework calls the server method to get a fresh response
  6. The server returns the response
  7. The framework updates the cache with the new response
  8. If the server response is different from the cached response, the framework calls the action callback function for the second time with the updated response

What should you cache?

Caching is a trade-off between performance and data freshness. However, remember that even without caching, there is no such thing as guaranteed fresh data: when you call a service, the data may already have changed by the time the response reaches the client.

The storable actions feature mitigates the possibility of stale data with its “trust and verify” model: when the cached response is older than the refresh age (and younger than the expiration age), it is returned to the calling component, but the framework also verifies that the data is still fresh by making a call to the server in the background.

The general guideline is to cache (mark as storable) any action that is idempotent and non-mutating.

An idempotent action is an action that produces the same result when called multiple times. For example:

  • getPage(1) is idempotent and should be cached
  • getNextPage() is not idempotent and should not be cached

A non-mutating action is an action that doesn’t modify data. Never cache an action that can create, update, or delete data. For example:

  • updateAccount(sObject) is mutating and not idempotent and should not be cached

Caching the right (idempotent and non-mutating) server actions can significantly improve the performance of the overall application even if the benefits are not obvious when you look at a component and a server action in isolation. The cache spans the entire application. If a user loads page 1 where component A invokes Apex method X, and then navigates to page 2 where component B invokes the same Apex method X, the response is served from the cache (if the cached response is younger than the refresh age). Similarly, if the user navigates back to page 1, component A again gets Apex method X’s response from the cache.

Let’s consider another example: a paginated list of items with Next Page and Previous Page buttons to navigate through the list. Every time the user clicks the Next Page or Previous Page button, the component invokes the getPage(pageNumber) method in the component’s Apex controller. Marking the getPage() action as storable ensures that each page is only retrieved once from the server. Subsequent requests for the same page are served from the cache (see Tracing Performance of Actions below for a detailed breakdown of this use case).

Storable actions vs Lightning Data Service vs custom cache

Server actions allow you to access data using a traditional service approach. You implement some logic in Apex that you expose as a remotely invocable method. Storable actions allow you to cache virtually anything (whatever the server method call returns): a record, a collection of records, a composite object, a custom data structure, data returned by a callout to a third-party service, and so on.

Lightning Data Service (currently in Developer Preview) provides a managed record approach. In other words, you are not responsible for writing any data access logic (no Apex code to write). The framework is responsible for managing records: fetching them from the server when requested the first time, storing them in a highly efficient client cache, sharing them between all components that request them, and sending changes to the server. Unlike storable actions that can cache any type of response returned by an Apex method, the Lightning Data Service caches discrete Salesforce sObjects (record collections are on the roadmap).

You can also implement your own custom cache approach. As always, make sure you don’t reinvent the wheel and only use a custom cache approach when there is no standard way to implement your caching requirements in the framework. (See the Modularizing Code in Lightning Components post for strategies to implement a custom cache.)

Caching Requirements Recommended Solution
Single record Lightning Data Service
Collections of records, composite responses, custom data structures, third-party data Storable actions
Complete control over caching implementation Custom cache

Tracing performance of actions

You can use the Chrome Developer Tools to examine network traffic. It’s particularly interesting to watch when the server method is called and when it’s not (see storable action scenarios above).

You can also use the Lightning Inspector, which can provide detailed information about the characteristics of each action invocation as illustrated in this screenshot.

inspector_v4yf73.png

Of course, you can also use console.log() to measure the performance of action invocations. Note that, in this case, you can’t distinguish between time spent in the client queue, time in transit, and server execution time. For example, here is how the findAll() method is called in the PropertyTileList component in the DreamHouse sample application:

var action = component.get("c.findAll"); 
var page = component.get("v.page"); 
action.setStorable(); 
action.setParams({ 
    "page": page 
}); 
action.setCallback(this, function(response) { 
    console.log("Page %d loaded in %fms",  
        page, 
        performance.now() - startTime); 
    // handle response 
}; 
var startTime = performance.now(); 
$A.enqueueAction(action); 

Here is a screenshot of the browser console when findAll() is invoked repeatedly in response to the user clicking the Next Page and Previous Page buttons to navigate through the list:

console-1_gopdao.png

Note that the first calls to the server to get page 1 and 2 take just under 200 milliseconds. Subsequent calls are virtually instantaneous because they are served from the cache.

Summary

Client-side data caching is one of the most impactful things you can do to improve the performance of your Lightning components, and storable actions makes it easy to implement for many use cases. Try it in your own components, and let us know the difference it makes for you.

Resources

SforceBlog?d=yIl2AUoC8zA SforceBlog?d=qj6IDK7rITs SforceBlog?i=-xW2Laz9wls:mHIJW4dnsZI:V_s SforceBlog?i=-xW2Laz9wls:mHIJW4dnsZI:F7z SforceBlog?d=l6gmwiTKsz0


March 31, 2017 at 06:36PM

http://ift.tt/2ogZuSp

from Christophe Coenraets

http://ift.tt/2ogZuSp