Tuesday, April 25, 2017

The 3 SaaS Metrics That Matter (& How to Improve Them)

SaaS metrics

If you’ve worked with software as a service (SaaS) companies recently, you’ve probably heard the acronym KPI, which stands for key performance indicator. It’s a fancy way to refer to the essential metrics for tracking the success of your business.

But if you do a simple search for the term SaaS KPIs, you’ll find thousands of pages with differing information on what you should and shouldn’t track within your company. While there’s technically no limit to the number of metrics you can measure at once, to remain focused you’ll want to keep the count at ten or lower.

What Makes SaaS Companies Unique

It’s worth noting a few factors that make SaaS projects different from traditional software businesses. The first major difference is that most subscription-based SaaS businesses take a financial loss early on and build up their revenue over time.

With these businesses it’s not enough to acquire customers. You also need to keep them hooked.

Simply put, SaaS companies need to deliver exceptional service because it’s so easy for customers to jump from product to product. With SaaS offerings, month-to-month billing is the norm, although it’s also common to offer annual billing at a slight discount (usually 10% to as much as 30%).

Customer Acquisition Costs

Cost per acquisition or customer acquisition cost (CAC) has become one of the more popular metrics companies use to track the performance of campaigns run on the web. CACs are important to investors and companies for a variety of reasons.

Investors use the information to analyze the scalability of new businesses, to determine profitability. This is done by looking at the differences between how much money can be extracted from customers and the costs of the extraction process.

In the case of online businesses, investors are concerned about the current state of this metric, not necessarily ways to improve it over time. If the cost to acquire a customer is too high already, then it’s a sign your business model needs to be changed. For marketing and internal departments within businesses, they use this metric to determine the return on advertising campaigns. In English, if the costs to acquire money from customers decrease, the profit margins of the software company increase.

Before you start calculating these figures, one of the first things you need to do is develop your audience personas. These will enable you to understand the needs of your audience so you’re better able to meet the needs of your target audience. They also help you develop your unique selling proposition (USP) — the killer reason for customers to start using your product and potentially switch from a competitor.

As far as your actual visitors go, short of being psychic, you can easily get inside the minds of your users by using heatmaps and session tracking systems on your website. While it’s a topic beyond the scope of this article, the main benefits of these systems are that you’re able to spot potential user experience issues which don’t appear in standard analytics dashboards.

Customer acquisition costs can be calculated by dividing marketing expenses by the number of customers acquired during the chosen time. For example, if a company spent $200 on marketing in a year and acquired 400 customers, the CAC is $0.50.

If your costs are too high, you could explore using retargeting to drive more conversions. When customers visit your site, but don’t complete the checkout, retargeting enables you to display targeted messages to the prospect as they browse the web. Since most SaaS purchasing decisions occur over time, retargeting is a great way to maintain visibility with minimal cost.

Customer Lifetime Value

One of the biggest mistakes business professionals make today is assuming that all leads are equal. Take giveaways for example. You might run a contest and collect a thousand email addresses – sounds great on paper, but how many of those people will actually respond to your offers? Are you reaching prospects who are interested in your product or did they just sign up for the free giveaway? Those are just a couple of the questions many business owners fail to ask when they’re developing their marketing campaigns.

Continue reading %The 3 SaaS Metrics That Matter (& How to Improve Them)%


by Charles Costa via SitePoint

The Ultimate Angular CLI Reference Guide

A large, bible-like Angular CLI reference book on a stand


2017.04.25: As of March 24, Angular CLI v1.0 was released. This article has been updated to reflect the latest changes. If you want to add the latest features of Angular CLI v1.0 to your existing Angular project that was generated with an earlier version of Angular CLI, check out the Angular CLI v1.0 migration guide.

2017.02.17: As of February 9, 2017, the ng deploy command has been removed from the core of Angular CLI. Read more here.

2017.01.27: As of January 27, 2017, the official recommendation is to use the name AngularJS for any 1.x release and the name Angular for any 2+ release. This article has been updated to reflect the official branding guidelines.


