Request demo

Amplemarket Blog

Anything and everything you’re looking for to grow your business. You ask it, we talk about it.

How to define your Ideal Customer Profile

October 5, 2022

Understanding your company’s Ideal Customer Profile (let's call it ICP from now onwards) is an essential component of any Go-To-Market strategy. Despite this, companies often forget to define their ICP or if they do, they rush into an inaccurate draft of their ideal ICP. That's why the number one exercise I typically have new customers perform is a deep dive and breakdown of their ICP. But before we jump into any more details, you may be wondering: ### What is an Ideal Customer Profile? Ultimately, an ICP is an identification of the demographic/characteristics of the customers who are the best fit for your company. This includes size, industry, location, behaviors, situations, and many more. <iframe width="560" height="315" src="https://www.youtube.com/embed/zrYsW6Yh2gU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ### Why is an ICP important? One of my favorite answers when asking customers about their ICP is: *“Our ICP is anyone with a pulse.”* But that isn’t true. It is an impossible task to attempt to solve a problem for everyone out there. In fact, in the beginning, it’s actually more detrimental to target “everyone" than to focus your efforts on reaching out to those who can benefit more from your product or solution. By not having a clear picture of who your ICP is, you’ll end up acquiring customers that you provide very little solutions for and will have to spend more resources to acquire them. ### How to define your ICP? You’re probably reading this article because you are working on starting a campaign and/or you are trying to iron out an ideal customer profile to target. Well, the first step to doing so is very simple. Do you have any customers yet? If not, stay tuned. I'll have more for you. If so - start there! Go through your customer list and identify who is the happiest, who's been around the longest, or who was the easiest sales process. My favorites to take note of are the company's: * Location * Size * Industry * Department you work with * Their business model * Their customers * Problem you solve for them See if you can identify any trends, as the most common traits are found in your current ideal customer profile! Our next job is going to be how to find and meet every clone of this customer out there. If you are pre-revenue (or aren’t confident you have a core customer group), don't worry! What you are going to need to do is start running some tests on outbound campaigns. The goal of the test is to identify **what messaging or value prop resonates best with a demographic**. However, this test's main key is eliminating as many variables as possible. Make some educated guesses on one factor you want to test (for example, industries) and that you think you could help, and run the same campaign on all of them, across multiple titles. Collect responses from these campaigns and gauge the sentiment to see which group your product/service resonates better with. Now, if you’ve made it all the way through this article, here’s where I get to shamelessly plug how [Amplemarket ](https://amplemarket.com)makes this process a piece of cake. Below is my favorite campaign to run for companies looking to identify their ICP (and book some meetings during the test!). Create a list in the Amplemarket Searcher of * Companies across: * 3-4 different size ranges (I usually go 1-10, 11-50, 51-200, 201-500) * 2-3 preferred Industries * If you have a knowledge-based business model like consulting, use keywords to narrow it down. * With People filters including: * Director and above * Department of choice * Recently changed jobs/companies in last 3 months The “recent change” is the most important aspect when focusing your outreach as this becomes the key component of this campaign. Reaching out to recent job/company individuals in our research is one of the more successful campaigns. **If 10% of your industry’s decision-makers have changed jobs, those are the first 10% you should reach out to.** It creates the natural urgency generated from the “why” we are reaching out, as well as the “why you.” This leads to **higher open rates** and reply rates - critical for us to collect feedback from the test. 1. Create a **multi-channel sequence** (email, Linkedin, and phone) with 2-3 steps for each channel 2. Remember to **mention how you found the lead**! I usually put something along the lines of “Congrats on the new job - curious if this is a chance to review {your service or product type} - am I on the right track? 3. **Ask for a feedback** meeting rather than a sales process demo. While we do want to get leads into a sales process, we want more volume of meetings to collect this crucial feedback on the response to our offering. 4. Bonus points if you can incorporate **Liquid syntax** through the copy that changes the messaging by title, industry, department, and more. Run 100-200 leads through this sequence and review the results. Did we get responses? Were they interested? Both of these results will tell you quite a bit! Iterate on your messaging to test tweaks to see if it makes a difference, but let [Amplemarket](https://amplemarket.com) handle the rest to deliver your meetings/responses to determine which companies like your product/service the most. <iframe width="560" height="315" src="https://www.youtube.com/embed/I3HTmU22t88" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> ### 4 Benefits from having an accurate ICP 1. **Laser-focus your [outreach](https://amplemarket.com/prospecting-and-data)**, making the most of your available resources. 2. **Decrease your CAC** (Cost per Acquisition). By optimizing your resources and reaching out to leads that are a better fit for your company, you'll be able to decrease the efforts invested in acquiring customers. 3. **Have happier customers** that are a better fit for your company. 4. **Decrease your churn rate**. It's simple, happy customers stay longer, so why not do it right from the top? In summary - finding your ideal customer profile is one of the most important first steps in any sales campaign. In my opinion, the real reason why no one is responding or booking meetings with your outbound campaigns is not the copy, but just the fact that they aren’t the right ICP. Stay scientific in how you test, be curious and creative, and happy outbounding!

READ MOre
Arrow

Using Pulumi to deal with growing pains

September 20, 2022

**Amplemarket** has witnessed incredible growth in the last year, and a lot of it is due to the constant pace of innovation within the product. This not only reveals the great talent we hold within the engineering team, designers, and all the stakeholders contributing to the product, but it also shows the agility of our Product Engineering organization that is essential to growing the team. Even if we are more inclined towards choosing simplicity in the technology of our infrastructure, it was unavoidable to increase the complexity in a few areas to be able to operate at scale. Particularly in the area of databases. These are critical pieces of the puzzle in regards to: 1. **Elasticity** As the business grows, we need the infrastructure to store and serve all our data that is also growing, and it's critical to have ways to easily increase the storage and compute capacity of our databases. 2. **Redundancy** Running business-critical services means that it is simply not acceptable to have downtimes caused by having single points of failure. High availability is paramount for any piece of infrastructure our service depends on. 3. **Upgrades** As the software evolves we want to take advantage of the latest advances in the technologies we use, with the minimum amount of effort. It is also essential for us to make sure that any security vulnerabilities found in such software are tackled as soon as mitigations are made available. 4. **Privacy** We take our customers' data very seriously and use industry best practices to keep it secure. Encryption of data at rest is a must-have. 5. **Backups** We need to be prepared at all times. All our data needs to be backed up in multiple locations in a secure way allowing us to quickly recover from a potential failure caused by the application or our cloud provider. ## Dealing with growing pains The cloud has become a gift from heaven for engineering teams. It has helped scaling startup businesses around the globe for the last decade, thanks to how easy it is to spin up machines and host software that scales with increasing demand. However, the scrappy nature of early-stage startups means that not all cloud resources are created equally and, some cases, have required a few configuration tweaks and short-term optimizations that have led to solutions that make the previous properties hard to achieve. At Amplemarket, even if our team is characterized by it's strong ability to quickly respond and recover from incidents, we started noticing it getting harder and harder to predict future bottlenecks in the infrastructure to be able to limit or avoid any impact. There were a few reasons for this to be happening, and it was time to take action: - The infrastructure was created manually - Running Redis instances on GCE directly - Lack of monitoring of critical performance indicators - There were knowledge silos between team members - Configuration drift between environments and instances of the same service ## Automating the cloud with Pulumi When we started to evaluate options to automate our infrastructure, it was important for us that: 1. There was good support for managed GCP services 2. There was an ability to declare infrastructure as code 3. We could preview changes before being applied 4. Support for testing changes across environments 5. All changes requiring a review step with peer feedback 6. Changes applied automatically through CI pipelines There were two main platforms that stood out and meet these requirements: **Terraform**, the industry sweetheart for Infrastructure as Code from Hashicorp, and **Pulumi**, the new kid in town with some extra niceties but following a similar philosophy: *We, the user, declare the resources we need and it, the tool, will figure out the state of your cloud at any point in time and do the minimal changes required for it to match your desired final state.This way, it will abstract each individual cloud provider’s APIs giving you, the user, a lingua franca for describing your infrastructure.* ### The reasons The differentiator that Pulumi has is that instead of giving such abstraction in a proprietary and somewhat limited domain-specific language (HCL is what it is called in Terraform), its creators went on and gave you the full power of a programming language to describe your infrastructure. In fact, they give you six platforms (Node, Python, Go, .NET, Java and YAML) that are kept on an equal footing in regards to features, and allow you to pick your poison (aka programming language) to do your actual infrastructure *as code*. Now, there may be philosophical reasons to decide whether one approach or the other is better, but we went with a pragmatic one: our relatively small engineering team is made out of generalist software engineers (we don’t have dedicated infrastructure engineers yet) and writing programs in maintainable and reusable ways is what we do best. Pulumi offered us an approachable option with a small learning curve that matched our skills. It was also important for us to see how the tool has matured in the last few years since its inception and keeps a healthy pace of updates and innovations, but also how they cleverly make use of all existing open source Terraform modules and convert them to Pulumi packages, thus offering similar reach in supporting a significant number of cloud services out there. ## Rolling out a pilot with managed Redis We had to start somewhere and we decided to start with Redis because we had a maintenance burden in our most critical cluster and lacked some of the properties identified in the first section of this article: we managed its instance operating system directly and it was falling behind in updates, its setup was not highly available since we relied on disk persistency and we were reaching the memory limits of this machine. Since Redis is a managed service offered by GCP, creating a Redis cluster in Pulumi was quite straightforward. Here’s a code snippet from our codebase that handles all our Redis service creation at Amplemarket: ```tsx export function createRedis(config: RedisConfig): gcp.redis.Instance { return new gcp.redis.Instance(config.name, { name: config.name, displayName: config.name, memorySizeGb: config.memory_gb, authEnabled: true, tier: config.tier, maintenancePolicy: { weeklyMaintenanceWindows: [{ day: config.maintenance_window_day, startTime: { hours: config.maintenance_start_hours, minutes: config.maintenance_start_minutes } }] }, redisConfigs: getRedisConfig(config), redisVersion: config.redis_version }); ``` We define a `gcp.redis.Instance` and fill in its arguments from a configuration structure that can vary between different clusters while keeping some sensible and secure defaults, even enforcing security policies through code with fixed parameters like `authEnabled`. The configuration structure is filled and since Typescript is type-checked from a simple YAML configuration, as the following `Pulumi.staging.yaml` shows: ```yaml ampledash-infra:redis: - name: redis-sidekiq active_defrag: true maintenance_start_hours: 8 maintenance_start_minutes: 0 maintenance_window_day: SUNDAY max_memory_policy: noeviction memory_gb: 2 redis_version: REDIS_6_X tier: BASIC ``` ### Stacks as bags of configuration Pulumi allows configuration options to be created by the environment through a structure that they call stacks. These are logically segregated sets of configurations that can be applied independently by using Pulumi CLI commands. In our case, and since we have a staging and production environment, we have created two stacks: `Pulumi.staging.yaml` and `Pulumi.production.yaml`. ```bash pulumi stack init production –copy-config-from staging ``` Once we configure Pulumi’s credentials (using a `PULUMI_ACCESS_TOKEN` env var) and log into our cloud provider in the shell, we can preview the creation of our cluster with `pulumi preview` and, if everything checks out, we can make it real with `pulumi up`. After a few seconds, your managed cloud infrastructure just got a new resource. Go check your GCP Console and it should be there. ### Enabling an unsupported beta feature By moving to a cloud-managed Redis service and having its lifecycle managed with Pulumi we had already achieved many of the properties that led us to this journey but one, in particular, was still a challenge: a highly available setup of Redis implies a real-time replica always running alongside the main server but, if for some unlikely reason, we would lose both of them at the same time it could mean data loss and we don’t want that. Our previous setup by relying on disk persistency - which was automatically backed up at the filesystem level, always gave us a way to recover to a previous point in time. It happens that Google's managed Redis service, supports a feature that gives us just that, called RDB snapshots: [https://cloud.google.com/memorystore/docs/redis/rdb-snapshots](https://cloud.google.com/memorystore/docs/redis/rdb-snapshots). However, at the time, this was still a beta feature from Google’s service, and no native Pulumi support existed to enable it. Given the fact that a Pulumi program is really just a Node app, we could theoretically just shell out to the corresponding `gcloud` command using the `child_process` package: ```tsx const cp = require('child_process'); // Hack to enable persistence config for RBS function updatePersistenceConfig(instance) { let region = new pulumi.Config("gcp").require("region"); const command = `gcloud beta redis instances update ${instance} --quiet --region ${region} --persistence-mode=${config.persistence_mode} --rdb-snapshot-period=${config.snapshot_period}` if (pulumi.runtime.isDryRun()) { pulumi.log.info(command); } else { cp.execSync(command); } } redis.id.apply(updatePersistenceConfig); ``` This code does a few things. Let’s review them step by step: 1. First, we declare the dependency on `child_process` in order to use execSync to shell out a command. 2. We prepare the command given an instance id and interpolate the specific persistence mode options from the configuration structure. 3. We then go ahead and apply it only when this is not a Pulumi dry run (which is what happens when `pulumi preview` is run). 4. The last line is a consequence of the async nature of Pulumi resource management, where it optimizes the runtime to do as many operations in parallel as possible. Thus, we need to create a causal relationship to only run this code once the declared redis instance is actually created and has an id output already calculated. This worked and we were able to abstract our Redis cluster creations with Pulumi, leading to a successful rollout of four new clusters in production. ### Be a good Pulumi citizen with the `local.Command` package Even if this worked, the previous code had a slight nuisance: every time we would run a `pulumi up` command to create or update any resource, even if given Pulumi’s minimal diff application of changes it meant that no Redis cluster had to change, we would always re-apply the RDB snapshot setting. This was not a big problem given its idempotent nature, but running it for every Redis cluster on every execution was causing slower runs and unnecessary noise in our cloud audit logs. As our understanding of Pulumi increased, we noticed that the local.Command package that they offer has built-in lifecycle control for resources created from shell commands. This was exactly what we wanted, given that our RDB setting was actually a sub-resource of a Redis resource that would follow the same lifecycle: we set it on cluster creation and don’t need to further change it, so running the command in tandem with the actual Pulumi-managed cluster was what we really wanted. This was fairly straightforward to pull out with the following code: ```tsx if (config.persistence_enabled) { new local.Command(`${config.name}-rdb`, { create: pulumi.interpolate`gcloud beta redis instances update ${instance.id} --quiet --region ${stackDefaultRegion} --persistence-mode=${google.redis.v1.PersistenceConfigPersistenceMode.Rdb} --rdb-snapshot-period=${config.snapshot_period} 2>&1`, delete: pulumi.interpolate`gcloud beta redis instances update ${instance.id} --quiet --region ${stackDefaultRegion} --persistence-mode=${google.redis.v1.PersistenceConfigPersistenceMode.Disabled} 2>&1` }, { parent: instance }); } ``` Voilà! Pulumi was now happy to manage our Redis beta feature for us! ## Final Thoughts From PoC in a week, to reaching production with confidence the week after, we’re super impressed by Pulumi’s focus on the developer experience and general ease of use. We have since expanded our usage of Pulumi to manage our infrastructure and have a GitHub Actions-powered workflow with automatic PR previews that is a breeze to use. We will be sharing more insights in follow-up blog posts, as the experience has been quite positive. It also allowed us to have all our infrastructure configurations in a single place and become systematic about what and how to monitor these resources in production. This approach allowed our team to become much less reactive to failures in production and move to a more proactive cloud management practice, where we: 1. Get alerted of approaching limits in the infrastructure 2. Easily test upgrades 3. Securely rollout configuration changes 4. Quickly scale up instances 5. Reuse building blocks when adding new infrastructure And by doing so, we can focus on adding new features to our product and keep empowering Sales teams across the globe. ***Note:** We're still hiring an Infrastructure Engineer, so if you found this article your type of thing, please do reach out. It may so happen you’ll be the right person to help us improve and build on top of this setup.*

READ MOre
Arrow

The Growth ABC, Level 3 | Amplemarket

August 29, 2022

<iframe width="560" height="315" src="https://www.youtube.com/embed/sQtfP7R7Y4k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> What are people in sales, growth, startups, and marketing teams talking about? Leads, prospects, contacts, opportunities, accounts, and clients are all terms for the same thing in different stages. I know confusing. Keeping up with the terminology can be challenging, and that's why we created this ABC spinoff that will help you relax, have a laugh and learn some new words you can put into practice today with your colleagues. But if you are new to this blog and you haven't heard about the previous [Level 1](https://blog.amplemarket.com/the-growth-abc-amplemarket/) and [Level 2](https://blog.amplemarket.com/the-growth-abc-level-2/) Growth ABC's , go and get caught up before dive into this blog. Let's go! **A - Account** An account is a synonym for a customer profile. A space where the client’s information is recorded and tracked to understand their individual needs and preferences better. In some cases, you can hear your peers talking about an account as a client. **B - Bad leads** These are people who either got in contact with you or you contacted them but do not match your customer profile. These are also called low-qualified leads or unqualified leads (depending on your criteria). **C - Commission** The fee or percentage of a sale that salespeople get paid after closing a deal. The commission can vary from company to company, industry to industry, and sometimes from job category to job category. **D - Discount, Discovery, Dialer** A discount is a special lower price made to a client of closing the sale. Clients love a good ol’ discount. A discovery call is the first call that a salesperson or an SDR makes to a potential lead to identify if they are qualified and ready to move on through the sales pipeline or not. The dialer is a computer software, application, or electronic device that automates the process of making phone calls. **E - EOD, EOW, EOM, EOQ & EOY** These acronyms refer to End Of X. For example End Of The Day (EOD), End Of The Week (EOW), End Of the Month (EOM), and so on. **F - Forecast** It is the prediction or calculation of a trend or event likely to occur in the future based on qualitative, quantitative, and historical data as well as emergent but relevant factors. Forecasts can be used to predict future sales, and future revenue, or to identify future opportunities. **G - GOAT** Stands for Greatest Of All Time **H - Hard sell** This was a sales tactic popular in certain industries in which the salesperson instead of understanding and addressing the prospect's objections would challenge them. It’s an aggressive approach to sales that is no longer popular, however, some niches still find this strategy a great way to generate pressure and close more deals. **I - Inbound Sales** The process, method, or transaction wherein purchases occur as a result of customers directly approaching, engaging, and embracing your brand. These are usually led by marketing strategies where the brand is positioned to match the prospect's needs and to lead these initiate themselves the sales process. **J - Judo Business Strategy** This business strategy, it’s based on the principle of utilizing it is designed to give smaller companies an advantage by using their nimbleness and ability to respond more quickly to market changes as a competitive advantage. **K - KPIs** It stands for Key Performance Indicators, basically guiding numbers that indicate the performance of a team, a project, or even an organization. **L - Leverage** Something you use in order to get something else that you want. For example, you could use all the work, time, and successes you’ve had over the course of a year to ask for a pay rise. **M - Multichannel Sequence** This means that the sequence of actions that are designed to get in touch with a potential client happens throughout more than 2 channels. For example, you may plan to connect with someone on Linkedin, send them a personal message, and then send them an email, after that you’d like to give them a call and schedule a follow-up email right after. These sequences target prospects in different channels, hence they are multichannel sequences. **N - Needs Assessment** Is the process of analyzing a system, person, function, or organization to determine what the entity lacks to achieve a desired state or outcome. Normally, throughout this process, you identify and classify specific needs and their level of importance. **O - Opportunities** These usually refer to SQLs (Sales Qualified Leads) and indicate that a prospect has a higher likelihood of opting in, subscribing, or making a purchase based on a set of criteria. **P - Product-Led Sales** This means that the product is the main source of attraction for new leads. **Q - QBR** Quarterly Business Reviews or QBR explores the impact of the business’s product or service on the customer. The sales QBR focuses on sales performance and the forecast. Sales managers reconnect with sales development reps (SDRs) to better understand what worked last quarter, and what didn’t, and how to set up the next quarter for success. **R - RFP** Is the acronym for Request for Proposal. **S - SLA** A service level agreement or SLA is the outlining of the responsibilities and work assigned within the growth efforts to sales and marketing. This promotes accountability, alignment, and better coordination to achieve common goals within both teams. **T - Triggers** These are a set of signals or occurrences that meet certain criteria to be considered an opportunity to make a sale. **U - Upselling** Upselling is the action of increasing the purchase of a client by offering a higher valued product or additional service/products. This increases the profitability in the acquisition of a client and may also open the opportunity for a client to buy a product or service that they weren't previously aware of. **V - Value proposition** Is a statement or message that encapsulates the reasons — such as benefits and unique attributes — consumers would want to patronize a brand or purchase a product. **W - Weighted Pipeline** An in-depth interpretation of the sales pipeline, where leads are valued according to the step they're in within the sales process. **X - X-Mark Signature** If an individual is not able to fully sign under their name a legal document, an X signature may be conducted under the testimony of a person in lieu. **Y - Yield** To yield means to produce benefits out of something else. When you produce revenue in a company you are yielding your efforts. **Z - Zero-Cost Strategy** This is a strategy that did not cost you a cent, and can still make profits. These are great ways to A/B test hypotheses and test products or services without having to put a monetary investment behind them. As you learn all these terms you'll be able to communicate more effectively with your team, clients and fellow peers in the industry. This vocabulary is always evolving and although you'll have a pretty good base from our Growth ABC's, there are always new strategies, activations, or actions that lead us to the new way of doing sales.

READ MOre
Arrow