This is the preliminary article in a 4-part series on how to write a Todo application in Angular.

  1. Part 0— The Ultimate Angular CLI Reference Guide
  2. Part 1— Getting our first version of the Todo application up and running
  3. Part 2— Creating separate components to display a list of todo's and a single todo
  4. Part 3— Update the Todo service to communicate with a REST API
  5. Part 4— Use Component Router to route to different components

On September 15, 2016, Angular Final was released.

Where AngularJS 1.x was limited to a framework, Angular has grown into an ambitious platform that allows you to develop fast and scalable applications across all platforms such as web, mobile web, native mobile and even native desktop.

With this transition to a platform, tooling has become more important than ever. However, setting up and configuring tooling is not always easy. To make sure Angular developers can focus on building applications with as little friction as possible, the Angular team is putting a lot of effort into providing developers with a high quality development toolset.

Part of that toolset are close integrations with a wide array of IDEs and editors. Another part of that toolset is Angular CLI.

In this article we have a look at what Angular CLI is, what it can do for you, and how it performs some of its magic behind the scenes. Even if you already use Angular CLI, this article can serve as a reference to better understand its inner workings.

Technically you are not required to use Angular CLI to develop an Angular application, but its many features can highly improve the quality of your code and save you a lot of time along the way.

So let's get started!

What Is Angular CLI?

Angular CLI is a Command Line Interface (CLI) to automate your development workflow. It allows you to:

  • create a new Angular application
  • run a development server with LiveReload support to preview your application during development
  • add features to your existing Angular application
  • run your application's unit tests
  • run your application's end-to-end (E2E) tests
  • build your application for deployment to production

Before we have a look at each of the above in detail, let's first see how you can install Angular CLI.

Prerequisites

Before you can use Angular CLI, you must have Node.js 6.9.0 and npm 3.0.0 or higher installed on your system.

You can download the latest version of Node.js for your operating system and consult the latest installation instructions on the official Node.js website.

If you already have Node.js and npm installed, you can verify their version by running:

$ node -v # => displays your Node.js version
$ npm -v # => displays your npm version

Once you have Node.js installed, you can use the npm command to install TypeScript:

$ npm install -g typescript@2.2.0

Although TypeScript is technically not an absolute requirement, it is highly recommended by the Angular team, so I recommend you install it to make working with Angular as comfortable as possible.

Now that you have Node.js and TypeScript installed, you can install Angular CLI.

Installing Angular CLI

To install Angular CLI, run:

$ npm install -g @angular/cli

which will install the ng command globally on your system.

To verify whether your installation completed successfully, you can run:

$ ng version

which displays the version you have installed:

@angular/cli: 1.0.0
node: 6.10.0
os: darwin x64

Now that you have Angular CLI installed, let's use it to create a new application.

Creating a New Angular Application

There are two ways to create a new application using Angular CLI:

  • ng init: create a new application in the current directory
  • ng new: create a new directory and run ng init inside the new directory

So ng new is similar to ng init except that it also creates a directory for you.

Assuming you haven't created a directory yet, let's use ng new to create a new project:

$ ng new my-app

Behind the scenes, the following happens:

  • a new directory my-app is created
  • all source files and directories for your new Angular application are created based on the name you specified (my-app) and best-practices from the official Angular Style Guide
  • npm dependencies are installed
  • TypeScript is configured for you
  • the Karma unit test runner is configured for you
  • the Protractor end-to-end test framework is configured for you
  • environment files with default settings are created

You will learn more about each of these aspects in the following sections.

At this point you have a working Angular application and your new directory my-app looks like this:

.
├── README.md
├── e2e
│   ├── app.e2e-spec.ts
│   ├── app.po.ts
│   └── tsconfig.e2e.json
├── karma.conf.js
├── package.json
├── protractor.conf.js
├── src
│   ├── app
│   │   ├── app.component.css
│   │   ├── app.component.html
│   │   ├── app.component.spec.ts
│   │   ├── app.component.ts
│   │   └── app.module.ts
│   ├── assets
│   ├── environments
│   │   ├── environment.prod.ts
│   │   └── environment.ts
│   ├── favicon.ico
│   ├── index.html
│   ├── main.ts
│   ├── polyfills.ts
│   ├── styles.css
│   ├── test.ts
│   ├── tsconfig.app.json
│   ├── tsconfig.spec.json
│   └── typings.d.ts
├── tsconfig.json
└── tslint.json

Available Options

  • --dry-run: boolean, default false, perform dry-run so no changes are written to filesystem
  • --verbose: boolean, default false
  • --link-cli: boolean, default false, automatically link the @angular/cli package (more info)
  • --skip-install: boolean, default false, skip npm install
  • --skip-git: boolean, default false, don't initialize git repository
  • --skip-tests: boolean, default false, skip creating tests
  • --skip-commit: boolean, default false, skip committing the first git commit
  • --directory: string, name of directory to create, by default this is the same as the application name
  • --source-dir: string, default 'src', name of source directory
  • --style: string, default 'css', the style language to use ('css', 'less' or 'scss')
  • --prefix: string, default 'app', the prefix to use when generating new components
  • --mobile: boolean, default false, generate a Progressive Web App application (see section on upcoming features)
  • --routing: boolean, default false, add module with routing information and import it in main app module
  • --inline-style: boolean, default false, use inline styles when generating the new application
  • --inline-template: boolean, default false, use inline templates when generating the new application

Run $ ng generate --help to see all available options of your locally installed Angular CLI.

Let's see how you can start your application so you can see it in action.

Running Your Application

To preview your new application in your browser, navigate to its directory:

$ cd my-app

and run:

$ ng serve

to start the built-in development server on port 4200:

** NG Live Development Server is running on http://localhost:4200 **
Hash: 09fb2ad840c1472e5885
Time: 6230ms
chunk    {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 158 kB {4} [initial] [rendered]
chunk    {1} main.bundle.js, main.bundle.js.map (main) 3.62 kB {3} [initial] [rendered]
chunk    {2} styles.bundle.js, styles.bundle.js.map (styles) 9.77 kB {4} [initial] [rendered]
chunk    {3} vendor.bundle.js, vendor.bundle.js.map (vendor) 2.37 MB [initial] [rendered]
chunk    {4} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]
webpack: Compiled successfully.

Continue reading %The Ultimate Angular CLI Reference Guide%


by Jurgen Van de Moere via SitePoint

Optimizing Web Fonts for Performance: the State of the Art

Optimizing Web Fonts for Performance: the State of the Art

This article is part of a series created in partnership with SiteGround. Thank you for supporting the partners who make SitePoint possible.

67% of webpages now use custom fonts. However, popularity and widespread adoption didn't come without some performance and user experience-related issues.

In this article, I'll go through what's not so good about the way web fonts are commonly used and loaded, as well as point you to well-tested workarounds and future standards-based solutions.

Why Custom Web Fonts?

Users come to your website for content. Therefore, great typography is crucial on the web: readability, legibility and well-crafted typographic design are a must for brand recognition and the success of your message.

The best way to achieve beautiful typography is by loading custom web fonts — that is, font files that are not already installed on users' devices.

Since browser support of the CSS @font-face rule has become widespread, using custom web fonts in websites has increased by leaps and bounds. However, fonts can have a heavy file size and loading extra resources on your website doesn't come without some negative impact on performance.

Since file size can certainly be an issue, paying attention to how custom web fonts are loaded comes to the forefront.

What Is the Flash of Invisible Text (FOIT) All About?

The most common way of using a custom web font is to specify the fonts used inside a CSS @font-face declaration and leave the browser to its default behavior. This is not ideal. Since information about fonts is located in the CSS, by default browsers delay the loading of fonts until the CSS is parsed. That's not all. As Zach Leatherman has made abundantly clear, to trigger a font download, a number of conditions must be met besides a valid @font-face declaration:

  • A HTML node that uses the same font-family specified inside @font-face
  • In Webkit and Blink browsers, that node must not be empty
  • In browsers that support the unicode range descriptor inside @font-face, the content must also match the specified unicode range

If all the points above are satisfied, the browser starts downloading the font. This means that the browser needs to have parsed not only the CSS code but also a website's text content before it can trigger a font's download. However, it's just when the font starts loading that web users are likely to experience the dreaded Flash Of Invisible Text, or FOIT for short.

[caption id="attachment_152717" align="aligncenter" width="700"]FOIT: Page at http://ift.tt/y1O1NW while fonts are loading on Firefox v.52. Text is invisible. FOIT: Page at http://ift.tt/y1O1NW while fonts are loading on Firefox v.52. Text is invisible.[/caption]

[caption id="attachment_152718" align="aligncenter" width="700"]FOIT: Page at http://ift.tt/y1O1NW after fonts have been loaded on Firefox v.52. Text has become visible FOIT: Page at http://ift.tt/y1O1NW after fonts have been loaded on Firefox v.52. Text has become visible.[/caption]

In other words, as soon as browsers start downloading a font, all text becomes invisible. So users look at a screen with no text for some time, which under sub-par network conditions can feel like forever. Furthermore, the way different browsers handle FOIT also varies:

  • Blink and Firefox browsers tackle FOIT by introducing a 3 second-timeout: the text disappears for three seconds during font loading. If the font hasn't loaded within this time frame, the website displays a fallback font, which is subsequently replaced with the custom font once this is fully loaded. This behavior gives rise to what is known as FOUT (another acronym): Flash Of Unstyled Text.
  • Safari, the default Android Browser and Blackberry don't use a timeout but display no text until the custom font is loaded. If anything goes wrong and the font doesn't get loaded, users are left with invisible text on the screen
  • IE/Edge browsers don't hide text, but display the fallback font right away, which seems to be a better design decision by Microsoft.

Although having a sudden change in typeface when reading text on a website is not the best user experience, staring at a blank screen while the font is loading sounds much worse. Ideally, a working approach should overcome both FOUT and FOIT. However, although it's an open issue, there is some consensus among a number of experts that FOUT is way better than FOIT.

Tackling the issues related to fonts loading involves working both on optimizing the file size and taking control of the default browser behavior so as to eliminate FOIT and minimizing the jarring impact of FOUT.

Let's look closer into each task one at a time.

Continue reading %Optimizing Web Fonts for Performance: the State of the Art%


by Maria Antonietta Perna via SitePoint

How to Boost App Downloads by A/B Testing Icons

How can you tell which app icon will result in the most app store downloads? Answer: simply by looking, you can’t. Even an experienced designer couldn’t answer this question with certainty, however, there is a solution — A/B testing.

A/B testing is not a new concept, however, when trying to increase downloads/conversions, many make the mistake of revamping the app's interface, while neglecting the first thing users see ⏤ the app icon! Plus, all app stores have a dashboard where marketers can measure the success of the different tests.

Read on to find out how A/B testing works, and how it helped us increase our app store downloads by a whopping 34%.

We A/B Tested These 4 Icons

Begin by taking a closer look at these icons:

The 3 end results

Can you guess which one resulted in the largest number of app store downloads? Spoiler: it’s #2. I’m going to show you how we reached that conclusion by A/B testing the different concepts.

The Problem

Piano Master 2 is an app where if you press a piano key, a small brick falls over it. By doing this, you play a previously chosen melody. It seems like a game, but it’s actually very useful to those who want to learn how to play a real piano.

This app was once unique, but now it has many rival applications. This is why our customer wanted to create a new icon so that the game could stand out among its competition.

Here’s what the app icon looked like before:

The original icon design

The customer filled out an application form and we agreed to design three unique icons for the Google Play store, and A/B test them to see which resulted in more app downloads.

Subsequently, we began by designing the first iterations of the three unique concepts. Let’s take a look at the brief.

The Project Brief

The first icon concept had to be serious and classical (two-dimensional piano keys with note signs falling over them). The other icons were to be bright, dynamic and somewhat abstract. Also, the customer wanted to have stars on at least one of the icon concepts (because you can see stars in the game when you play the piano). The customer sent us this image as a visual reference:

Step 1: Iteration and Feedback

We sent the customer these six drafts:

Designing the first iterations

The customer liked concepts 5, 4 and 1 (in that order). The only concern was the green bar that we took directly from the game; the customer asked us to make the green bar a little narrower.

After taking the feedback on board, we then reiterated over the three chosen concepts and they began to look like this:

Narrowing down the choices with feedback

During our second round of feedback, the customer told us that the word “free” on one of the concepts was unnecessary, as the paid version of the app no longer existed, and only the free version remained. We were slightly worried that the experiment wouldn’t be fair if we tested the old icon with the word “free” against our new concept without it, however, the customer insisted that it be removed. The designs were then approved, and here’s what we ended up with after adding some color:

Adding color to the icon design

Step 2: First A/B Test (Choosing a Design)

We then tested the three concepts on the Google Play app store, where we realised that the winning icon increased the number of application downloads by 27.1%. Surprisingly, this was the concept that the customer liked the least!

A/B testing the different concepts

Continue reading %How to Boost App Downloads by A/B Testing Icons%


by Roman Rudnik via SitePoint

Getting Started With Chart.js: Scales

In the last four tutorials, you have learned a great deal about Chart.js. After reading the first four tutorials, you should now be able to customize the tooltips and labels, change the fonts, and create different chart types. One aspect of Chart.js that has not been yet covered in this series is scales.

Scales have changed a lot since version v1.0 of the library and are now much more powerful. In this tutorial, you will learn how to manipulate scales and control their appearance using different options that the library provides.

Changing Grid Lines

All the configuration options for grid lines are nested under the scale option in the gridLines key. This key defines options to customize the grid lines that run perpendicular to the axes. Let's change the grid lines of the line chart that you created in the line and bar charts tutorial.

You can show or hide the grid lines of a chart by using the display key. Its initial value is true, so the grid lines are shown by default. The color of the grid lines can be specified by using the color key. If you want the grid lines to be composed of dashes instead of being solid lines, you can provide a value for the length and spacing of dashes as a value of the borderDash key. You can set the width and color of the lines for the first or zero index using the zeroLineWidth and zeroLineColor keys respectively.

In all the charts up to this point, the scales did not have any descriptive text to let the viewers know what a particular axis represented. This can make the charts less useful. For example, if you see a plot of car speed and can't figure out the unit in which the speed is plotted on the y-axis, the chart is pretty much useless.

You can show or hide the scale labels on a chart by using the display key. The scale labels are hidden by default. The text that should be shown on these scales can be specified using the labelString key. You can also control the font color, family, size, and style using the fontColor, fontFamily, fontSize, and fontStyle keys respectively.

Here is the same old car speed chart with a different set of chart options specified.

There is one more key called offsetGridLines. When set to true, it shifts the labels to the middle of the grid lines. This is generally useful when creating bar charts.

Configuring Linear Scales

Linear scales are used to chart numerical data. These scales can be created on either the x or y axis. In most cases, Chart.js automatically detects the minimum and maximum values for the scales. However, this can result in some confusion. 

Let's say you want to plot the marks of students in a class. If the maximum marks for the test were 200 but none of the students scored more than 180 marks, the scale will most probably max out at 180. In such cases, the readers will have no way of knowing if the maximum marks were 180 or 200.

Chart.js has multiple built-in options that let you control different keys for scales. You can specify the minimum and maximum value for scales using the min and max keys. The step size of the scales can be controlled using the stepSize property. This way, you can determine how many grid lines should be drawn on the chart. Another way to set a limit on the number of grid lines and ticks shown on a chart is to use the maxTicksLimit key.

Here is the code to specify the minimum and maximum scale values for the horizontal scale on the bar chart for a previous tutorial of this series.

Just like the linear scale, you can also create logarithmic scales to plot values on your chart. In this case, logarithmic interpolation is used to determine the position of a point on the axes. These scales can also be placed on both the x-axis and the y-axis.

Configuring Radial Linear Scales

This scale type is used for radar and polar area chart types. Unlike the regular linear scale, this one overlays the chart area instead of being positioned on the axis.

There are a lot of keys specifically targeted at radial scales. For example, you can use the lineArc key to specify if the grid lines should be circular or straight. The default value is false for radar charts and true for polar area charts.

You can control the appearance of lines that radiate from the center of the chart to its point labels using the angleLines key. It accepts an object as its value. The object can contain keys to control the color and width of angle lines. You can hide the angle lines by setting the value of display key to false. The color and width of angle lines can be controlled using the color and lineWidth keys.

The appearance of point labels can be controlled using the pointLabels key. Just like angle lines, this key also accepts an object as its value. Please note that these options only have an effect when the value of lineArc is set to false. The font color, family, size, and style can be specified using the fontColor, fontFamily, fontSize, and fontStyle keys.

You can also set a minimum and maximum value for the scale using the min and max keys. The step size and maximum number of ticks on the scale can be specified using the stepSize and maxTicksLimit keys. These options are available under the ticks key. Some other keys available inside ticks are showLabelBackdrop, backdropColor, backdropPaddingX, and backDropPaddingY. You can use them to show or hide the background behind the tick labels and control its width, height, and color.

You can also use the gridLines key that we used for the line chart to set a color and width for the grid lines in a radar chart. Here are some options to create a radar chart with customized scales.

Configuring Time Scales

You can use a time scale to display times and dates on a chart. As mentioned in the introductory Chart.js tutorial, you need to include Moment.js in your projects to display time. One restriction on using a time scale is that it can be displayed only on the x-axis. All the configuration options for the time scale are located under the time sub-option.

To create a time scale, you have to set the value of the type key to time under the xAxes sub-option. After that, you can set the value of different keys under time. The unit which should be used to draw the ticks is set using the unit key. 

The step of the unit can be specified using the unitStepSize key. The format in which the labels for the ticks should be displayed is specified using the displayFormats sub-option. You can read more about allowed string formats on the Moment.js website.

The format in which the time is displayed in the tooltips can be specified using the tooltipFormat key. 

You can also round the time before plotting it on the chart using the round key. Be careful when setting a value for round. Let's say you set its value to hour and there are two times that need to be plotted on the chart. If one time is 5:30 AM and another is 5:50 AM, they will both be plotted on the 5:00 AM tick mark. Setting its value to minute will plot them on the 5:30 and 5:50 marks respectively.

The line chart plotted in the beginning of the tutorial could be plotted using a time scale with the help of the following code.

Final Thoughts

This tutorial helped you learn about different kinds of scales in Chart.js. You can now easily customize the scales in a chart by controlling their color, minimum and maximum value, number of ticks, and other such factors.

After reading all five tutorials in this series, you should now be able to create all kinds of charts available in Chart.js. I hope you liked the tutorial and the series. 

If you’re looking for additional resources to study or to use in your work, check out what we have available in the Envato marketplace. If you have any questions, please let me know in the comments. Have you ever used this library in your own projects? Please share some tips in the comments.


by Monty Shokeen via Envato Tuts+ Code

15 Best Swift App Templates

Twitter Video: How to Create Engaging Video Content

Do you want to use more video in your Twitter marketing? Wondering how each type of Twitter video works? With the launch of its native live video service, Twitter is prioritizing video higher in the news feed, making it the perfect way to reach your audience more often. In this article, you’ll discover how to [...]

This post Twitter Video: How to Create Engaging Video Content first appeared on .
- Your Guide to the Social Media Jungle


by Beth Gladstone via