emGee Software Solutions Custom Database Applications

Share this

Web Design

Creating Pretty Popup Messages Using SweetAlert2

Tuts+ Code - Web Development - Sat, 06/30/2018 - 06:36

Every now and then, you will have to show an alert box to your users to let them know about an error or notification. The problem with the default alert boxes provided by browsers is that they are not very attractive. When you are creating a website with great color combinations and fancy animation to improve the browsing experience of your users, the unstyled alert boxes will seem out of place.

In this tutorial, you will learn about a library called SweetAlert2 that allows us to create all kinds of alert messages which can be customized to match the look and feel of our own website.

Display Simple Alert Messages

Before you can show all those sweet alert messages to your users, you will have to install the library and include it in your project. If you are using npm or bower, you can install it by running the following commands:

npm install sweetalert2 bower install sweetalert2

You can also get a CDN link for the latest version of the library and include it in your webpage using script tags:

<script src="https://cdn.jsdelivr.net/npm/sweetalert2@7.12.15/dist/sweetalert2.all.min.js"></script>

Besides the JavaScript file, you will also have to load a CSS file which is used to style all the alert boxes created by the library:

<link rel='stylesheet' href='https://cdn.jsdelivr.net/npm/sweetalert2@7.12.15/dist/sweetalert2.min.css'>

Once you have installed the library, creating a sweet alert is actually very easy. All you have to do is call the swal() function. Just make sure that the function is called after the DOM has loaded.

There are two ways to create a sweet alert using the swal() function. You can either pass the title, body text and icon value in three different arguments or you can pass a single argument as an object with different values as its key-value pairs. Passing everything in an object is useful when you want to specify values for multiple arguments.

When a single argument is passed and it is a string, the sweet alert will only show a title and an OK button. Users will be able to click anywhere outside the alert or on the OK button in order to dismiss it.

When two arguments are passed, the first one becomes the title and the second one becomes the text inside the alert. You can also show an icon in the alert box by passing a third argument. This can have any of the five predefined values: warning, error, success, info, and question. If you don't pass the third argument, no icon will be shown inside the alert message.

document.querySelector(".first").addEventListener('click', function(){ swal("Our First Alert"); }); document.querySelector(".second").addEventListener('click', function(){ swal("Our First Alert", "With some body text!"); }); document.querySelector(".third").addEventListener('click', function(){ swal("Our First Alert", "With some body text and success icon!", "success"); });

Configuration Options to Customize Alerts

If you simply want to show some basic information inside an alert box, the previous example will do just fine. However, the library can actually do a lot more than just simply show users some text inside an alert message. You can change every aspect of these alert messages to suit your own needs.

We have already covered the title, the text, and the icons inside a sweet alert message. There is also an option to change the buttons inside it and control their behavior. By default, an alert will only have a single confirm button with text that says "OK". You can change the text inside the confirm button by setting the value of the confirmButtonText property. If you also want to show a cancel button in your alert messages, all you have to do is set the value of showCancelButton to true. The text inside the cancel button can be changed using the cancelButtonText property.

Each of these buttons can be given a different background color using the confirmButtonColor and cancelButtonColor properties. The default color for the confirm button is #3085d6, while the default color for the cancel button is #aaa. If you want to apply any other customization on the confirm or cancel buttons, you can simply use the confirmButtonClass and cancelButtonClass properties to add a new class to them. Once the classes have been added, you will be able to use CSS to change the appearance of those buttons. You can also add a class on the main modal itself by using the customClass property.

If you interacted with the alert messages in the first example, you might have noticed that the modals can be closed by pressing either the Enter or Escape key. Similarly, you can also click anywhere outside the modal in order to dismiss it. This happens because the value of allowEnterKey, allowEscapeKey, and allowOutsideClick is set to true by default.

When you show two different buttons inside a modal, the confirm button is the one which is in focus by default. You can remove the focus from the confirm button by setting the value of focusConfirm to false. Similarly, you can also set the focus on the cancel button by setting the value of focusCancel to true.

The confirm button is always shown on the left side by default. You have the option to reverse the positions of the confirm and cancel buttons by setting the value of reverseButtons to true.

Besides changing the position and color of buttons inside the alert messages, you can also change the background and position of the alert message or the backdrop around it. Not only that, but the library also allows you to show your own custom icons or images in the alert messages. This can be helpful in a lot of situations.

You can customize the backdrop of a sweet alert using the backdrop property. This property accepts either a Boolean or a string as its value. By default, the backdrop of an alert message consists of mostly transparent gray color. You can hide it completely by setting the value of backdrop to false. Similarly, you can also show your own images in the background by setting the backdrop value as a string. In such cases, the whole value of the backdrop string is assigned to the CSS background property. The background of a sweet alert message can be controlled using the background property. All alert messages have a completely white background by default.

All the alert messages pop up at the center of the window by default. However, you can make them pop up from a different location using the position property. This property can have nine different values with self-explanatory names: top, top-start, top-end, center, center-start, center-end, bottom, bottom-start, and bottom-end.

You can disable the animation when a modal pops up by setting the value of the animation property to false. The library also provides a timer property which can be used to auto-close the timer once a specific number of milliseconds have passed.

In the following example, I have used different combinations of all the properties discussed in this section to create four different alert messages. This should demonstrate how you can completely change the appearance and behavior of a modal created by the SweetAlert2 library.

document.querySelector(".first").addEventListener("click", function() { swal({ title: "Show Two Buttons Inside the Alert", showCancelButton: true, confirmButtonText: "Confirm", confirmButtonColor: "#00ff99", cancelButtonColor: "#ff0099" }); }); document.querySelector(".second").addEventListener("click", function() { swal({ title: "Are you sure about deleting this file?", type: "info", showCancelButton: true, confirmButtonText: "Delete It", confirmButtonColor: "#ff0055", cancelButtonColor: "#999999", reverseButtons: true, focusConfirm: false, focusCancel: true }); }); document.querySelector(".third").addEventListener("click", function() { swal({ title: "Profile Picture", text: "Do you want to make the above image your profile picture?", imageUrl: "https://images3.imgbox.com/4f/e6/wOhuryw6_o.jpg", imageWidth: 550, imageHeight: 225, imageAlt: "Eagle Image", showCancelButton: true, confirmButtonText: "Yes", cancelButtonText: "No", confirmButtonColor: "#00ff55", cancelButtonColor: "#999999", reverseButtons: true, }); }); document.querySelector(".fourth").addEventListener("click", function() { swal({ title: "Alert Set on Timer", text: "This alert will disappear after 3 seconds.", position: "bottom", backdrop: "linear-gradient(yellow, orange)", background: "white", allowOutsideClick: false, allowEscapeKey: false, allowEnterKey: false, showConfirmButton: false, showCancelButton: false, timer: 3000 }); });

Important SweetAlert2 Methods

Initializing different sweet alert messages to show them to users is one thing, but sometimes you will also need access to methods which control the behavior of those alert messages after initialization. Fortunately, the SweetAlert2 library provides many methods that can be used to show or hide a modal as well as get its title, text, image, etc.

You can check if a modal is visible or hidden using the isVisible() method. You can also programmatically close an open modal by using the close() or closeModal() methods. If you happen to use the same set of properties for multiple alert messages during their initialization, you can simply call the setDefaults({configurationObject}) method in the beginning to set the value of all those properties at once. The library also provides a resetDefaults() method to reset all the properties to their default values.

You can get the title, content, and image of a modal using the getTitle(), getContent(), and getImage() methods. Similarly, you can also get the HTML that makes up the confirm and cancel buttons using the getConfirmButton() and getCancelButton() methods.

There are a lot of other methods which can be used to perform other tasks like programmatically clicking on the confirm or cancel buttons.

Final Thoughts

The SweetAlert2 library makes it very easy for developers to create custom alert messages to show to their users by simply setting the values of a few properties. This tutorial was aimed at covering the basics of this library so that you can create your own custom alert messages quickly. 

To prevent the post from getting too big, I have only covered the most commonly used methods and properties. If you want to read about all the other methods and properties which can be used to create advanced alert messages, you should go through the detailed documentation of the library.

Don't forget to check out the other JavaScript resources we have available in the Envato Market, as well.

Feel free to let me know if there is anything that you would like me to clarify in this tutorial.

Categories: Web Design

Summer On Your Desktop: Fresh Wallpapers For July 2018

Smashing Magazine - Sat, 06/30/2018 - 05:00
Summer On Your Desktop: Fresh Wallpapers For July 2018 Summer On Your Desktop: Fresh Wallpapers For July 2018 Cosima Mielke 2018-06-30T14:00:55+02:00 2018-07-11T12:36:25+00:00

For most of us, July is the epitome of summer. The time for spending every free minute outside to enjoy the sun and those seemingly endless summer days, be it in a nearby park, by a lake, or on a road trip, exploring unfamiliar places. So why not bring a bit of that summer joy to your desktop, too?

In this post, you’ll find free wallpapers for July 2018 created by artists and designers from across the globe as it has been our monthly tradition since more than nine years already. Please note that some of the wallpapers come in two versions as usual (with and without a calendar for the month), while the best-of selection at the end of the post only covers the non-calendar versions. Have a great July — no matter what you have planned!

Please note that:

  • All images can be clicked on and lead to the preview of the wallpaper,
  • You can feature your work in our magazine by taking part in our Desktop Wallpaper Calendar series. We are regularly looking for creative designers and artists to be featured on Smashing Magazine. Are you one of them?
Design Your Own Wallpaper

Igor Izhik has designed quite a lot of wallpapers for our monthly challenge. If you would like to get started yourself, check out his article in which he shares how he approaches all stages of the process as well as useful tips and tricks for creating illustrations in Adobe Illustrator. Get creative! →

Meet Smashing Book 6 with everything from design systems and accessible single-page apps to CSS Custom Properties, Grid, Service Workers, performance, AR/VR and responsive art direction. New frontiers in front-end and UX with Marcy Sutton, Harry Roberts, Laura Elizabeth and many others.

Table of Contents → Heated Mountains

“Warm summer weather inspired the color palette.” — Designed by Marijana Pivac from Croatia.

Triumphant July

“This summer started out hot, with eyes wide open and monitoring the World Cup in Russia. We wanted to decorate your desktop this July with this colorful Red Square illustration, just before the eagerly anticipated finale, hoping to see the trophy awarded to our players.” — Designed by PopArt Studio from Serbia.

Robinson Cat

Designed by Ricardo Gimenes from Sweden.

All You Need Is Ice Cream

“July is National Ice Cream Month! National Ice Cream Day is celebrated on the 3rd Sunday in July. On this day people celebrate with a bowl, cup or cone filled with their favorite flavor of ice cream. Share some ice cream and some love this month with my wallpaper!” — Designed by Melissa Bogemans from Belgium.

A Mighty Woman With A Torch

“Last year we visited NYC for the first time during the 4th of July. I took many photos of Lady Liberty and was so deeply inspired by her message.” — Designed by Jennifer Forrest from Indiana.

Night Sky Magic

Designed by Ricardo Gimenes from Sweden.

Fly Forever

“Challenges are a part of parcel of life. Surpassing each challenge would be difficult, but it is you who decide whether to keep going or shun the drive. No matter whatever circumstance you are in, ignite your mind and just fly forward into action to achieve what you are capable of and what is beyond your reach.” — Designed by Sweans from London.

Smile, It’s Summer

“July brings me to summer, and last year in summer, I went to Salzburg, Austria where I took this photo. So every beginning of summer, I think about Salzburg and how sunny and warm it was there.” — Designed by Ilse van den Boogaart from The Netherlands.

Even Miracles Take A Little Time

“‘One day, the people that didn't believe in you will tell everyone how they met you.’ Believe in Yourself. Give it all that you can, take your own sweet time and be your own miracle!” — Designed by Binita Lama from India.

July Favorites

Lots of beautiful wallpapers have been created in the nine years since we embarked on our wallpapers adventure. And since it’d be a pity to let them gather dust, we once again dived deep into our archives on the lookout for some July treasures. Please note that these wallpapers, thus, don’t come with a calendar.

A Flamboyance Of Flamingos

“July in South Africa is dreary and wintery so we give all the southern hemisphere dwellers a bit of colour for those grey days. And for the northern hemisphere dwellers a bit of pop for their summer! The Flamboyance of Flamingos is part of our ‘Wonderland Collective Noun’ collection. Each month a new fabulous collective noun is illustrated, printed and made into a desktop wallpaper.” — Designed by Wonderland Collective from South Africa.

Summer Essentials

“A few essential items for the summertime weather at the beach, park, and everywhere in-between.” — Designed by Zach Vandehey from the USA.

Summer Cannonball

“Summer is coming in the northern hemisphere and what better way to enjoy it than with watermelons and cannonballs.” — Designed by Maria Keller from Mexico.

Mason Jar

“Make the days count this summer!” — Designed by Meghan Pascarella from the USA.

Birdie Nam Nam

“I have created a pattern that has a summer feeling. For me July and summer is bright color, joy and lots of different flowers and birds. So naturally, I incorporated all these elements in a crazy pattern.” — Designed by Lina Karlsson from Sweden.


Designed by Tekstografika from Russia.

Summer Never Ends!

“July is a very special month to me — it’s the month of my birthday and of the best cherries.” — Designed by Igor Izhik from Canada.

World Ufo Day

“The holiday dedicated to those who study the phenomena that have no logical explanation, and the objects, which is attributed to an extraterrestrial origin.” — Designed by Cheloveche.ru from Russia

Captain Amphicar

“My son and I are obsessed with the Amphicar right now, so why not have a little fun with it?” — Designed by 3 Bicycles Creative from the USA.

Tropical Lilies

“I enjoy creating tropical designs, they fuel my wanderlust and passion for the exotic. Instantaneously transporting me to a tropical destination.” — Designed by Tamsin Raslan from the USA.

Day Turns To Night

Designed by Xenia Latii from Germany.

Eternal Summer

“And once you let your imagination go, you find yourself surrounded by eternal summer, unexplored worlds and all-pervading warmth, where there are no rules of physics and colors tint the sky under your feet.” — Designed by Ana Masnikosa from Belgrade, Serbia.

Taste Like Summer!

“In times of clean eating and the world of superfoods there is one vegetable missing. An old forgotten one. A flower actually. Rare and special. Once it had a royal reputation (I cheated a bit with the blue). The artichocke — this is my superhero in the garden! I am a food lover — you too? Enjoy it — dip it!” — Designed by Alexandra Tamgnoué from Germany.

Road Trip In July

“July is the middle of summer, when most of us go on road trips, so I designed a calendar inspired by my love of traveling and summer holidays.” — Designed by Patricia Coroi from Romania.

World Chocolate Day

Designed by Cheloveche.ru from Russia.

Join In Next Month!

Please note that we respect and carefully consider the ideas and motivation behind each and every artist’s work. This is why we give all artists the full freedom to explore their creativity and express emotions and experience throughout their works. This is also why the themes of the wallpapers weren’t anyhow influenced by us, but rather designed from scratch by the artists themselves.

Thank you to all designers for their participation. Join in next month!

Categories: Web Design

How To Craft The Perfect Web Developer Ré­su­mé

Smashing Magazine - Fri, 06/29/2018 - 05:00
How To Craft The Perfect Web Developer Ré­su­mé How To Craft The Perfect Web Developer Ré­su­mé Aditya Sharma 2018-06-29T14:00:26+02:00 2018-07-11T12:36:25+00:00

Did you know that your ré­su­mé could be the reason that’s holding you back from that 150k+ job that you know you deserve? This guide is dedicated to all the web developers out there and will demonstrate how you can create a successful ré­su­mé that will get you more shortlists than you can fathom. If it’s a piece of paper that is standing between you and your dream job, it’s time to show who’s the boss.

Our guide to making a killer ré­su­mé will broadly talk about the following:

  1. Why Would A Web Developer Need A Ré­su­mé In The First Place?
  2. Ré­su­mé Format: Sorting Out The Key Elements Of A Web Developer Ré­su­mé
  3. Professional Summary
  4. Technical Skills
  5. Managerial Skills
  6. Professional Experience
  7. Education Section In A Web Developer Ré­su­mé
  8. Technical Projects
  9. Additional Sections In The Web Developer Ré­su­mé
  10. ATS Optimization
  11. Key Takeaways
  12. A Sample Ré­su­mé To Get You Started
Why Would A Web Developer Need A Ré­su­mé In the First Place? I don’t need a ré­su­mé! I’ll have a job before I wake up tomorrow!

I sighed. He was a brilliant web developer and we both knew it. He felt he was wasting away his life and deserved something better — I agreed. He gave his two weeks’ notice and was under the impression that a new job as well as a better profile will just land on his lap.

But he had ignored that singular piece of document which has a track record of making or breaking people’s lives — the humble ré­su­mé.

Getting workflow just right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up “this-is-how-I-work”-sessions — with smart cookies sharing what works well for them. A part of the Smashing Membership, of course.

Explore features →

As part of my job, I go through dozens of ré­su­més on a daily basis. I had seen his ré­su­mé as well. I wish I had the heart to tell him that just being a kickass developer isn’t enough — you have to convince the same to the recruiter on a 1-pager. And while accomplishing a task like that is not rocket science, it’s not a walk in the park either.

Web developers know that a lot depends on networking and client recommendations, so a ré­su­mé usually takes a backseat in most cases. Couple that with a growing demand and you know there won’t ever be a shortage of projects.

So why to waste time on a web developer ré­su­mé? Let’s take a moment and study this graph below:

Graph showing the demand for web developers from 2012-2016. (Large preview)

The data is taken from Indeed.com, and if you notice the trend in the past few years, you’ll observe two main facts:

  • With the advent of web-based startups, the peak of web development was 5-6 years ago and has either been steady or in a decline.
  • For jobs that require web development as the only skill, the demand is steady, as of now.

Additionally, going by Forbes’ analysis, fields like AI, AR and Data Science are the new up-and-coming stalwarts in the tech industry. Influencers and tech experts strongly believe that these domains have the ability to revamp the way we’ve been doing things until now. So while the demand for web developers is steady right now, the picture is not all rosy.

Sure, as a web developer, you are confident that you’ll never have a shortage of projects. You have a list of happy clients which you served in the past and you believe that their network is enough to sustain you. But if you look at the tech industry in general and see how trends shape up and die down at a breathtaking pace, you’ll realize that this approach is probably not the wisest one.

You think you’ll always have a job or a project because you specialize in something which is in huge demand, but how long do you want to be at the receiving end of client’s tirades? Wouldn’t you want flexible hours, remote work, or professional clients for a change who know what they want?

Wouldn’t you want to 1-up your game from an 80k job to a 150k+ profile?

That’s where your ré­su­mé comes in.

Believe us, we’ve seen how that single piece of a document has changed people’s lives — the individual remains the same, with his certifications, qualifications, previous profiles and what not, but just revamping everything about that individual on paper suddenly transforms the person himself.

We’ve seen it because we’ve done it.

And if the demand for web developers is there, you don’t think you’re the only one who noticed that, right? For every project that you willingly drop or miss, you’ll find ten developers who will pick it up before it even hits the ground. You have a fair idea of the cutthroat competition which is out there, but continue reading and you’ll find out that the competition is not even the tip of the iceberg. The actual recruitment process and the role which a ré­su­mé plays in it might be an eye-opener for you.

Which is why, without further ado, let’s dive in.

2. Re­su­mé Format: Sorting Out The Key Elements Of A Web Developer Ré­su­mé

Broadly speaking, your web developer ré­su­mé will contain the following sections:

  • Contact info
  • Professional Summary
  • Key Skills (Technical + Managerial)
  • Professional Experience
  • Education
  • Projects
  • Extra: Social profiles
  • Interests, Hobbies, Extra-curricular achievements (Optional).

How do you arrange all these sections? What’s the order that you are supposed to follow? Are all of these sections necessary?

That’s where understanding ré­su­mé layouts and formats becomes important.

A ré­su­mé is either Reverse-Chronological, Functional or Hybrid.

2.1 Reverse-chronological

As the name suggests, it starts off by listing your current or last-held profile and continues from there until you reach the part about your ‘Education.’

  • It’s ATS-friendly (more on ATS below) and allows you to emphasize upon your current work profile and achievements. It’s easy to create and is considered to be the standard format for most ré­su­més.
  • The only downside is that in case you are a frequent job-switcher, it might look bad on paper. There’s no way to hide career gaps in a reverse-chronological ré­su­mé.

Below is an example of the same.

Format for a ‘reverse-chronological’ ré­su­mé. (Large preview) 2.2 Functional Ré­su­més

It only lists the companies where you worked at without diving into the details of your actual work profile. Instead, you create a separate section in which you group all your points under relevant skills.

It can be used by people to hide gaps in their career trajectory, but we aren’t fans of this format, simply because you can merely disguise your gaps but sooner or later, it’s bound to show up. It’s always better to be honest, always.

Here’s an example of a functional ré­su­mé. If you’ll notice, it doesn’t allow the recruiter to see your career trajectory or how you evolved to reach where you are.

Format for a ‘functional’ ré­su­mé. (Large preview) 2.3 Hybrid (Combination) Ré­su­més

This format is exactly similar to the reverse-chronological format apart from the fact that in the ‘Professional Experience’ section, the points are grouped by the sills that they represent.

A format like this allows the recruiter to scan relevant points only based on the skills they are looking for. If you can customize your ré­su­mé to the job description, you can direct the attention of the recruiter to where you want. This is the biggest advantage of using this ré­su­mé format.

Another subset of ‘hybrid’ ré­su­més is where you extract all your achievements and create a separate section of ‘Summary of Skills.’ This allows you to create a highly targeted ré­su­mé, focussing only on the skills which you want to showcase to the recruiter.

You’ll find examples of both down below.

Format for a combination (hybrid) ré­su­mé. (Large preview) Combination ré­su­mé containing an additional ‘Summary of Skills.’ (Large preview) 3. Professional Summary

We encountered innumerable people who spent countless hours and days polishing their ‘Ré­su­mé Objective’ section. Are you also one of them?

What is the difference between the Professional Summary and ré­su­mé Objective section? We like to misappropriate a JFK quote to answer all queries regarding this conundrum:

Ask not what the company can do for you, but what you can do for the company.

Meet Vanessa. She’s the Head Recruiter at a top-notch IT firm and is now looking for an awesome web developer. Her email is flooded with ré­su­més and they all look the same. She’s tired of seeing people listing out what they want — it looks more like a shopping list than a professional ré­su­mé. Surprisingly, all of them are ‘hard-working’ and possess ‘excellent communication skills’ and are ‘looking for a challenging leadership position’.

— yawn —

Then she opens your ré­su­mé which contains a crisp 4-5 line summary detailing your skills and how you plan to apply those skills for achieving organizational goals. You did your research where you identified high-priority needs of the company, and you’ve mentioned how you plan to address them through the skills that you possess.

She sits up and stops thinking about Game of Thrones for a second. She’s hooked and now wants to meet you in person.

Mission accomplished.

Let us clarify that through an example. Check out a couple of professional summaries and try to see which one delivers greater impact.

I’m a 4 years experienced Web Developer specializing in front-end who’s skilled in ASP.NET, Javascript, C++, HTML, CSS, PHP & MySQL. I am looking for the position of a web developer in a company which will utilize my excellent team management and communication skills.

Technically, there’s nothing wrong with this, just like technically there was nothing wrong with the Star Wars prequels. Now check this out:

5+ years experienced, dynamic and detail-oriented Full Stack Web Developer with a track record of spearheading teams to engineer user-centric solutions for achieving breakthrough efficiency and driving client satisfaction. Highly skilled in end-to-end SDLC and effectively prototyped 20+ product features annually for XYZ to achieve a 25% reduction in costs. Registered unparalleled customer satisfaction levels and received the 2017 Employee of the Year Award for achieving a record-breaking NPS score out of 300+ employees.

See the difference? If you’ll notice, the summary doesn’t include a detailed list of his technical proficiency. It’s better to reserve that for a separate Technical Skills section. The Summary is there to give a bird’s-eye view of your professional career and should be a reason for the recruiter to continue with the rest of your Ré­su­mé.

Additionally, in the first example, the summary ended with an ‘Objective’ statement which serves no purpose to the recruiter. But highlighting your achievements (in the second example) will make the reader pause...and if you manage to do that, congratulations — you are already one step ahead of a majority of applicants out there.

Are you wondering what the kind of professional summary listed above is a bit unreal? What if you are an entry-level Web Developer with no concrete achievement to boast of? What do you do then?

In that scenario, and only in that scenario, in the absence of any significant work experience, you can go for an Objective section in case of a Professional Summary. And there can be multiple ways of approaching the same.

Goal-oriented Web Developer with a Bachelor's degree in Computer Science and looking to enhance my professional experience with an IT company specializing in web development. Armed with a deep sense of responsibility and possessing very high levels of enthusiasm to give my 110% for any endeavor.

Desperate much?

Right off the bat, it’s always better if the entire ré­su­mé is in third-person — that means no references to ‘I’, ‘me’ or ‘mine.’ It’s always ‘possessing a track record,’ not ‘I possess a track record.’

Additionally, the above summary doesn’t inspire confidence. You can be a fresher and also sound professional without looking like you’ll die of starvation if you don’t get the job. Here’s how:

Dynamic and detail-oriented Web Developer with a knack for conceptualizing and delivering elegant, user-friendly solutions effectively and efficiently. Possesses a track record of developing an e-commerce mobile app, a CRM online portal and a fully-functional website for a nonprofit working with underprivileged children. Armed with an extensive understanding of end-to-end SDLC and cloud computing. Regular participant and organizer of local hackathons and web developer meetups.

This only shows that you don’t need extensive experience with high-end corporates to make a killer professional summary. You only need to understand the motivations of the recruiter who’s hiring.

4. Technical Skills

Like mentioned earlier, for a technical ré­su­mé like that of a web developer, it’s better to reserve a separate section for all your technical expertise. But even in that scenario, there are ways in which you can optimize the space available to deliver greater impact.

Most web developer ré­su­més that we see usually give a long list of their technical proficiency. In their quest to make the list comprehensive and all-inclusive, they often compromise on readability. Let us clarify that through an example:

Jenkins Maven OOJS CiCd Docker Angular 4 Apache Tomcat 6 Bitbucket Git Jira Chrome developer tools HTML5 Kendo UI BootStrap Mozilla Firebug (debugger) CSS3.0 MySQL JQuery AJAX JavaScript PHP

A layman would think that the skills are all neatly arranged — surely there’s no other way to make it even better, is there?

Well, as a matter of fact, there is. In case of any dilemmas, it’s always better to place yourself in the shoes of the recruiter and come up with ways to make the job of evaluating you even easier.

While there’s nothing wrong with the way the skills are mentioned above, there’s another way through which you can present the same information and make it look even more relevant.

Web Technologies & Frameworks: Angular 4, HTML5, CSS3.0, Kendo UI, PHP

Scripts/UI: JavaScript, OOJS, JQuery, AJAX, BootStrap

Database and ORM: MySQL

Web Debug Tools: Mozilla Firebug (debugger), Chrome developer tools

Application/Web Server: Apache Tomcat 6

Versioning and other tools: Git, Bitbucket, Jira

Deployment Tools: Docker, Maven, CiCd, Jenkins


By merely assigning sub-headings to the skills that you possess, you made the recruiter’s job easier. Now she only has to scan the sub-headings to quickly find if what she’s looking for is there in your ré­su­mé or not.

5. Managerial Skills

Many web developers stop at ‘Technical Skills’ and continue with their ‘Professional Experience.’ True, for a tech profile, technical skills play a major role and acts as a foundation for whether or not you’ll be shortlisted or not.

But remember when we talked about the difference between an 80k profile where you are dealing with nonsense clients and a 180k+ profile with flexible hours? The ‘Key Skills’ section containing your managerial and leadership skills will play a critical role in bridging that gap. Web developers are a dime a dozen — from a recruiter’s perspective; it’s cheaper to just hire a freelancer for their development work, if that’s what they are looking for.

But they are not, are they? They are looking for a full-time profile. What do you think would be the difference between the two?

Ownership. Leadership.

Companies aren’t just looking for a robot who can be programmed to do basic tasks. They are looking for future leaders who can take over a few years down the line. And it’s your task to convince the recruiter that you are such an individual. Any freelancer working on an hourly basis will possess the technical skills that you do. But it’s your leadership and managerial skills that will help you make it.

Coming to your non-technical skills, it’s always better if you prioritize hard, professional skills over soft skills like ‘communication’ and ‘self-motivation.’ Why? Simply because there’s no way to prove or quantify the same. But you can always add skills like ‘Issue Resolution,’ ‘Leadership’ or ‘Project Management’ and then proceed with showcasing the same in your ‘Professional Experience’ section.

A simple rule of thumb while mentioning your managerial skills is “Show, Don’t Tell.” It’s always better if you are able to substantiate the skills that you mention with concrete points down below.

Don’t just say that you are a leader. Show that you’ve led teams to achieve departmental goals.

Don’t say that you are good in negotiating. Show how your negotiation skills led an x% reduction in costs.

A few examples of managerial skills which you can include in your ré­su­mé are below.

Front-End Development Agile Methodology Code Optimization Documentation & Reporting Requirement Gathering UI Enhancement Module Management Issue Resolution Stakeholder Management Client Relationship Management Project Management Team Leadership

Mention only those skills which you can elucidate in your ré­su­mé. There’s no point in adding a random list of skills which you’ll find insanely difficult to justify at the time of your interview.

How do you identify all those managerial skills which are relevant?

The ‘Job Description.’ That is your Bible for your entire ré­su­mé writing process.

Look for non-technical skills (both managerial and soft skills) and see if they can be included. Only add them if you think you can justify them, either in points below or at the time of your interview. Nothing will hurt your chances more badly than blatantly lying on your Ré­su­mé.

6. Professional Experience

How do you go about framing points for your ré­su­mé?

The ‘Professional Experience’ section is going to be the most critical section of your ré­su­mé. It’s the fuel of your car — the body and looks are alright, but the car won’t move an inch without juice. This section is that juice for your ré­su­mé.

A handy resource for you would be the ‘Job Description.’ Your task is to align the entire ré­su­mé along the lines of what the recruiter is looking for. Your ré­su­mé should look like it’s in response to the JD, that you possess the ability to resolve all the issues which are inherently mentioned in that document.

6.1 Master CV

A better (but tiring) way to proceed would be to make a MasterCV first. It’s a time-consuming process, but we can guarantee that it’s going to give you rich dividends for the rest of your jolly professional career.

We are assuming that you never actually got a chance to sit down with your ré­su­mé, to look at it and figure out what’s wrong with it and how it can be better. And it’s perfectly alright if that’s the case. Most people have that attitude when it comes to their ré­su­mé. It’s always a last-minute rush, which means that there’s almost always something that you’ll inevitably miss, that there’s always a chance that it can be made better.

MasterCV is how you avoid that situation, it’s an important piece in getting you that 150k+ profile. It’s basically a list of literally everything that you have ever done till date. And we mean everything.

A masterCV is for your own use. No one is going to see it. There’s no need to structure it or keep it to two pages — it can be a 10-page long list of bullet points consisting of every achievement (curricular, extra-curricular, professional, achievements around your hobbies or interests — you name it) in your entire life, or it can be full of deathly long paragraphs. The idea is to keep a single document containing all your achievements till date, and regularly updating it.

What do you think happens when you update your ré­su­mé in a last-minute rush? You only add those points which you are able to recollect at that moment. But if you think about it, your tenure at any organization must be filled with tiny milestones and achievements (i.e. milestones which get missed out when you update your ré­su­mé in a rush).

Once you have your masterCV ready, take out the JD of the profile that you are targeting and scan your masterCV for points which can be interpreted and rephrased along the lines of what the recruiter is looking for. The idea is to customize your ré­su­mé according to the job, and not send a standard ré­su­mé for any and all profiles that you come across.

As you continue to update your masterCV, years down the line when you’ll be applying for something else, you can again come back to that same document and pick out points for tailoring your ré­su­mé to that new profile.

6.2 Cause-Effect Relationship: The Princeton Formula To Rule Them All

Another thing to keep in mind is the cause-effect relationship. Most people find themselves at a loss when it comes to filling out actual points for the job which they were doing. They know what they did, but they can’t write it down in coherent points. When that happens, they resort to a typical JD for jobs like the one they themselves were doing, and then morph those points into their own ré­su­mé.

A fundamental thing which is wrong with this approach is that a typical JD is responsibility-based, while your ré­su­mé should be achievement-based. A JD contains a list of things which the recruiter expects a candidate should be capable of, while your ré­su­mé will contain your achievements around those responsibilities. There’s a stark difference.

The good thing is that a vast majority of applicants resort to this approach. So a tiny deviation from this well-treaded path will automatically elevate your chances of getting shortlisted.

How do you do that? By making sure that there’s a coherent cause-effect relationship in each point. A foolproof way to make sure that you are able to do that is the Princeton formula along the lines of:

A + P + R = A

Action Verb + Project + Result = Accomplishment

If you are able to incorporate the essence of this formula in all your ré­su­mé points, trust us, 99% of your job is done.

Most applicants either mention their responsibilities or their achievements. But this formula ensures that not only you mention these two parameters; you also detail the quantifiable impact of your achievements. Instead of wrapping your achievements around your profile, showcase the impact that you achievement had on the organization. When you do that, you instantly enhance your role from someone who just did what they were told, to someone who took ownership of their responsibilities and delivered an impact at the macro level.

An example of the Princeton formula in action:

Spearheaded a team of 5 Junior Developers to effectively execute 11 projects with 100% on-time delivery while achieving a cost-reduction of 20% and registering CSAT levels of 4.88/5.00

This point is so much better than a generic point along the lines of:

Worked on various projects to decrease costs and achieve client satisfaction.

A point like this clearly highlights the quantifiable impact that you were able to achieve. Beginning a point with an action/power verb (a list of which you can find in the Princeton document linked above, or you can simply google the same) instantly magnifies the impact of that point, as opposed to most other candidates who often tend to ‘manage’ everything.

That’s the kind of point which makes the recruiter pause, and believe us, when a Hiring Manager is going through dozens of ré­su­més on a daily basis, it’s a superhuman task to make her pause and look at your ré­su­mé. Your task is to do just that, and that’s how you do it.

6.3 Bucketing/Subheadings

Another critical weapon in your arsenal to make a stellar Developer ré­su­mé is bucketing, or sub-headings.

Merely framing immaculate points will only get you so far. Let’s say you picked apart your entire experience in your previous profile and came up with this:

  • Developing client-side libraries across both iOS and Android to enable usage of the offline sync feature for the app developer,
  • Envisioned & developed the common network layer for Android to accomplish a reduction in the SDK size by ~20%,
  • Commissioning the development of Logging Framework across all platforms including iOS, Android & Windows,
  • Achieved the ‘Team Excellence Award’ & played a critical role in applying for a patent based on the logging library,
  • Conceptualizing and developing a library for the company to reduce additional costs involved in using third-party libraries,
  • Spearheading a team of ~20 to conceptualize and effectively implement the Mark for Upload feature for the company,
  • Proposing a common network layer for all network calls to be used by the product to effectively optimize SDK size.

Sure, in their individual capacity, the points are meticulously framed and seem to follow the Princeton formula uniformly. But the entire work experience itself looks like a wall of text which will make the recruiter groan the moment she sees it. You don’t want that, do you?

Now look what happens when we take the same points and work our magic to make it a breeze for the recruiter, without changing a thing about the points themselves:

Team Management & Leadership

  • Spearheading a team of ~20 to conceptualize and effectively implement the Mark for Upload feature for the company
  • Commissioning the development of Logging Framework across all platforms including iOS, Android & Windows.

Library Management & Process Optimization

  • Conceptualizing and developing a library for the company to reduce additional costs involved in using third-party libraries
  • Developing client-side libraries across both iOS and Android to enable usage of the offline sync feature for the app developer
  • Proposing a common network layer for all network calls to be used by the product to effectively optimize SDK size.

Key Achievements

  • Envisioned & developed the common network layer for Android to accomplish a reduction in the SDK size by ~20%
  • Achieved the ‘Team Excellence Award’ & played a critical role in applying for a patent based on the logging library.

If that isn’t mic-drop stuff, we don’t know what is.

In a single instant, you transformed the entire professional experience by neatly arranging all the points into buckets or sub-headings. Consequently, the recruiter won’t have to go through the individual points — merely perusing through the buckets will serve the purpose. And to further sweeten the deal, you bolded relevant words and phrases to make the recruiter’s job even easier? That’s what you want, isn’t it? If you make the recruiter’s job easier, she’ll surely return the favor.

6.4 Professional Experience Section for an Entry-level Web Developer

But again, does the above point look a bit unreal? What do you do if you are a fresher with no significant professional experience to mention?

Believe us, possessing years of work experience is not the only way to showcase that you’ll be fit for the job. More than the achievement itself, if you are able to demonstrate that you have the right attitude, your job is done.

So how do you phrase your professional experience in a way that will make you stand in comparison to a Developer armed with a few years of experience?

  • Include projects for which you freelanced in your career till date,
  • Bolster your Github profile and code that you’ve posted there,
  • Include all open-source projects you have contributed to,
  • Mention any hackathons or local developer meetups in which you participated or helped organize.

PRO-TIP: If you are looking for a short-term solution to beef up your entry-level web developer ré­su­mé, just look up for some open-source projects online. You’ll find hundreds of projects to which you can contribute, so you can incorporate the same on your ré­su­mé.

Meet Chad, an entry-level web developer looking for a high-end profile. After hours of deliberations and brainstorming, this is what he came up with:

Entry-level web developer possessing a BA Degree in Computer Science and armed with an eager-to-learn approach where I can deploy my excellent development skills.

— yawning continues —

Since you know that you only get one shot at the profile of your dreams, why would you sabotage your chances if you can do this instead:

  • Developed a webapp portal for an e-travel firm to increase the client’s sales by 48%,
  • Enabled the Smiles Dental Clinic to measure patient satisfaction scores through an online form. Assisted in boosting CSAT levels by 7 points within 2 months,
  • Independently developed a website for the local Baseball league championship to increase streaming sales by 50%,
  • Created a webapp to facilitate easy donations through Facebook & Whatsapp for Friendicoes Shelter for the Homeless. Raised donation levels by 45% & helped rehabilitate 25 people from the street.

That’s Vincent. He knew he was stuck in a vicious cycle wherein he needed work experience to gain work experience. So he took matters in his own hands and scouted the digital space for any and every project that he could find. Within a span of 4 months, he executed 4 such projects, strengthened his ré­su­mé to make it at par with a professional developer, and is now leading a team of his own at a top-notch firm.

7. Education Section In A Web Developer Ré­su­mé

This section is often underrated by most developers. Shouldn’t the professional experience and projects be the focus on your ré­su­mé?

Yes. But that doesn’t mean you can scribble your educational qualifications on the back of a napkin and staple it on your ré­su­mé.

You can follow the conventional path and include your degree, college, and year of passing.

But remember. You only get one shot at this.

Let us clarify that through an example:

BA — Computer Science
University of Syracuse, ‘16
GPA 3.9

Um. Okay. Again, it’s not technically wrong. But try this:

BA — Computer Science
University of Syracuse, 2013-2016

  • Utilized a deep-rooted passion for cloud technologies by contributing to the open-source AWS Project for New York University
  • Wrote a column on ‘Is AI the Industrial Revolution of the 21st Century’ for the college magazine
  • Developed the Salesforce Contacts mobile app to streamline operations & performed Jasmine Unit Tests in the TDD process
    • Deployed the MVVM Architecture for boosting ability to build scalable apps & optimized usage of Pagination & Sorting

We don’t have to elucidate the differences, do we? The best part is that it’s easily doable. It’s not necessary that your ‘Education’ section should look like that — the points above are just examples. But if you sit down and brainstorm with yourself, you’ll definitely come up with a list of something which you can quantify and incorporate in your ré­su­mé — participation in clubs, internships, freelance projects, college competitions, publications... we can go on really.

8. Technical Projects

If you’ve been following our tips until now, you can include them all to make a brilliant ‘Projects’ section for your web developer ré­su­mé. Combining the Princeton formula with bucketing and bolding, this is what a sample ‘Projects’ section looks like:

A few obvious pointers that this sample highlights are as follows:

  • For every project, include an ‘Environment’ subheading which lists out all the tools and technologies which were deployed for executing that project. If there are a lot, you can categorize them into further classes (like we did with the ‘Technical Skills’ section).
  • A description of the company/client helps put the project in perspective. The idea is to showcase to the recruiter that you were working for a reputed company. You can include figures around number of employees, revenue, etc. to make sure it comes out like that.
  • Industry standards dictate the location and time period to be aligned to the right, with the company and project title aligned to the left.
  • Adding buckets or subheadings is an effective way to incorporate the skills and methodologies which the recruiter is looking for. You can scan the ‘Job Description’ for skills which the recruiter is targeting and phrase your points to ensure that the bucket (which goes on top of the points, meaning greater visibility) includes those skills.
  • Try to reserve a separate ‘Key Achievements’ section for as many projects as you possibly can, with quantifiable impact to showcase the depth of your contribution.
Key Projects section for the ré­su­mé of a Web Developer. (Large preview) 9. Additional Sections In The Web Developer Ré­su­mé

To deliver the Oomph!-factor to your ré­su­mé, there are additional sections which you can incorporate. Recruiters know the cost of any hiring decision, and they know that if you are on-boarded, you’ll spend a greater part of your day with other team members. It’s important for them to know that you’ll gel along with the team — that’s where these additional sections come in.

You can include sections on ‘Extra-curricular Activities’, ‘Awards & Recognition’, ‘Hobbies/Interests’, and so on. It’s important to stay relevant even when you are working on these sections. Just saying you like to travel or play football won’t add any value to your ré­su­mé. Instead, quantifying your hobbies/interests will go a long way in ensuring that.

Web developers, in particular, can include their social profiles. This is a great guide containing sample developer portfolios that will inspire you to polish your own. A well-maintained Github profile, for instance, will signify that you are not a developer just because you have a degree — it means that you actually like your job and find it engaging enough to do in your free time as well.

This is a sample ‘Hobbies’ section, for instance, the likes of which we see a lot on a daily basis:

Reading, travel, photography

Surprisingly, a vast majority of applicants will have a ‘Hobbies’ section like this. This tells the recruiter nothing.

Now, check this out:

  • Convener of monthly meetings of the Webber Society of California, with 800+ members in CA and 10,000+ pan US
  • Photography: Owner and administrator of the Free Smiles Photography Page on Facebook with 7k+ likes
  • Travelled to 7 countries in the last 12 months and documented the same on my travel blog (insert link)

Maybe you don’t own a photography page with 7k+ likes, and that’s okay. The idea is to quantify even your hobbies and interests, to give an idea to the recruiter as to what that hobby means to you. Most recruiters look for people who can have a life outside of the workplace and can maintain a healthy work-life balance. If you can’t elaborate on your hobbies or interests, better to avoid that section altogether than to include it and make it look like you just wanted to fill up space.

A ‘Portfolio’ section will do wonders for your ré­su­mé. You can find projects online which would only take a couple of hours — adding something like that on your ré­su­mé will instantly boost its value. You can’t attach a million lines of code in an Appendix to your ré­su­mé to tell the recruiter that you like to code. But a healthy portfolio containing a list of happy clients and projects successfully executed will bolster your profile.

10. ATS Optimization

Ah. The dreaded ATS. You might have only heard rumors or sordid tales of it, but what exactly is the ATS?

If you’re the Head Recruiter of an MNC that receives thousands of applications on a daily basis, what are your options? To personally go through all of the ré­su­més? To hire a team the size of Denmark and have them scan ré­su­més 24/7? Or, you know, get a software to do the job for you?

Applicant Tracking Systems work a keyword matching algorithm, wherein the software matches the ré­su­mé with the keywords present in the job description. Remember that one time when you sent a ré­su­mé to a company and never heard from them? Did you curse the recruiter after that, wondering why they couldn’t bother to send a standard rejection mail? Have you considered the fact that maybe no human recruiter actually got a chance to scan your ré­su­mé? What if your ré­su­mé was rejected by the ATS even before it landed on a human’s desk?

That happens more often than you think. The solution to that isn’t stuffing your ré­su­mé with keywords. Your task isn’t to beat the ATS alone — even if your ré­su­mé is parsed by the ATS, the recruiter will take one look and trash it even before you get a chance to blink.

This is a great tool to match your ré­su­mé with the JD which you are targeting. It will give you an ATS score depending on how many relevant keywords you used in the ré­su­mé against the JD. Moreover, it will give you a list of keywords which you can include to increase your score. A lot depends on which particular ATS that the company is using. Also, remember that the ATS, at the end of the day, is operated by a human recruiter. You can only guess which keyword the recruiter will look up on the ATS, but you can cater to as many keywords as you possibly can. just to be sure.

Scan the JD to get a list of keywords which are important to the company; additionally, you can paste the entire JD in a word cloud which analyses the frequency of words used in a text. Incorporate those keywords in an organic manner without making it look like you are being blatant about it.

Reminder: ATS is just a step in the entire recruitment process. You shouldn’t compromise meaning or authenticity at the cost of ATS optimization. It would be futile if the ATS is able to parse your ré­su­mé but the recruiter sitting behind a desk thinks the ré­su­mé itself was written by a machine.

11. Key Takeaways

To recap a few critical points that we touched above:

  • A reverse-chronological ré­su­mé format is your best best. A functional or a hybrid (combination) ré­su­mé is not the best way to showcase your achievements with context and impact. A reverse-chronological ré­su­mé showcases your trajectory which gives a bird’s-eye view of your career till date.
  • In case you are not an entry-level developer, go for a professional Summary section instead of an Objective section.
  • Divide your skills into Technical and Managerial Skills. Group all your technical skills under relevant sub-headings to make the job of the recruiter (who will be a generalist and not a ‘techie’) easier. Prioritize professional skills (hard skills) over soft skills and try to elucidate the skills that you have mentioned in your ‘Professional Experience’ section.
  • A MasterCV is the ideal way if you want to break down your job-hunting process into something much more manageable — not just for your immediate requirements but for the long run.

    Having a master document containing all your achievements till date will allow you to customize your job application, instead of sending a generic ré­su­mé for all vacancies.

    And tailoring your ré­su­mé to the job application is how you beat a majority of other applicants.

  • Keep the Princeton formula in mind (Action Verb + Project + Result = Accomplishment) while you are framing points under the ‘Professional Experience’ section. This allows you to establish a cause-effect relationship which can transform your entire application.
  • Bolding and Bucketing (sub-headings) in your work-ex section will make sure you pass the 6-second test. You can use it to only highlight those achievements which you want the recruiters to notice before they dive down into your actual ré­su­mé.
  • Go for additional sections (Hobbies, Interests, etc.) only if you think it will bolster your application, or if you can provide substantial details around the same.
  • Once you are done, check the ATS score of your ré­su­mé against the job description for the profile which you are targeting to identify gaps and areas of improvement.
12. A Sample Ré­su­mé To Get You Started

Still have more doubts around the ré­su­mé-writing process? Want to share your experience of making your ré­su­mé or the job-hunt in general? Give us a shout-out in the comments and we’ll get back to you!

A complete sample ré­su­mé for a web developer (Large preview) (ra, yk, il)
Categories: Web Design

Create Interactive Gradient Animations Using Granim.js

Tuts+ Code - Web Development - Thu, 06/28/2018 - 06:36

Gradients can instantly improve the look and feel of a website, if used carefully with the right color combination. CSS has also come a long way when it comes to applying a gradient on any element and animating it. In this tutorial, we will move away from CSS and create gradient animations using a JavaScript library called Granim.js.

This library draws and animates gradients on a given canvas according to the parameters you set when creating a Granim instance. There are different methods which can be used to make your gradient respond to different user events like a button click. In this tutorial, we will learn about this library in detail and create some simple but nice gradient animation effects.

Create Solid Color Gradient Animations

Before we begin creating any gradient, you will have to include the library in your project. For this, you can either download Granim.js from GitHub or link directly to a CDN. The library version that I am using in this tutorial is 1.1. Some methods that we will discuss here were only added in version 1.1, so using an older library version when following this tutorial will not always give the expected result. Keeping these points in mind, let's create our first gradient using Granim.js.

Every time you create a new Granim instance, you can pass it an object of key-value pairs, where the key is the name of a particular property and the value is the value of the property. The element property is used to specify the CSS selector or DOM node which will point to the canvas on which you want to apply a particular gradient.

When you create a gradient animation where the colors change from a relatively light value to a darker value, it might become impossible to read some text that you have positioned on the canvas. For example, the initial gradient applied on an element might be a combination of yellow and light green. In such cases, the text of the canvas would have to be darker for users to be able to read it properly. 

Similarly, the gradient might consist of dark red and black at some other point, and in such cases the dark text would not be easy to read. Granim.js solves this problem for you by allowing you to specify a container element on which you can add the dark and light classes to style the text or other elements accordingly. The value of the elToSetClassOn property is set to body by default, but you can also specify any other container element. The dark and light class names are updated automatically based on the average color of the gradient.

The elToSetClassOn property does not work by itself. You will also have to specify a name for the Granim instance that you created using the name property. If you set the name to something like first-gradient, the name of the classes applied on the container element will become first-gradient-light or first-gradient-dark based on how light or dark the gradient currently is. This way, any element which needs to change its color based on the lightness or darkness of the gradient will be able to do so with ease.

The direction in which a gradient should be drawn can be specified using the direction property. It has four valid values: diagonal, left-right, top-bottom, and radial. The gradients that you create will not move in those particular directions—they will just be drawn that way. The position of the gradient doesn't change during the animation; only its colors do.

There is also a states property, which accepts an object as its value. Each state specified inside the states object will have a name and a set of key-value pairs. You can use the gradients property to specify different colors which should make up a particular gradient. You can set the value of this property to be equal to an array of gradients. 

Granim.js will automatically create an animation where the colors of the gradient change from one set to another. The transition between different gradients takes 5,000 milliseconds by default. However, you can speed up or slow down the animation by setting an appropriate value for the transitionSpeed property.

After the gradients start animating, they will have to come to an end at one point or another. You can specify if the gradient should then just stop there or start animating again from the beginning using the loop property. This is set to true by default, which means that the gradient would keep animating.

Each color in a gradient can have a different opacity, which can be specified using the opacity property. This property accepts an array to determine how opaque each color is going to be. For two gradient colors, the value can be [0.1, 0.8]. For three gradient colors, the value can be [1, 0.5, 0.75], etc.

You also have the option to specify the time it takes for the gradient animation to go from one state to another using the stateTransitionSpeed. This is different from the transitionSpeed property, which controls the animation speed inside the same state.

In the following code snippet, I have created two different Granim instances to draw different gradients. In the first case, we have only specified a single gradient, so there is not any actual animation and the colors don't change at all.

var firstGranim = new Granim({ element: "#first", name: "first-gradient", direction: "diagonal", opacity: [1, 1], states: { "default-state": { gradients: [["#8BC34A", "#FF9800"]] } } }); var secondGranim = new Granim({ element: "#second", name: "second-gradient", elToSetClassOn: ".wrapper", direction: "top-bottom", opacity: [1, 1], states: { "default-state": { gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]], transitionSpeed: 2000 } } });

Animate Gradients Over an Image

Another common use of the Granim.js library would be to animate a gradient over an image drawn on the canvas. You can specify different properties to control how the image is drawn on the canvas using the image property. It accepts an object with key-value pairs as its value. You can use the source property to specify the path from which the library should get the image to draw it on the canvas.

Any image that you draw on the canvas will be drawn so that its center coincides with the center of the canvas. However, you can use the position property to specify a different position to draw the image. This property accepts an array of two elements as its value. The first element can have the values left, center, and right. The second element can have the values top, center, and bottom. 

These properties are generally useful when you know that the size of the canvas and the image won't match. In these situations, you can use this property to specify the part of the image that should appear on the canvas.

If the images and the canvas have different dimensions, you can also stretch the image so that it fits properly inside the canvas. The stretchMode property also accepts an array of two elements as its value. Three valid values for both these elements are stretch, stretch-if-smaller, and stretch-if-larger.

A gradient with blend mode set to normal will completely hide the image underneath it. The only way to show an image below a gradient of solid colors would be to choose a different blend mode. You can read about all the possible blend mode values for a canvas on MDN.

I would like to point out that the ability to animate a gradient over an image was only added in version 1.1 of the Granim.js library. So you will have to use any version higher than that if you want this feature to work properly.

var firstGranim = new Granim({ element: "#first", name: "first-gradient", direction: "diagonal", opacity: [1, 1], image: { source: "path/to/rose_image.jpg", position: ["center", "center"], blendingMode: "lighten" }, states: { "default-state": { gradients: [["#8BC34A", "#FF9800"], ["#FF0000", "#000000"]] } } }); var secondGranim = new Granim({ element: "#second", name: "second-gradient", elToSetClassOn: ".wrapper", direction: "top-bottom", opacity: [1, 1], image: { source: "path/to/landscape.jpg", stretchMode: ["stretch", "stretch"], blendingMode: "overlay" }, states: { "default-state": { gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]], transitionSpeed: 2000 } } });

Methods to Control Gradient Animation Playback

Up to this point, we did not have any control over the playback of the gradient animation once it was instantiated. We could not pause/play it or change its state, direction, etc. The Granim.js library has different methods which let you accomplish all these tasks with ease.

You can play or pause any animation using the play() and pause() methods. Similarly, you can change the state of the gradient animation using the changeState('state-name') method. The state-name here has to be one of the state names that you defined when instantiating the Granim instance.

More methods were added in version 1.1 which allow you to change the direction and blend mode of an animation on the fly using the changeDirection('direction-name') and changeBlendingMode('blending-mode-name') methods.

In the following code snippet, I am using a button click event to call all these methods, but you can use any other event to call them.

var firstGranim = new Granim({ element: "#first", name: "first-gradient", elToSetClassOn: ".wrapper", direction: "top-bottom", opacity: [1, 1], isPausedWhenNotInView: true, image : { source: 'path/to/landscape.jpg', stretchMode: ["stretch", "stretch"], blendingMode: 'overlay' }, states: { "default-state": { gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]], transitionSpeed: 2000 }, "green-state": { gradients: [["#4CAF50", "#CDDC39"], ["#FFEB3B", "#8BC34A"]], transitionSpeed: 2000 }, "red-state": { gradients: [["#E91E63", "#FF5722"], ["#F44336", "#FF9800"]], transitionSpeed: 2000 } } }); $(".play").on("click", function(){ firstGranim.play(); }); $(".pause").on("click", function(){ firstGranim.pause(); }); $(".diagonal").on("click", function(){ firstGranim.changeDirection('diagonal'); }); $(".radial").on("click", function(){ firstGranim.changeDirection('radial'); }); $(".red-state").on("click", function(){ firstGranim.changeState('red-state'); }); $(".green-state").on("click", function(){ firstGranim.changeState('green-state'); }); $(".color-dodge").on("click", function(){ firstGranim.changeBlendingMode('color-dodge'); }); $(".color-burn").on("click", function(){ firstGranim.changeBlendingMode('color-burn'); }); $(".lighten").on("click", function(){ firstGranim.changeBlendingMode('lighten'); }); $(".darken").on("click", function(){ firstGranim.changeBlendingMode('darken'); });

Final Thoughts

In this tutorial, I have covered the basics of the Granim.js library so that you can get started with it as quickly as possible. There are a few other methods and properties that you might find useful when creating these gradient animations. You should read the official documentation in order to read about them all.

If you’re looking for additional JavaScript resources to study or to use in your work, check out what we have available in the Envato Market.

If you have any questions related to this tutorial, feel free to let me know in the comments.

Categories: Web Design

How Mobile Web Design Affects Local Search (And What To Do About It)

Smashing Magazine - Thu, 06/28/2018 - 05:30
How Mobile Web Design Affects Local Search (And What To Do About It) How Mobile Web Design Affects Local Search (And What To Do About It) Suzanna Scacca 2018-06-28T14:30:06+02:00 2018-07-11T12:36:25+00:00

As mobile-first takes center stage in the majority of articles I write these days, I’ve had a number of designers and developers question why that is. Sure, Google has made a big push for it, so it’s smart to do what Google tells you. But, for some websites, the majority of traffic doesn’t come from mobile users.

At the moment, there are certain websites that happen to receive more mobile traffic than others, and a lot of it boils down to location. As Google explains it:

“Looking for something nearby—a coffee shop, noodle restaurant, shoe store—is one of the most common searches we do. In fact, nearly one-third of all mobile searches are related to location.”

Logically, it makes sense. If a user has access to a desktop or laptop at home or work, they’re more likely to use it to initiate a search. Whether they’re multitasking (like while coordinating dinner with a friend through Skype), walking around a city, or decide to order dinner in but don’t want to move from the couch, the mobile device is a quick way to get that information.

In this article, I’m going to focus explicitly on these kinds of consumers and the websites that appeal to them. In other words, if you design websites for businesses with a local presence, keep reading to learn how to use mobile web design to improve their local search ranking.

Getting the process just right ain't an easy task. That's why we've set up 'this-is-how-I-work'-sessions — with smart cookies sharing what works really well for them. A part of the Smashing Membership, of course.

Explore features → Seven Mobile Web Design Strategies To Use For Local Search

In last year’s Local Consumer Review survey, Bright Local revealed that 97% of consumers had used the Internet to search for local businesses at some point in 2017. For some users, the Internet was frequently used as a resource, with 12% looking for new businesses every day and 29% doing so at least once a week.

A breakdown of how frequently people search for local businesses online. (Image source) (Large preview)

A report by hitwise shows that the majority of online searches begin on mobile:

Industries whose users most commonly begin their searches for on mobile. (Image source) (Large preview)

Notice the trend in business types whose users most often begin their searches on mobile (i.e. they’re mostly local businesses).

Further, it appears that these kinds of searches are done for the purposes of research at the start of the buyer’s journey. If web designers and developers can get into the minds of their target users and the kinds of questions they might ask or features they might seek out, they can more effectively build a relevant mobile experience through their sites.

For those of you who specialize in building websites for clients with a local user base, you should utilize mobile design strategies that improve local search results. While some of your efforts outside the website will help with this (like creating a Google My Business page and responding to reviews on Yelp), there’s a lot that can be done with your design to greatly contribute to this as well.

Strategy 1: “Design” Your Metadata For Mobile

Copywriters and web developers are already aware of what a critical role metadata plays in a website’s search marketing efforts. In just a few succinct strings of text, you can tell search engines and your audience a lot about your website and each of its web pages. This is particularly helpful in local search as users look for results that answer the “[fill in the blank] near me” question.

But that’s not the strategy I’m talking about here. Instead, I want to focus on how you can “design” your metadata so that it’s more attractive to mobile users once your website actually appears in their local search results.

There are a couple ways to do this:

The first is to craft succinct metadata strings for each web page. Let’s take the Liquid Surf Shop website, for instance:

Refer to the first search result for Liquid Surf Shop. Notice how succinctly it’s written. (Image source) (Large preview)

The first search result looks nice, doesn’t it? The web page name and URL each fit on one line. The description accurately describes what the shop does (and points out where it’s located!) while also fitting within the allotted space for mobile search descriptions.

Now, take a closer look at the Liquid Surf Shop when it’s compared against direct competitors in mobile search:

Liquid Surf Shop’s metadata is well-written and to the point. (Image source) (Large preview)

If you look at the entries for East of Maui and Dewey Beach Surf Shop above, notice how their descriptions end with an incomplete sentence. Then, look at the Bethany Surf Shop below it. The meta title is way too long for the space given. This lack of attention to metadata might cost these websites visitors when positioned around a well-written listing like the one at the Liquid Surf Shop.

Another thing you can do to improve local search listing appearance (as well as how high it ranks on the page) is to use schema markup in your design’s code.

Schema.org has created a robust set of structured data that businesses can use to improve search engine comprehension and, consequently, results. Local businesses, in particular, would find schema markup especially helpful as it allows them to “tag” various elements consumers tend to use in the decision-making process.

Here’s an example of schema markup done well for a local business: Henlopen City Oyster House:

Schema markup found for Henlopen City Oyster House home page. (Image source) (Large preview)

As you can see, the developer has marked up the home page with various structured data. Specifically, they have associated it with three “types”: Local Business, Restaurant, and Service. Each of those schema types have been drilled down even further into details about the location, contacting the restaurant, cuisine type, and so on. This is great for connecting mobile users to the kind of local business they seek out.

Strategy 2: Shorten The Website

With some mobile websites, it may be okay to ask users to scroll four or five times before they reach the end of the page. Or to go two or three pages deep to get to a desired endpoint.

That said, that type of extended on-site experience probably isn’t ideal for local mobile users. While Google does pay attention to factors like time-on-site and pages visited, what you need to be more concerned with is high bounce rates and lack of engagements or conversions.

In order to create this ideal situation for users while still appeasing the search gods, your focus when designing a website and its navigation is to keep it short and to the point.

I’m going to use the Bad Hair Day website for this example:

This is the first thing you see upon entering the Bad Hair Day website. (Image source) (Large preview)

The header of the website contains all the information someone might realistically need if they want to contact the hair salon and spa. The address is there along with a phone number (which does have a click-to-call function) and social media icons.

Other types of websites would do well to put business-specific information and calls-to-action here as well. For example:

  • Location search
  • Hours of operation
  • Make an appointment or reservation
  • View a menu (for food)

…and so on.

The simplified navigation menu for the Bad Hair Day website. (Image source) (Large preview)

Scroll just a little bit down the website and you can open the hamburger menu. As you can see, this navigation is simply structured and keeps all the essentials on the top level for easy discovery.

One more scroll on the Bad Hair Day site takes you to this informational section. (Image source) (Large preview)

The home page of this mobile website only requires three full swipes before you get to the end of it, which is a truly nice touch. Rather than create an overly elaborate home page with summary sections of each page that force users to scroll and scroll, Bad Hair Day keeps it simple.

By offering such a user-friendly layout and structure, Bad Hair Day has created a truly awesome first impression. In addition, by keeping things simple, the website isn’t burdened by excessive amounts of images, animations, scripts, and so on. Because of this, the mobile site loads quickly.

Strategy 3: Localize Visual Content

If your sites are mostly comprised of large swatches of color and stock photography, this one won’t apply. However, if the designs you create include custom-made photos and videos, there’s a unique opportunity to use this visual content to rank in local search.

If it makes sense, include photos that strongly resonate with local residents. Recognizable images of the local landscape or cityscape will give visitors a reason to feel a stronger connection to the business. It’s kind of like bonding over a local sports team during a consultation call or first meeting. Only, you’re able to make this connection with them through your choice of imagery.

But that’s just how you appeal to visitors’ local ties on the website. How about in search?

For this, use alt text on images and videos. This is typically recommended for the purposes of accessibility (i.e. helping impaired visitors consume your content even if they can’t see or hear it). However, alt text is also readable by Google bots. If you use the right kinds of location-driven keywords in your image’s alternative text, that visual content can rank higher in local image searches. Just keep in mind that you don’t want to sacrifice accessibility for local SEO. Make your alt text descriptive while finding ways to infuse local keywords into it.

One of the local business types I think this is particularly useful for is a real estate agency. Like Jack Lingo Realty. Here is a listing Jack Lingo posted on its website for a home in Rehoboth Beach:

Real estate listing on the Jack Lingo website. (Image source) (Large preview)

The top of the page includes a series of beautiful images taken of the house located at 17 West Side Drive, Rehoboth Beach, Delaware.

Now, open up the page source and look at what the first image’s alt text says:

Example of location-specific alt text used on the Jack Lingo website. (Image source) (Large preview)

The alt text includes a unique identifier at the start of it (probably to distinguish it from the other images in the gallery), but is then followed by the address of the property. For prospective homeowners who do their research via Google for properties in that particular neighborhood and community, well, guess what they find when they do a Google image search for it?

Jack Lingo takes the top spots in local image search. (Image source) (Large preview)

Jack Lingo’s property images take the top spots. Pretty impressive, right? So, the next time you design a website for a client whose business depends on showing off a product or property, think about how you can optimize it for local image results.

Strategy 4: Add Reviews And Ratings When Possible

I always like to refer to the aggregation of reviews and ratings on your own website as a way to control the conversation about your brand. It makes sense, right? When customers are left without a podium to speak from, they’re going to make their own… on Yelp, Google, Facebook, TripAdvisor, and wherever they feel like it. While there’s no escaping this entirely, offering a space for reviews and ratings on your website can help control the flow of feedback.

It also can improve the look of a local search result.

The example I’m going to use for this is the Fairfield Inn & Suites Rehoboth Beach:

The top of the Fairfield Inn & Suites page displays the average user rating as well as number of reviews. (Image source) (Large preview)

As you can imagine, a major hotel property owned by Marriott will already receive a lot of reviews from the web.

An expansion of how users rate the Marriott property, on average. (Image source) (Large preview)

However, by adding reviews and ratings to its own website, Marriott is accomplishing a few things that will help it with local search users. For starters, there’s the transparency factor. Marriott has actively solicited customers for feedback on their hotel stay and published those reviews for all to see. Local users are very fond of online reviews, with 73% claiming that positive reviews increase their trust in a local business.

The Fairfield Inn & Suites listing includes an eye-catching rating. (Image source) (Large preview)

In addition, Marriott’s inclusion of a rating system on its website proves beneficial within local search results, too.

As you can see in the list of results for “Rehoboth beach de lodging”, Marriott is the only one that includes a rating—and an impressive one at that. If mobile users are quickly scrolling through search results for the most relevant and attractive business for their needs, a positive review might be enough to stop them dead in their tracks.

Strategy 5: Build Dedicated Location Pages

When designing websites with multiple locations, be sure to create a dedicated page for each location. There are on-site benefits to think about as well as search-related ones.

For starters, individual location pages reduce the amount of work visitors have to do once they get on the site. You’ve likely seen those “Location” pages before that are cluttered with a dozen or so locations, each with information related to address, phone number, email, website and so on. By giving each location a separate page, however, you don’t have to worry about compromising readability or focus.

The Tanger Outlets website demonstrates this point well as you can see that, in just a few clicks, visitors can quickly learn more about their personal location without the clutter or distraction of all the others.

he Tanger Outlets navigation includes a page dedicated to Locations. (Image source) (Large preview)

The Tanger Outlets navigation menu puts the “Locations” page right at the very top. It’s likely the first thing visitors search for as they aim to learn more about their local outlet mall and its offering of shops and brands.

The “Location” page on the Tanger Outlets site includes an interactive map. Image source) (Large preview)

The “Location” page for the Tanger Outlets website then displays an interactive map. Users can drag the map around and try to find their location on their own or they can enter details below in the short form.

Example of a location-specific page and details from Tanger Outlets. Image source) (Large preview)

Upon finding their location, users then receive a high-level overview of the location, phone number, and hours of operation for the Tanger Outlets near them. There are additional pages they can visit to learn more about stores and deals at that particular mall.

By creating dedicated location pages on your website, you’re also giving it an extra chance to rank within local search results.

Strategy 6: Place Your CTA Front And Center

As you might have noticed, there are common themes running through these strategies: simplicity and straightforwardness. The more quickly you can deliver information to your visitors through smart design techniques, the greater the likelihood they will engage and/or convert.

As it pertains to these key checkpoints, you obviously know what to do about designing call-to-action buttons for mobile: make them big, colorful, clickable, and in the thumb zone. But what about placement? Some argue that a call-to-action should always be placed in the most logical of locations. In many cases, that’s directly after a descriptive section of text that “sells” visitors on the reason for clicking through.

On mobile, you don’t really have time to waste. And if they’re doing a search explicitly looking for a local business that does X, Y or Z, then it would be beneficial to put your CTA front and center.

The Atlantic Oceanside is an extreme example of how to do this, but it’s one I believe is done well all the same:

The top of the Atlantic Oceanside page displays a “Book Now” button. (Image source) (Large preview)

The very top of the Atlantic Oceanside website is a prominent “Book Now” button. Granted, some users might not be ready to pull the trigger on a hotel reservation the second they enter the site, but it’s still a good idea to have the button there. It’s a reminder that the booking process is going to be as painless as possible.

The “Book Now” button appears a number of times throughout the Atlantic Oceanside website. (Image source) (Large preview)

For visitors who aren’t ready to book right away, the website includes the same CTA throughout the rest of the site. It’s consistently designed and worded so that visitors always know where to find it.

The Atlantic Oceanside site also includes the CTA in the navigation. (Image source) (Large preview)

There’s another instance of the CTA that I think is placed quite well and that’s the one that exists in the navigation. You can see that all the important details about a guest’s stay are presented first, but then “Book Now” and the business’s phone number are at the bottom of the list so users don’t have to dig through pages to find that information.

If you want to make conversions easier for mobile users, don’t bury your CTAs.

Strategy 7: Include Geotargeting Features

The last strategy I’m recommending is less about design and more about features you can apply to your site that give visitors a personalized experience.

Geotargeting and geolocation services (like beacon technology) were really hot topics a few years ago. Think back to when Pokémon Go was all anyone could talk about. Mobile users were willingly giving apps their location data in return for what they considered to be a valuable experience. I believe you should be doing the same when designing mobile websites for local search users.

With geotargeting features, you have the opportunity to enhance visitors’ experience in a way that a global-serving website can’t.

WSFS Bank is an example of a business that makes good use of this feature. First, it asks for permission to use the current location as determined by the user’s mobile device:

WSFS Bank politely asks visitors for access to geolocation data. (Image source) (Large preview)

Upon granting access to the mobile website, the user is then presented with information at the top regarding the closest WSFS Bank location:

A sticky top bar is now presented to the mobile user on the WSFS Bank website. (Image source) (Large preview)

There are other use cases for geotargeting that your visitors might find useful as well. For instance, you could offer targeted discounts, include in-store availability checks, and convert prices to their local currency (if not the same as your own). Ultimately, your access to their location should be used to improve their experience and compel them to convert online or visit the brick-and-mortar location.

Wrapping Up

Designing for mobile-first isn’t all too tricky these days now that we’ve had time to adjust to it. That said, designing mobile websites for local search users is a different story. It’s not that they don’t appreciate a responsive design or shorter contact forms like everyone else. It’s just that their motivation and goals aren’t always the same as everyone else’s.

So, in addition to designing websites for mobile-first indexing, pay attention to how the design affects the website’s appearance in search results as well as how it’s received by local search users.

(lf, ra, il)
Categories: Web Design

How we fought webspam - Webspam Report 2017

Google Webmaster Central Blog - Thu, 06/28/2018 - 05:16

We always want to make sure that when you use Google Search to find information, you get the highest quality results. But, we are aware of many bad actors who are trying to manipulate search ranking and profit from it, which is at odds with our core mission: to organize the world's information and make it universally accessible and useful. Over the years, we've devoted a huge effort toward combating abuse and spam on Search. Here's a look at how we fought abuse in 2017.

We call these various types of abuse that violate the webmaster guidelines “spam.” Our evaluation indicated that for many years, less than 1 percent of search results users visited are spammy. In the last couple of years, we’ve managed to further reduce this by half.

Google webspam trends and how we fought webspam in 2017

As we continued to improve, spammers also evolved. One of the trends in 2017 was an increase in website hacking—both for spamming search ranking and for spreading malware. Hacked websites are serious threats to users because hackers can take complete control of a site, deface homepages, erase relevant content, or insert malware and harmful code. They may also record keystrokes, stealing login credentials for online banking or financial transactions. In 2017 we focused on reducing this threat, and were able to detect and remove from search results more than 80 percent of these sites. But hacking is not just a spam problem for search users—it affects the owners of websites as well. To help website owners keep their websites safe, we created a hands-on resource to help webmasters strengthen their websites’ security and revamped our help resources to help webmasters recover from a hacked website. The guides are available in 19 languages.

We’re also recognizing the importance of robust content management systems (CMSs). A large percentage of websites are run on one of several popular CMSs, and subsequently spammers exploited them by finding ways to abuse their provisions for user-generated content, such as posting spam content in comment sections or forums. We’re working closely with many of the providers of popular content management systems like WordPress and Joomla to help them also fight spammers that abuse their forums, comment sections and websites.

Another abuse vector is the manipulation of links, which is one of the foundation ranking signals for Search. In 2017 we doubled down our effort in removing unnatural links via ranking improvements and scalable manual actions. We have observed a year-over-year reduction of spam links by almost half.

Working with users and webmasters for a better web

We’re here to listen: Our automated systems are constantly working to detect and block spam. Still, we always welcome hearing from you when something seems … phishy. Last year, we were able to take action on nearly 90,000 user reports of search spam.

Reporting spam, malware and other issues you find helps us protect the site owner and other searchers from this abuse. You can file a spam report, a phishing report or a malware report. We very much appreciate these reports—a big THANK YOU to all of you who submitted them.

We also actively work with webmasters to maintain the health of the web ecosystem. Last year, we sent 45 million messages to registered website owners via Search Console letting them know about issues we identified with their websites. More than 6 million of these messages are related to manual actions, providing transparency to webmasters so they understand why their sites got manual actions and how to resolve the issue.

Last year, we released a beta version of a new Search Console to a limited number of users and afterwards, to all users of Search Console. We listened to what matters most to the users, and started with popular functionalities such as Search performance, Index Coverage and others. These can help webmasters optimize their websites' Google Search presence more easily.

Through enhanced Safe Browsing protections, we continue to protect more users from bad actors online. In the last year, we have made significant improvements to our safe browsing protection, such as broadening our protection of macOS devices, enabling predictive phishing protection in Chrome, cracked down on mobile unwanted software, and launched significant improvements to our ability to protect users from deceptive Chrome extension installation.

We have a multitude of channels to engage directly with webmasters. We have dedicated team members who meet with webmasters regularly both online and in-person. We conducted more than 250 online office hours, online events and offline events around the world in more than 60 cities to audiences totaling over 220,000 website owners, webmasters and digital marketers. In addition, our official support forum has answered a high volume of questions in many languages. Last year, the forum had 63,000 threads generating over 280,000 contributing posts by 100+ Top Contributors globally. For more details, see this post. Apart from the forums, blogs and the SEO starter guide, the Google Webmaster YouTube channel is another channel to find more tips and insights. We launched a new SEO snippets video series to help with short and to-the-point answers to specific questions. Be sure to subscribe to the channel!

Despite all these improvements, we know we’re not yet done. We’re relentless in our pursue of an abuse-free user experience, and will keep improving our collaboration with the ecosystem to make it happen.

Posted by Cody Kwok, Principal Engineer
Categories: Web Design

Everything You Need To Know About Transactional Email But Didn’t Know To Ask

Smashing Magazine - Wed, 06/27/2018 - 03:30
Everything You Need To Know About Transactional Email But Didn’t Know To Ask Everything You Need To Know About Transactional Email But Didn’t Know To Ask Garrett Dimon 2018-06-27T12:30:49+02:00 2018-07-11T12:36:25+00:00

Any application with user-authentication can’t exist without email, yet, email doesn’t always get the attention it deserves. With modern email service providers, it’s easier than ever to create a first-class transactional email experience for your users, but, for most of us, the challenge lies in the fact that you don’t know what you don’t know. We’re going to dive into an end-to-end analysis of everything you need to bring your transactional email up-to-snuff with the rest of your web application.

We’ll address the difference between transactional and bulk emails and how and why to use email authentication. We’ll also talk about handling delivery edge cases gracefully, crafting great email content, and the key pieces of infrastructure you’ll want in place for sending email and monitoring delivery. Then you’ll be well on your way to being a transactional email pro in no time.

The Challenges Of Transactional Email

To some degree, email has traditionally been a second-class citizen because it’s more difficult to monitor and understand how well you’re doing. With your application, there are countless performance monitoring tools to provide insights into front-end, back-end, database, errors, and much more. With email, the tools are less well-known and a little more difficult to use effectively. So let’s explore some of the challenges facing email monitoring and reporting, and then we can look at the available tools and tactics that can work within the challenges and constraints to give you a more informed view of your transactional email.

Getting the process just right ain't an easy task. That's why we've set up 'this-is-how-I-work'-sessions — with smart cookies sharing what works really well for them. A part of the Smashing Membership, of course.

Explore features →

The biggest underlying challenge with monitoring email is that it’s literally impossible to log in to every recipient’s inbox and check to see if they received the email. So right out off the gate, the best insights we can hope for are simply proxies or estimations of performance. The second biggest challenge is that every ISP plays by their own rules. What might get classified as spam by Outlook could go straight to the inbox in Gmail. And inbox providers can’t share their “secret sauce” because it would immediately be exploited by spammers. So what’s a developer to do?

Open rates can give you a rough approximation, but since they rely on tracking pixels, which can easily be blocked, it’s an incomplete picture. Inbox rates and delivery speeds can’t be directly measured either. So you’d have to settle for sending regular tests to seed accounts that you have the ability to test. These aren’t perfect, but it’s the best available proxy for understanding delivery to the various inbox providers. We’ll address tools help automate this later in the guide.

Adding domain authentication in the form of DKIM, SPF, and DMARC can be difficult and confusing, or, depending on the size of your company, getting access or approval for DNS changes can be cumbersome or impossible. Even then, it’s incredibly easy to get the DNS entries incorrect. If you’re not familiar with domain authentication, don’t worry, we’ll address it in-depth later.

Of course, even if you’re generally able to achieve great delivery, bounce handling introduces more variability to delivery. Recipient’s inboxes may be full. People change jobs, and email addresses become inactive. People make typos with email addresses. People may sign up with a group alias, and then one of the addresses in that group bounces. Temporary server or DNS outages can affect delivery for everybody on a given domain. And then there are spam complaints.

So right out of the gate, the deck is stacked against you. There are plentiful edge cases, and it’s incredibly difficult to get an accurate picture of delivery. Ongoing monitoring is complex, and there’s a lot of room to make mistakes. It paints a gloomy picture, I know. Fortunately, email has come a long way, and while it’s not trivial, there are good solutions to all of these problems.

Transactional vs. Bulk Promotional

Before we go further, we need to address the significant differences between bulk promotional email and your application’s transactional email. With the former, if an email is lost or delayed, nobody is going to miss it. With the latter, however, a missing or significantly delayed password reset can lead to additional support requests. Your transactional emails are as critical as a page in your application. You can think of a missing or delayed email as being roughly equivalent to a broken page in your web application. Email is a different medium, but it is still a central piece of the experience of using your application.

Because people expect and want to receive transactional emails, they see higher engagement in terms of open and click rates than your bulk promotional email. Similarly, transactional emails will be reported as spam much less frequently than bulk emails. And all of that leads to a better reputation for your transactional email than the bulk promotional emails. In some cases, that could be the difference between the inbox and spam folder. Or, it may just be a matter of which tab Gmail puts the email in. Regardless, the differences between transactional and bulk are stark enough that even Gmail officially recommends separating the streams. That way, your bulk reputation won’t drag down your transactional reputation.

This brings us to our first tip:

1. Separate your transactional and bulk sending streams using different domains or subdomains

In a perfect world, you’d send transactional through your primary domain, and relegate bulk to a subdomain like something@marketing.example.com and each category would have its own IP addresses as well.

Separating your streams is the first step and critical to lay the ground work for the best possible email experience for your recipients. While you can’t guarantee delivery to the inbox, you can do a few things to stack the deck in your favor. Authentication is the next step to doing precisely that. Just like you wouldn’t launch a modern web application without a secure certificate, you don’t want to send email without fully authenticating it.

Email Authentication

You may have heard acronyms like DKIM, SPF, or DMARC, and you may have even copied and pasted some DNS entries to set these up. Or you may have skipped it because it felt a little too complex. Either way, these are all standards worth implementing, and they all complement each other and work together to build and protect your reputation. The exact approach to these will vary from provider to provider, but it’s always worth implementing.

Let’s start with DKIM. Without getting too much into the technical details, DKIM does two things. First, it acts as a sort of virtual wax seal on your emails to show that they haven’t been modified in transit. Second, it enables you to build domain reputation. While DKIM focuses on the domain, SPF focuses on providing a list of approved IP addresses for sending so that receiving mail servers have a better idea of whether an email is being sent from a legitimate source.

One significant benefit of DKIM is that it’s the key to avoiding “via” labels in Gmail or “on behalf of” labels in Outlook. These elements make your emails look a little more likely to be spam and can undermine the trust of your recipients. So DKIM is much more than a behind-the-scenes standard. It’s something that can directly affect the experience of your recipients.

That all brings us to the next foundational tip:

2. Authenticate emails with DKIM and SPF

While authentication can’t guarantee delivery, it’s a key facet of building a reputation and doing everything you can to ensure great delivery.

DMARC is designed to help protect against phishing attacks. It incorporates both DKIM and SPF to help you monitor sending for your domain and protect your domain reputation by enabling you to publish a DMARC policy. That policy tells inbox providers what to do when an email fails DMARC alignment.

Before DMARC, it was entirely up to inbox providers to choose how to handle emails that weren’t authenticated with DKIM and/or SPF, but with DMARC, you’re able to create a public policy that tells providers to quarantine (send to the spam folder) or reject (outright discard) emails that fail DMARC alignment.

The other benefit of DMARC is that it enables ISPs to deliver reports to you about the sources of email sent using your domain and the quantities that passed for failed alignment via DKIM or return-path. This can enable you to track down legitimate sources that are failing alignment and take action to ensure those sources are authenticated. It can also help you quantify the amount of illegitimate email that’s attempting to be sent using your domain.

PayPal is the quintessential example of the importance of a good DMARC policy. Over the years, countless scammers tried to spoof PayPal emails, but now, with DMARC, PayPal has a published DMARC policy telling ISP’s to reject emails that don’t pass DMARC. So if any scammers try to spoof a PayPal email, they’ll fail DMARC alignment, and the ISPs can be confident in fully rejecting those emails because PayPal has a public policy saying that if an email fails alignment, it should be rejected.

That’s a very brief overview of DMARC, but hopefully it helps provide the context for our third tip:

3. Establish and publish a DMARC policy

Also, if possible, set up a custom return-path to maximize your chance of alignment. Then, monitor your DMARC reports and make adjustments to ensure alignment for any legitimate sources of email. Finally, if your product or brand is the target of a high quantity of phishing attacks, begin phasing in a progressively more aggressive quarantine or reject policy over time.

Postmark’s DMARC tool is a free and easy way to establish a DMARC policy and begin receiving weekly reports about your domain. With your bulk and transactional email streams separated, and all of the afore-mentioned authentication set up, you’ve handled all of the foundational aspects of delivery. From here on out, we’ll focus on the email handling and treatment within your application.

Understand The Email Lifecycle

On the surface, email can sound pretty simple, but when you break down the email lifecycle, there’s a lot of subtlety and opportunity below the surface. The better you understand that, the more you’re able to provide a more nuanced and rich experience for recipients. Most of your opportunities to improve the email experience depending on understanding the nuances of email delivery and automating your application’s ability to process and handle them accordingly. So let’s look at the key events in the life of any email.


Once your application has assembled an email from the various bits of content, you’ll queue it up for delivery. Within your application, you’ll want to ensure that you’re sending email via background processing. We’ll discuss this in depth later, but the simple version is that any time your application communicates with a 3rd party service, you’ll want to handle that communication in the background. Assuming you’re using an email service provider, once you’ve made the request to their API, it will be queued for sending on their end as well.


Like any service, your email service provider will have their own queue for processing and sending your email. In most cases, these queues are extremely fast. Whereas sending a bulk email to thousands of recipients can take seconds or minutes, most transactional email will be sent much faster.


After the email is sent by your email provider, it will ideally be accepted by the inbox provider. However, “Accepted” does not mean “Delivered.” Think of it like the postal service. Just because it has your letter, it still has to process it before it is considered delivered. Also, some inbox providers will accept an email but not ultimately deliver it for a variety of reasons. So even when an email has been accepted, there’s no guarantee that it will eventually be delivered.


While some inbox providers will quietly reject emails, in most cases, when emails are rejected, it’s done explicitly, and you’ll receive an explanation of the problem with the email. In some cases, it may be IP or domain reputation, or it may be the content of the email. Unfortunately, you won’t always get a clear explanation of the reason for rejection.


Bounces are a more specific type of rejection. In cases where an email address doesn’t exist, the inbox is full, or some other reasons, mail services will report back that delivery failed and the email bounced. In these cases, you can use your ESP’s bounce handling notifications to proactively take steps to correct the problem. We’ll discuss that in more detail later.


Delivered is the state where the message has been given to the recipient. It may have been delivered to the inbox, spam folder, or one of Gmail’s tabs, but it has been delivered to some degree. You won’t ever receive an explicit notification that an email has been delivered, but it’s a key state in the lifecycle.


Open tracking isn’t entirely reliable because the method used to determine when an email has been opened can be blocked by the email client. Since open tracking relies on the email client to load an invisible image, clients that block image loading mean that those opens won’t be reported. Open rates can serve as a good proxy for delivery. For instance, if you switch email service providers without changing anything about your emails, and your open rates jump significantly, it’s safe to assume that your first email service provider was failing to deliver some portion of messages.

Click tracking is more reliable than open tracking, but it can bring complexities of its own. For instance, using Bit.ly or other URL shortening services is a common tactic used by spammers, so in most cases, the presence of a Bit.ly URL will put your email on the fast track to the spam folder. However, when done well through your email service provider’s click tracking, it can provide useful insights for your emails. Also, even if open tracking is blocked by a client, if someone clicks on an email, it’s safe to assume that the email was opened. So click tracking can help provide more accurate insights on open rates as well.

With open and click tracking, it’s important to give some consideration to privacy. While they can be powerful tools for enriching your recipient’s experience and providing you insights that can be used to improve your emails, they also touch on privacy issues. If you’re not going do anything with the data they provide, you’re better off not using them. Or, if you’re in an industry where privacy is highly sensitive, you’d probably want to think twice before enabling them.


While unsubscribes are less relevant for transactional emails, it’s still a request that should be respected. While you may not be legally obligated to support unsubscribing from transactional emails, it’s a status you may encounter, and when you do, you should respect it.

Spam Complaint

Like unsubscribes, spam complaints are less frequent with transactional email, but they still happen. If your spam complaint rate is high, it’s a good sign that you need to adjust the quantity and/or quality of the transactional emails you’re sending. Like bounce handling, you’ll want to be proactive about spam complaints as well. You’ll want to respect them, but it’s important to remember that some spam complaints are accidental. If someone reports an email as spam, it could affect them receiving future bills or invoices.

This brings us to our fourth tip:

4. Closely integrate message events into your application

Most email service providers offer extensive web hooks to automatically notify your application about key events with each message. While bounce handling is the most critical event to track and handle, the other events can provide useful information to enrich your application and make transactional email a more seamlessly integrated element of your user experience.

Take Care With Email Content

The content of your emails can play a role in both delivery and engagement. While some rules (such as avoiding the word “Viagra”) may be obvious, others are more subtle. Taking care to craft good content can drastically improve open rates or engagement.

We’ll group several considerations into our fifth tip for great transactional emails:

5. Take time to craft the content and structure of your emails

Things like the sender name and email address, the subject, preheaders, and mime types can have a meaningful impact on engagement, delivery, and open rates. Don’t let these elements be afterthoughts. Make time to get them right and continuously test and improve them as if they were any other page in your application.

Senders, Subjects, And Preheaders

While every email client is different, they all provide some level of insight about an email before it’s opened through some sort of preview. That can be as simple as displaying the sender and the subject, but it also sometimes contains a preview of the content. This topic could justify an article unto itself, but suffice it to say that it’s worthy of spending some time viewing your emails the way your recipients will. This includes clearly naming the sender, writing a useful and concise subject line, and crafting the perfect preheader. Don’t let these elements be an afterthought because they can have a significant impact on your open rate.

HTML And Plain Text

The actual content of your emails is important, and including both HTML and plain text versions of your emails can have a huge impact on your recipients. Some people prefer plain text. Whether for performance, privacy, or accessibility, providing a well-formatted and considered plain text option is a win for that recipient. And some spam filters prefer to see a plain text version paired with an HTML version. Litmus has a great writeup on the importance of plain text options in emails for more details.

Accept Replies And Avoid “No-Reply” Addresses

Do what you can to avoid using “no-reply” email addresses. They send the wrong signal in every way possible. As a result, you’ll receive more spam complaints since people can’t reply to unsubscribe. It’s one-way communication and reduces engagement that could otherwise improve deliverability.

Ideally, the from address or reply-to address would send replies to a monitored support inbox. This provides the best experience for recipients and ensures that replies don’t get lost in the mix. However, there’s one main consideration to keep in mind. If a user receives a password reset URL and replies, anybody with access to the reply will also have access to that password reset URL. The same goes for any particularly sensitive information, but, all things considered, you don’t want to send highly sensitive information in email anyways.

Another option is to use inbound receiving email addresses. In the case of things like comment notifications where it might be useful for the recipient to respond directly to the email, setting up inbound email processing can give you the ability to avoid no-reply email addresses.

Regardless of the method, you should always do your best to avoid no-reply addresses. Your customers will appreciate it, and you’ll be much more likely to receive important feedback if you’re listening on all channels.

Handle Email With Care

The content of your email is important, but how you deliver it and respond to edge cases with delivery can be just as important. There’s a lot that happens (or can happen) with each and every email you send. While most conversations with email focus simply on sending it, how you send it can be just as important.

We’ll group this batch into the sixth high-level tip for great transactional email delivery:

6. Invest in the infrastructure to send and deliver emails reliably

Sending emails sounds simple, but there’s a lot more to it than writing a few lines of code. It’s important to build and maintain the proper infrastructure like background processing and bounce handling to ensure the highest possible reliability for your email.

Background Processing

Assuming you’re using an email service provider, you’ll want to ensure that all of your email sending happens via background processes. This is the case with any communication with any external services, and there are a few reasons. First and foremost, with an external service, there’s always the possibility that it’s down. So if the request fails, it’s important to be able to retry the request automatically after a set period of time. Alternatively, there could be a problem with the request, or something may have changed on the part of the external service. Regardless of the reason, designing resiliency into your email sending will save you some grief at some point.

Similarly, a good background processing setup can make it easier to be alerted to and troubleshoot issues when something does go wrong. If you set up alerts when a queue runs high, you’ll know more quickly when there’s a problem. Also, assuming your background processing is capturing and logging errors, you’ll have a much easier time identifying the source of the issue.

Understand Dedicated IPs

If you’ve looked into transactional email to any degree, you’ve likely encountered the concept of using a dedicated IP address. While there are benefits to using a dedicated IP address, it’s not a black and white issue. In some cases, a dedicated IP address can hurt more than it helps.

With almost every email service provider, you have two options for sending. The first option is to send from the shared IP pool. In these cases, your delivery can be affected by the behavior of other senders using that same IP address. If those senders are nefarious, it can drag down the IP address’s reputation. However, if those senders are good, it can lift the IP address’s reputation.

The second option is a dedicated IP address. With a dedicated IP address, if there are reputation issues with the IP address, you only have yourself to blame. The catch is that, in order for a dedicated IP address to work well, you have to have a consistent daily volume that’s high enough to build and maintain a reputation. That’s somewhere around 10,000-20,000 emails per day. You also have to be careful to slowly warm up the IP address by sending progressively more mail consistently over a set period of time. And, while there are no bad senders to drag your reputation down, it also doesn’t receive any benefit from good senders who could help buoy your IP reputation. With most email service providers, dedicated IP addresses cost more as well.

Finally, while IP reputation still plays a role, inbox providers are increasingly weighting domain reputation in conjunction with IP reputation. Since IP addresses are increasingly disposable, putting more reputation on domains helps mitigate spammers cycling through domains because new domains would have to build reputation. This also means that if you’re having widespread delivery issues, those problems could be attributable to either the IP address or your domain. So swapping IP addresses may help, but if your domain reputation is suffering, changing the IP address won’t help. You’d instead have to focus on cleaning up your domain reputation.

While dedicated IP addresses can be great under the right circumstances, it’s not a slam dunk. And, if you’re using a shared IP address, you’ll want to make sure that you’re monitoring it closely to ensure that other senders aren’t ruining its reputation or landing it on blacklists.

Bounce Handling

Emails bounce. There’s no way around it. The reasons for bounces vary, but the need to handle bounces gracefully is universal. Think of bounce handling as exception handling for email. When an exception happens, you don’t want it silently discarded. You want to know that it happened and what caused it so that you can fix it. The same goes for bounce handling with one caveat. With bounce handling, you can empower your users to fix most problems themselves. This simultaneously increases customer satisfaction and reduces support requests.

When an email bounces with a hard bounce, the most important step is to stop attempting delivery to that address. While some hard bounces may eventually start working again on their own, repeated bounces to the same address is a highly negative signal to inbox providers. From their perspective, it means you’re not keeping your lists clean and that there’s a good chance you’re a spammer.

Unfortunately, if you stop attempting delivery to an address, and that address begins working again, your recipients won’t be able to get their emails. That’s where bounce handling comes in. Using webhooks, your email service provider can automatically notify you of new bounces. Then, you can use that information to present alerts within your application that there were issues delivering the email. That way, your users can correct the issue, and then reactivate delivery.

Postmark makes this even easier with Rebound, a simple JavaScript snippet that can be customized and included in your application to proactively alert users to delivery issues so they can correct the issue before it leads to bigger problems or support requests.

Notification Management

With transactional emails, unsubscribing is less of an issue than it is with bulk promotional emails, but providing recipients a way to unsubscribe or manage the volume or types of transactional emails they receive is still great to do.

One-click unsubscribes for each type of email you send can make things convenient if recipients don’t want to receive email for certain types of notifications. Alternatively, providing a preference center for transactional emails is a great way to put more control in recipients’ hands. However, if you go the preference center route, keep the options to a minimum. Keep in mind that a page with an abundance of checkboxes can be overwhelming or confusing. So while granular control is nice, too many options can be counter-productive.

One of the best ways to cut down on frequent notifications is to offer options such as instant, daily, or weekly summaries. That way, you give recipients significant control over notifications to enable them to drastically reduce the quantity without overwhelming them with fine-grained control for dozens of different types of notifications.

Regardless of the method, recognize that giving control over the frequency of notifications can go a long way to helping your customers while also helping to reduce your overall volume of emails. It’s a win-win for your customers and your email costs.

Tools And Monitoring

While other facets of application development have made impressive strides in tooling, best practices, and reliability, email is still somewhat of a black box. With applications, you can monitor uptime, page load times, application performance, and countless other aspects. Since email inboxes are private, however, there’s no way to accurately measure real delivery information. Open and click rates can serve as decent proxies, but they’re still only proxies. Fortunately, there are some great tools that can complement each other and, together, provide a relatively clear picture of your email delivery.

This is key to appreciating our seventh and final tip:

7. Use available tools to monitor and improve your delivery

Just like you’d monitor your application’s uptime or performance, it’s equally important to monitor email delivery. While no one tool can tell you everything, a combination fo great tools can make a huge difference in ensuring that your email delivery is reliable and help troubleshoot those times when it isn’t.

In order to have good coverage, you’ll want to use the following tools and pay close attention to patterns over time.

  1. Monitor trends in open and click rates for your emails. It’s only a proxy, but it’s good for relative historical numbers. For example, if you notice your open or click rates falling dramatically over time, that’s often an early warning sign that you may be encountering delivery issues. Since an email can’t be opened if it’s not delivered successfully, decreases in open rates can be caused by delivery issues.
  2. Gmail offers Postmaster Tools which can help you gauge IP and domain reputation to understand which email sources may be having delivery issues. This is a great forensic tool to turn to when you suspect that you may be having delivery issues. It only provides insight from Gmail, but that’s often a good-enough proxy for understanding how your reputation might look to the other providers as well.
  3. Use the MXToolBox Blacklist Check to see if your domain or IP address has landed on a blacklist. If you’re on a shared IP address, you probably want to set up a permanent and automatic monitor for that shared IP address so you’ll know sooner if you end up on a blacklist.
  4. Use a tool like GlockApps or 250ok to monitor inbox placement for your emails. It’s important to keep in mind that these tools rely on seed lists to test delivery. That is, since they can’t test delivery to real recipients’ inboxes, they have to use test addresses as a proxy. Like with most email delivery tools, this isn’t a perfect science, but in practice, it’s close enough to still be very useful at gauging delivery quality.

The more monitoring and alerting you have in place, the sooner you’ll know about problems and be able to correct them. Often, poor email delivery can be an invisible problem that only surfaces when support requests begin to show up, but by then, you could have already had 100’s or 1,000’s of emails end up in spam folders or not arrive at all. Just like you wouldn’t want your customers to be the ones alerting you to application downtime, you don’t want them to be the first to alert you to potential delivery issues either.

Bring It All Together

You have plenty of options when it comes to sending email. You can even set up a server and Mail Transfer Agent (MTA) and send for yourself if you’d like, but you’ll be taking on a lot of responsibility and overhead. Managing reputation is difficult. Establishing relationships with ISP’s is even harder.

Unless sending email is your core service, you’re often better off turning to an email service provider. Even then, it’s important to recognize that great delivery can’t be a foregone conclusion. Even though all ESP’s claim that they provide great delivery, that’s not always the case. In most cases, when you’re evaluating ESP’s, you’ll be much better off if you use the tools mentioned above to get quantifiable delivery information for yourself rather than taking their word for it. This is true whether you use a shared IP address or a dedicated IP address. Great delivery isn’t automatic, and you should always be gathering hard data on your delivery.

Regardless of how you handle email, make sure to treat it as an extension of your application’s user experience rather than an afterthought. Take time to write concise and helpful emails, and do everything possible to seamlessly integrate it into the user experience. Be judicious about firing off too many emails, and give your users the ability to tune email notifications for their needs.

Finally, monitor your transactional email delivery like you would any other service in your stack. If your users aren’t receiving critical emails like password resets and invoices, you’ll be losing goodwill, and your support costs will increase. Don’t let your email delivery fail quietly. Make sure that you’re notified quickly and loudly of any potential delivery issues long before it gets bad enough for your customers to email you.

Your application can’t work without email. While it’s not as easy to measure or monitor as most aspects of your application, it’s still a critical piece of functionality that deserves your full attention. Invest the time in making your email experience great, and you’ll unquestionably reap the rewards.

(ra, il)
Categories: Web Design

Introducing the Indexing API for job posting URLs

Google Webmaster Central Blog - Tue, 06/26/2018 - 04:53

Last June we launched a job search experience that has since connected tens of millions of job seekers around the world with relevant job opportunities from third party providers across the web. Timely indexing of new job content is critical because many jobs are filled relatively quickly. Removal of expired postings is important because nothing's worse than finding a great job only to discover it's no longer accepting applications.

Today we're releasing the Indexing API to address this problem. This API allows any site owner to directly notify Google when job posting pages are added or removed. This allows Google to schedule job postings for a fresh crawl, which can lead to higher quality user traffic and job applicant satisfaction. Currently, the Indexing API can only be used for job posting pages that include job posting structured data.

For websites with many short-lived pages like job postings, the Indexing API keeps job postings fresh in Search results because it allows updates to be pushed individually. This API can be integrated into your job posting flow, allowing high quality job postings to be searchable quickly after publication. In addition, you can check the last time Google received each kind of notification for a given URL.

Follow the Quickstart guide to see how the Indexing API works. If you have any questions, ask us in the Webmaster Help Forum. We look forward to hearing from you!

Posted by Zach Clifford, Software Engineer
Categories: Web Design

How To Get To Know Your Users

Smashing Magazine - Tue, 06/26/2018 - 04:50
How To Get To Know Your Users How To Get To Know Your Users Lyndon Cerejo 2018-06-26T13:50:41+02:00 2018-07-11T12:36:25+00:00

(This article is kindly sponsored by Adobe.) Users are at the heart of User-Centered Design (UCD), with designers focusing on actual users and their needs throughout the design process. The goal is to design interfaces and products that work for those users.

As much as we would like to think that our users are like us, they are not. Anyone involved in the creation of a product or an interactive experience, be it a site, system, or an app, is not a typical user — and that includes all the business stakeholders, designers, and developers. As advocates of users, we often have to remind ourselves and others of one of the primary UCD commandments:

“Know thy user, and YOU are not thy user.”

Arnie Lund

How well do we really know our users? Traditional UX research focuses on user needs, expectations, and goals, most of what is visible and observable, like the tip of an iceberg. That works well for designing user experiences that meet user needs, allowing them to complete tasks and achieve their goals. But if the design needs to persuade users to take some action, we need first to identify what motivates or inhibits them.

(Large preview)

This article will look at how going below the surface during user research helps us really understand what triggers our users, and how those deeper insights will help us design for persuasion.

Traditional UX Research

One of the first steps in design is identifying and researching who we are designing for so that we can focus on the groups of users that matter the most, and ensure that the design meets or beats their expectations.

User research is a great way for us to get a deep understanding of the people we are designing for. User interviews and contextual inquiries, focus groups, and surveys are commonly used research techniques to understand actual users, along with their needs, expectations, and goals. Sometimes, during user interviews, feelings or emotions may be mentioned in the conversation, but are not usually the central focus of the research.

User interviews that are based on task analysis usually focus on:

  • Who they are (profile);
  • What they do, when and where (context);
  • Why they do it (needs, goals, tasks) ;
  • How they do it (experience);
  • What they like or dislike (frustrations).

This research is valuable; it gives the entire team a shared understanding of actual users and builds empathy during the design process. One way to bring these users to life and make it easy for everyone to visualize the actual end users of the product or service is by creating user personas. A persona is a fictional, yet realistic description of a typical user from a key user group. There are many variations and formats, but the description usually includes personal, professional and technical information about the user, along with their knowledge, experience, goals, and frustrations related to the product or service. Give them a name, and put a face to that name, and you get to meet “Soccer Mom Sue” or “Function Over Form Fitz” (shown below).

Car buyer persona Fitz Grant, extrapolated from User Experience Takeaways From Online Car Shopping, based on persona development questions from usability.gov. (Large preview)

One way to keep these users top of mind is to put up posters of personas in the work area to remind us of who we are ultimately designing for, during all stages of the project –from defining requirements through design and development.

When prioritizing new features and enhancements, the deciding factor is no longer subjective, or based on personal preferences and likes of HiPPOs (Highest Paid Person’s Opinion), but focused on the user: “Will this new feature entice Fitz to use our site to configure a car?” or “Will this make it easier for Susan to compare our car models?”. Fitz and Susan also serve as constant reminders to designers who try to create “bleeding edge” designs (“Would Fitz find this interface intuitive?”), and to developers tempted to incorporate the latest technology (“Will Susan’s computer support this new technology?”). In time, Fitz and Susan become entrenched in the project, helping us build for them, not us, resulting in a solution that is useful, usable and meets their needs.

This works well to create products and interfaces that are functional, efficient and usable, allowing users to complete their tasks and achieve their goals.

Behavioral Research For Persuasive Design

Usability or task-oriented user research mainly focus on the cognitive level, how and why our users think, reason and act the way they do. We may sometime scratch the surface and get some feelings from these users, but we don’t usually don’t probe deep into their emotional experiences.

Behavioral research builds on traditional research approaches since persuasive design is aimed at changing behavior. Some examples of behavior changing actions in design include persuading users to try or buy a product or service (get a quote, schedule a test-drive), start or stop a behavior (start exercising, stop smoking), or convincing them to act on a belief or information (donate, vote).

If you are already using persuasive design techniques, quantitative data can identify which tactics are working for your users. But there is a wealth of information that you can get from qualitative methods like user interviews. One-on-one interviews allow researchers to dig below the cognitive level, and reach the emotional level to get to users’ feelings and beliefs. Advertisers and marketers have been doing this for years and you can see the results in the campaigns you are bombarded with daily.

During behavioral research, researchers focus on the users’ feelings, emotions, motivations, and barriers related to the action that is being triggered. For a common behavior target of getting the user to buy something, look for how users feel during the purchase journey. As an extreme example, while probing the purchase of “stigmatized products” (tobacco, alcohol, or personal enhancement products), users may have feelings of embarrassment, shame, over even guilt associated with the purchasing experience.

How do you get the user to discuss their emotions? Psychotherapists go through years of education and training before they master the art of unearthing mental, emotional, and behavioral issues to help their clients. Since our user interviews do not have the same life-changing impact or consequences, we do not require the same level of rigor. However, this is not something you can learn overnight, but you can learn more through courses like HFI’s PET Design. This article will not attempt to teach you how to do it, but introduce how these user interviews differ.

User interviews that focus on emotions, beliefs, and feelings focus on the intended action and:

  • How users feel (about the intended action);
  • What emotions are evoked in the process;
  • What are their emotional motivations to complete the intended action;
  • What are their barriers that may prevent them from taking the intended action;
  • Their values and beliefs related to the intended action;
  • Social or cultural factors that may impact the experience.

In a nutshell, the user interviews still start off by building rapport and learning about the user. After that, the interview focuses on the desired action by using a scenario and stimulus (e.g. buying a car), and a few closed-ended questions to get the participant on a topic (e.g. “When was the last time you bought a car?” and “Did you research your car online?”). Once the user is in the frame of mind of the scenario, the questions transition to open-ended questions that probe for emotions (“Can you describe that experience?” “What did that feel like?” “Why did you feel that way?”). The key is to guide the user from thinking to feeling, from facts and reason to emotions, and probing the subconscious, looking for motivators and barriers to them taking the desired action in the scenario. Interviewing techniques of active listening, not leading the user, and not being judgmental, all hold true.

Car Shopping Example

Let’s use an example of buying a car and see how we can really get to know the users. For the sake of simplicity, let’s focus on one persona (shown previously): Function Over Form Fitz, created based on the persona development questions from usability.gov. We’ll follow Fitz as he contemplates buying a car.

Fitz Grant is a 44-year old IT director who recently moved to Georgia to escape the cold winters of New Jersey. He, his homemaker wife, and two middle-school sons have always been a single-car household, but without access to reliable mass transit in his suburb, he is looking to buy a car for his daily 90-minute work commute.

The persona and scenario above are common for task analysis oriented user research, including their needs and frustrations. However, if you focus on probing the emotional aspect of buying a car, user interviews may uncover the following themes for barriers and motivations:

(Large preview)

Barriers (strongest to weakest, strength shown using a battery indicator):

  • Fear of failure
    • ‘I’m scared of making the wrong choice with such a high price tag and letting down my family’
  • Fear of being manipulated
    • ‘I detest the thought of having to deal with aggressive sales tactics or being pressured into unnecessary upgrades or warranties’
  • Fear of compromise
    • ‘I will be disappointed if I have to compromise on features I need because of dealer inventory or cost’
  • Fear of being judged
    • ‘I don’t like being thought of a cheapskate; I am just looking for value and a good deal.’

Motivators (strongest to weakest):

  • Safety
    • ‘I need to be safe and secure in my car, especially with all the distracted driving around me’
  • Control
    • ‘I would like to be able to customize options that are important to me; I don’t want the “technology package”, I only need the safety features and Bluetooth connectivity for my calls’
  • Value for Money
    • ‘For the price I will be paying, I should get some ongoing service benefits like free oil changes from the dealer.’
  • Excitement
    • ‘I get a high when I can combine incentives, rebates, and discounts to get a great deal!’
  • Knowledge
    • ‘I like to be prepared and research on my own, so I can be confident with my choices’
  • Self-Image
    • ‘I’m technology savvy to be able to do everything online, except the test drive!’

Armed with this additional information, we can orchestrate the experience to weaken the barriers and strengthen the motivators to get users like Fitz to take the intended action, like requesting a quote on a car currently in stock in the dealer lot. To weaken Fitz’s “Fear of Failure” barrier, a site could highlight that they offer a 24-hour test drive, which allows him to drive it home, see how it fits in his garage, and sleep over the decision.

Given that safety is such a strong motivator, the site could frame the conversation around safety through a combination of color, imagery, content, third-party award badges (IIHS Top Safety Pick+), user testimonials, and interactive simulations. Function Over Form Fitz may even change to Safety Minded Fitz.

This was a hypothetical example of how understanding your users’ barriers and motivations can help you preemptively address them through design, and make it easier for your user to take the intended action. It is important that we do this in an ethical manner, without resorting to pressure, or deceit.


Traditional user research helps us design meet users’ transactional and usability needs to make sure they can use a design. Research for persuasive design digs below the surface thinking level to the feeling level, and moves beyond the rational to the emotional level, to influence users to want to use the design. Getting to know your users at a deeper level will help you use psychology in design to get users to engage in behaviors they were already considering — with you instead of a competitor.

Further Reading

This article is part of the UX design series sponsored by Adobe. Adobe XD tool is made for a fast and fluid UX design process, as it lets you go from idea to prototype faster. Design, prototype and share — all in one app. You can check out more inspiring projects created with Adobe XD on Behance, and also sign up for the Adobe experience design newsletter to stay updated and informed on the latest trends and insights for UX/UI design.

(ms, ra, il)
Categories: Web Design

What Newsletters Should Designers And Developers Be Subscribing To?

Smashing Magazine - Mon, 06/25/2018 - 05:00
What Newsletters Should Designers And Developers Be Subscribing To? What Newsletters Should Designers And Developers Be Subscribing To? Ricky Onsman 2018-06-25T14:00:48+02:00 2018-07-11T12:36:25+00:00

We put out the call on Twitter and Facebook: “What email newsletters are you following these days?” The task of compiling your (many, many) responses has fallen to me.

I should disclose that I have a vested interest in that I currently edit a bi-weekly email newsletter for a conference organizer, UX Australia. In fact, over the years, I’ve edited dozens of email newsletters — some more successful than others.

Anyway, for the purpose of this article, we need to make a few things clear.

First, the newsletters that were most namechecked are included here in their own section: “The Favorites.” The eight that made this list comprise a formidable toolkit of newsletters for any web designer or front-end developer.

Second, I found that there are several types of newsletters which I tried to include representatively:

  • Aggregated links
  • Editorial
  • Company/product/service/event promotions
  • Tutorials
  • Broad industry news
  • Specific tech news
  • Combination of any of the above

Third, there is a lot of overlap in linked content from one newsletter to the next. That’s to be expected when everyone wants to break news and aggregate link-worthy articles.

Fourth, I focused on great newsletter content. It could be presented as sophisticated HTML with videos and infographics, or it could be no nonsense plain text with minimal descriptions, as long as the content — including how reliable any links are — is good.

Getting workflow just right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up “this-is-how-I-work”-sessions — with smart cookies sharing what works well for them. A part of the Smashing Membership, of course.

Explore features →

Lastly, I tried to keep the focus to only actual newsletters that arrive in your email inbox, and that focus on what web designers and developers do. That’s not to deny the value of newsletters that give designers and devs a broader context for their work; I just had to draw the line somewhere.

I also excluded newsletters that claim to be bi-weekly but have produced just four issues in the last nine months (even if those four issues were very good) and “occasional updates.”

So, let’s see what we have. Buckle up.

The Favorites Smashing Magazine

Well, of course a lot of people mentioned our own newsletter, and we’re proud and grateful for our readers’ loyalty. I’ll also point out that ours is a rare example of all of the types of newsletter mentioned above, and one with a strong, clear voice. Just sayin’. Twice a month.

CSS Layout News

A high-quality weekly collection of tutorials, news and information on all things CSS Layout, edited by Rachel Andrew, editor-in-chief of Smashing Magazine, web developer, writer, speaker, author of The New CSS Layout, co-founder of Perch CMS. Weekly.


It used to be primarily about CSS, but over the years CSS-Tricks has become about all things web design and development, and very popular it is, too. The newsletter is a great way to keep up, as Chris Coyier and his team regularly pull out new insights and clever styling techniques. Weekly.

CSS Weekly

Front-end dev Zoran Jambor’s hand-picked selection of CSS new, views, tips and techniques from a very wide range of sources, on everything from Unicode patterns to accessibility to security and query feature management. Weekly.

Layout Land

Mozilla Designer and Developer Advocate Jen Simmons knows a lot about CSS Grid and, lucky for us, she’s happy to share. The chief purpose of the newsletter is to let subscribers know about new videos available on the YouTube channel of the same name, but the editorial comments are great value in themselves. Monthly.

Web Development Reading List

Anselm Hannemann, front-end developer and founder of Colloq, compiles a mix of dev & design news, commentary, techniques, tools and broader work/life matters every week. There’s usually a short but pithy editorial, and then up to a dozen links with a paragraph about why it might be interesting to you. He also contributes monthly WDRL issues on Smashing Magazine. Highly readable.

UX Design Weekly

A hand-picked list of the best user experience design links, curated by Kenny Chen. A clearly defined balance of articles, tools & resources, media, portfolios and news — all focused on UX design. Has the twin virtues of feeling hand-picked and providing a great range of topics. Weekly.

JavaScript Weekly

From the Cooperpress family of publications, this is one of their strongest newsletters, a well chosen round-up of JS news and articles. The first set of article links get a brief and relevant paragraph description, while the rest are divided into Jobs, Tutorials, Opinions, Videos, Code and Tools with one line descriptions. Comprehensive and readable. Weekly.

Accessibility A11yWeekly

David A. Kennedy wrangles WordPress themes for Automattic, is an accessibility evangelist, and compiles this very useful dose of links to web accessibility news, resources, tools and tutorials. Weekly.


WebAIM has become a major and reliable resource for guidance and discussion relating to web accessibility. The newsletter includes featured articles, technical tips, resources, and questions from WebAIM's discussion forum. The featured articles are both from WebAIM staff and key web accessibility figures around the world. Monthly.

Animation UI Animation Newsletter

Keep up to date on the best web animation, motion design, and UX resources on the web. Subscribe for a weekly collection of curated tutorials and articles — plus advice on how to make web animation work for you. Written and curated by designer, interface animation consultant, speaker and author Val Head. Weekly.

Animation at Work

A hand-picked selection of articles, videos, book reviews, and other goodies pertaining to the wonderful worlds of web animation and motion design (which until last month was called “Web Animation Weekly”). It’s Rachel Nabors’ project, but the hands doing the picking belong to a range of guest editors who can be nominated by readers. Monthly.

Email Really Good Emails

RGE aims to be “the best showcase of email design and resources on the web”. A 3,300 strong gallery of examples, excellent articles, and links to a lot of resources suggest they really might be “the epicenter of the email earthquake, but in a good and happy-shakey kind of way.” You’d expect this lot to have a good newsletter, and they do. Monthly.


Email design and strategy studio Action Rocket’s very useful collection of links to articles on design, HTML and creative concepts for email drawn from their own work and other pros in the field. Weekly.

Emerging Technology Dev Diner

Edited by Patrick Catanzariti, this is very well organized and aims to keep web developers inspired and in the know, with links to the latest in VR, AR, wearables, the Internet of Things, AI, robotics and all sorts of other new and emerging tech. Weekly.

Front-End Friday Front-end

ZenDev founder, front-end consultant and trainer Kevin Ball covers CSS-focused developments, industry news, tutorials and dev resources. Each newsletter has an intro from Kball followed by three sections: CSS, JavaScript, and Other Awesomeness (each with five items with handcrafted descriptions). Weekly.

Friday Front-End

This is a nice, simple format that works very well. CSS developer Scott Vandehey tweets a daily link to an interesting front-end article. At the end of the working week, these links are packed with a short description into an email. The selection is a thoughtful mix, so it feels less like a bunch of random links and more like a summary of key stories. Weekly.

Frontend Focus

Just one of a suite of targeted publications by Peter Cooper, software developer, podcaster and Publisher-in-Chief of tech niche newsletter company Cooperpress. This one focuses on HTML, CSS, WebGL, Canvas and front end-related news updates, articles and tutorials. Others cover JavaScript, Ruby, databases, mobile and more. Weekly.

Web Design Weekly

A newsletter and blog by Jake Bresnehan, that will help you to stay on top of all things web design and front end development. Links to tips & tricks, in depth articles, interviews, tools & resources, jobs and the occasional quirky story. Weekly.

Web Tools Weekly

A front-end development and web design newsletter with a focus on tools, curated by Louis Lazaris. Each issue features a brief tip or tutorial, followed by a round-up of apps, scripts, plugins, and other resources to help front-end developers solve problems and be more productive. Weekly.

Front End Front

A crowd curated feed of front-end related articles, by brothers Stelian and Sergiu Firez. Site visitors vote up articles linked to from the feed. The newsletter is a list of the top 10 voted most recent articles. Topics are what you’d expect: CSS, JavaScript, HTML, images, performance — mostly technical, some bigger picture. Definitely some links not seen elsewhere. Weekly.

JavaScript ES.next News

The latest in JavaScript and cross-platform tools. Get five ECMAScript.next links delivered to your inbox, every week. Not afraid to mix highly technical code-focused pieces with bigger picture industry stories. Curated by Dr. Axel Rauschmayer and Johannes Weber. Weekly.

Typography Adventures in Typography

A love letter to the written word, by Robin Rendle. Topics include “calligraphy, lettering, display type, micro type, books about fonts, type specimens, neon lights, posters, morse code, stamps, literature, web design, and books about seeds”. The format is that of a proper letter written by Robin to you which is rather lovely when it’s from someone so passionate. Weekly.

Fresh Fonts

Curated by Noemi Stauffer and featuring the latest free and open-source fonts, the most solid new typefaces by indie foundries and discount codes, this is a concise and well-compiled exploration of (mostly) newly released fonts and how you can get them. Twice a month.

Coffee Table Typography

A love for words, letters, language, and coffee. This digest of resources, articles and knowledge of typography — in design, on the web, or books — is curated by Ricardo Magalhães. More than just a set of links, Ricardo digs into the articles he’s linking to, whether it’s a new font release or a deeper look into the role of typography on the web. Once or twice a month.

User Experience UX Collective

Founded by Fabricio Teixeira and Caio Braga, this has become a bit of a UX behemoth, publishing a high volume of original articles and aggregated material on a range of UX and design related topics. Impressive output in terms of both quantity and quality. The newsletter reflects that. Weekly.


Designer and developer Ste Grainer founded this “love letter to user experience design, front-end development, building products, and making the world a better place.” His newsletter collects links to the latest UX articles and resources, as well reminders of older, good resource links. Monthly.

User Interface Engineering

Jared Spool has a hard-won global reputation as a consultant, trainer, speaker and writer on usability, UI and UX. It’s not surprising, then, that he realizes the great value of older content. The UIE newsletter is as likely to link to an article from five years ago as yesterday, if it’s still relevant — and, with user-centric topics, that’s often the case. Smart and useful. Weekly.

UX Booth

By and for the user experience community, founded by Matthew Kammerer, David Leggett and Andrew Maier, for a readership mostly of beginning-to-intermediate user experience and interaction designers. The newsletter highlights one new inhouse article a week, plus links to three or four external UX articles and the occasional (often remote) job listing. Concise, focused, digestible and reliable. Weekly.


Founded by Pabini Gabriel-Petit in 2005, this provides insights and inspiration to experienced professionals working in every aspect of UX, as well as beginners. The newsletter focuses tightly on new content on the website, but when you publish up to six articles, interviews, panel discussions, and technical pieces a week, that makes for a good newsletter. Weekly.

Web Design An Event Apart Digest

In 1997, Jeffrey Zeldman and Brian M Platz started a mailing list called A List Apart. It evolved into one of the world’s leading magazine sites “for people who make websites” and spawned the An Event Apart conference series and book publisher A Book Apart. The Digest wraps all of this activity up and adds links to other interesting articles, videos and resources. Monthly.

Web Designer News

Built “to provide web designers and developers with a single location to discover the latest and most significant stories on the Web.” Content includes “quality news, fresh tools and apps, case studies, code demos, inspiration posts, videos and more”. It is extremely comprehensive, and posts links every couple of hours. There is a user voting system, and the most shared items are featured in the newsletter. Daily.


In 10 years, WDD has grown from a blog into a genuine online magazine for web designers — and developers, content authors, specialist and generalists. Drawing on a stable of inhouse writers and external contributors, including some high-profile industry type. The newsletter highlights 10 or so items ranging across news, product info, design, code and WDD’s monthly round-up. Weekly.


Since 2012, Sidebar has been collecting links about UI design, typography, CSS, user research, and all other facets of design. It's now a trusted resource for thousands of designers across the world to stay on top of the latest news, trends, and resources. Each newsletter can include from three to a dozen links. Daily.


The website was launched in 2007 as an inspirational hub for web designers. As web design trends became more advanced and more tools became available it evolved into a web design magazine. Articles are usually published daily, which makes for a satisfyingly full email newsletter. Weekly.

Responsive Design Weekly

Web developer Justin Avery’s side project ResponsiveDesign.is has become a go-to site dedicated to providing beginners and advanced users tips, tricks, inspiration and resources for responsive design projects. The newsletter is equally popular and a very convenient way to keep with responsive design news. Weekly.

The Web Designer Newsletter

A heady mix of image-heavy product placement, sponsored items, free resources and links to articles, this newsletter regularly comes up with links to articles I don’t see elsewhere. I don’t know who is behind it (the very brief website just says “curated by designers for designers”), but it’s hard to ignore. Weekly.

Design Systems

A curated publication full of interesting, relevant links. I would call this an example of an educated, focused and informed newsletter of links to web resources that genuinely advance thinking on design systems. Providing just an article title and link makes it feel robotic and impersonal, but maybe that’s an approach you’ll like. Weekly (more or less).

Web Field Manual

A curated list of resources focused on documenting knowledge for designing experiences and interfaces on the web. It is an ever-expanding collection of knowledge and inspiration for web designers, by web designers — namely Jon Yablonski, Garrett Wieronski, and Geoff Tice. The Dispatch keeps you up to date. Weekly.

Web Design Update

This is an oldie but a goodie, a plain text email digest disseminating news and information about web design and development with an emphasis on user experience, accessibility, and web standards. Around since 2002 (with a name change), it’s linked to the university-based Web Design Reference archive, and it is still edited by Laura Carlson. Weekly.

Web & Tech Versioning

SitePoint is a publisher of books, articles, videos and community forums on all aspects of web design and development. It produces several weekly newsletters, but this is the cream of the crop, curated by Adam Roberts. Short, sharp, timely, useful and often linking to items of industry interest that others miss. Daily.

Hacking UI

David Tintner and Sagi Shrieber’s favorite articles about design, front-end development, technology, startups, productivity and the occasional inspirational life lesson. They pack in a lot of links, which might be why they list only the article title linked to the source. With such a broad remit, there is a lot of overlap with other newsletters, but it’s all in one package. Weekly.

Hacker Newsletter

This side project of MailChimp’s Kale Davis links to stories on tech startups, programming developments and other stories featured on Hacker News. That means this is another list of links, with not much to say where you should direct your attention. Still, those links are pretty good. Weekly.

Pony Foo Weekly

A newsletter about the open web, highlighting the most important news about the web every Thursday. Founded by developer, author and speaker Nicolás Bevacqua, and now with a team of contributing authors, it also has lots of links to current articles about the web and tech. Weekly.

Offscreen Dispatch

Offscreen is a print magazine that focuses on people working on the web and with technology in general, edited and published by Kai Brach, a former web designer. Dispatch is Kai’s email newsletter offshoot in which he highlights products, news, events and insights for the discerning web worker. Classy and well selected. Weekly.

The History of the Web

Jay Hoffmann had the bright idea of collecting the moments and stories that make up web history to create an online timeline. Out of that came an email newsletter pointing to one or more of these stories. Highly readable, very informative, and often surprising. Weekly.

WordPress MasterWP Weekly

Alex and Ben produce this newsletter for WordPress professionals, with editorial and links to apps, tools and resources. It’s not all about WordPress, though — it’s what WordPress pros need to know, so there’s general small business, lifestyle and industry articles as well as WP-specific items, including technical pieces. Weekly.


Curated by Cristian Antohe and Bianca Petroiu, this one carries more links to WordPress theme and plugin releases and reviews, tutorials, podcasts and videos — as well as more business, freelance and industry news and articles of interest to WordPress professionals and enthusiastic amateurs. Weekly.


While I was compiling this article, I realized I have my own go-to set of people whose email newsletters I really look forward to. It’s not because they’re necessarily “the best” — it’s more that their choices of content, tone and focus strike a strong chord with me.

I’m sure you have your own, but here — apart from those who come up in the preceding sections — are the individuals whose newsletters I look forward to landing in my inbox.

And that completes our latest round-up of email newsletters for web designers and developers.

Did I say “completes”? Of course, this list is not complete! For one thing, it probably doesn’t have your favorites. Add them — preferably with a working link — in the comments below.

(vf, ra, il)
Categories: Web Design

New URL inspection tool & more in Search Console

Google Webmaster Central Blog - Mon, 06/25/2018 - 04:39

A few months ago, we introduced the new Search Console. Here are some updates on how it's progressing.

Welcome "URL inspection" tool

One of our most common user requests in Search Console is for more details on how Google Search sees a specific URL. We listened, and today we've started launching a new tool, “URL inspection,” to provide these details so Search becomes more transparent. The URL Inspection tool provides detailed crawl, index, and serving information about your pages, directly from the Google index.

Enter a URL that you own to learn the last crawl date and status, any crawling or indexing errors, and the canonical URL for that page. If the page was successfully indexed, you can see information and status about any enhancements we found on the page, such as linked AMP version or rich results like Recipes and Jobs.

URL is indexed with valid AMP enhancement

If a page isn't indexed, you can learn why. The new report includes information about noindex robots meta tags and Google's canonical URL for the page.

URL is not indexed due to ‘noindex’ meta tag in the HTML

A single click can take you to the issue report showing all other pages affected by the same issue to help you track down and fix common bugs.

We hope that the URL Inspection tool will help you debug issues with new or existing pages in the Google Index. We began rolling it out today; it will become available to all users in the coming weeks.

More exciting updates

In addition to the launch of URL inspection, we have a few more features and reports we recently launched to the new Search Console:

Thank you for your feedback

We are constantly reading your feedback, conducting surveys, and monitoring usage statistics of the new Search Console. We are happy to see so many of you using the new issue validation flow in Index Coverage and the AMP report. We notice that issues tend to get fixed quicker when you use these tools. We also see that you appreciate the updates on the validation process that we provide by email or on the validation details page.

We want to thank everyone who provided feedback: it has helped us improve our flows and fix bugs on our side.

More to come

The new Search Console is still beta, but it's adding features and reports every month. Please keep sharing your feedback through the various channels and let us know how we're doing.

Posted by Roman Kecher and Sion Schori - Search Console engineers
Categories: Web Design

Introducing the new Search Console

Google Webmaster Central Blog - Mon, 06/25/2018 - 04:27
A few months ago we released a beta version of a new Search Console experience to a limited number of users. We are now starting to release this beta version to all users of Search Console, so that everyone can explore this simplified process of optimizing a website's presence on Google Search. The functionality will include Search performance, Index Coverage, AMP status, and Job posting reports. We will send a message once your site is ready in the new Search Console.
We started by adding some of the most popular functionality in the new Search Console (which can now be used in your day-to-day flow of addressing these topics). We are not done yet, so over the course of the year the new Search Console (beta) will continue to add functionality from the classic Search Console. Until the new Search Console is complete, both versions will live side-by-side and will be easily interconnected via links in the navigation bar, so you can use both.
The new Search Console was rebuilt from the ground up by surfacing the most actionable insights and creating an interaction model which guides you through the process of fixing any pending issues. We’ve also added ability to share reports within your own organization in order to simplify internal collaboration.
Search Performance: with 16 months of data!

If you've been a fan of Search Analytics, you'll love the new Search Performance report. Over the years, users have been consistent in asking us for more data in Search Analytics. With the new report, you'll have 16 months of data, to make analyzing longer-term trends easier and enable year-over-year comparisons. In the near future, this data will also be available via the Search Console API.
Index Coverage: a comprehensive view on Google's indexing

The updated Index Coverage report gives you insight into the indexing of URLs from your website. It shows correctly indexed URLs, warnings about potential issues, and reasons why Google isn't indexing some URLs. The report is built on our new Issue tracking functionality that alerts you when new issues are detected and helps you monitor their fix.
So how does that work?
  1. When you drill down into a specific issue you will see a sample of URLs from your site. Clicking on error URLs brings up the page details with links to diagnostic-tools that help you understand what is the source of the problem.
  2. Fixing Search issues often involves multiple teams within a company. Giving the right people access to information about the current status, or about issues that have come up there, is critical to improving an implementation quickly. Now, within most reports in the new Search Console, you can do that with the share button on top of the report which will create a shareable link to the report. Once things are resolved, you can disable sharing just as easily.
  3. The new Search Console can also help you confirm that you've resolved an issue, and help us to update our index accordingly. To do this, select a flagged issue, and click validate fix. Google will then crawl and reprocess the affected URLs with a higher priority, helping your site to get back on track faster than ever.
  4. The Index Coverage report works best for sites that submit sitemap files. Sitemap files are a great way to let search engines know about new and updated URLs. Once you've submitted a sitemap file, you can now use the sitemap filter over the Index Coverage data, so that you're able to focus on an exact list of URLs.
Search Enhancements: improve your AMP and Job Postings pagesThe new Search Console is also aimed at helping you implement Search Enhancements such as AMP and Job Postings (more to come). These reports provide details into the specific errors and warnings that Google identified for these topics. In addition to the functionally described in the index coverage report, we augmented the reports with two extra features:
  • The first feature is aimed at providing faster feedback in the process of fixing an issue. This is achieved by running several instantaneous tests once you click the validate fix button. If your pages don’t pass this test we provide you with an immediate notification, otherwise we go ahead and reprocess the rest of the affected pages.
  • The second new feature is aimed at providing positive feedback during the fix process by expanding the validation log with a list of URLs that were identified as fixed (in addition to URLs that failed the validation or might still be pending).
Similar to the AMP report, the new Search Console provides a Job postings report. If you have jobs listings on your website, you may be eligible to have those shown directly through Google for Jobs (currently only available in certain locations).
Feedback welcomeWe couldn’t have gotten so far without the ongoing feedback from our diligent trusted testers (we plan to share more on how their feedback helped us dramatically improve Search Console). However, your continued feedback is critical for us: if there's something you find confusing or wrong, or if there's something you really like, please let us know through the feedback feature in the sidebar. Also note that the mobile experience in the new Search Console is still a work in progress.
We want to end this blog sharing an encouraging response we got from a user who has been testing the new Search Console recently:

"The UX of new Search Console is clean and well laid out, everything is where we expect it to be. I can even kick-off validation of my fixes and get email notifications with the result. It’s been a massive help in fixing up some pesky AMP errors and warnings that were affecting pages on our site. On top of all this, the Search Analytics report now extends to 16 months of data which is a total game changer for us" - Noah Szubski, Chief Product Officer, DailyMail.com
Are there any other tools that would make your life as a webmaster easier? Let us know in the comments here, and feel free to jump into our webmaster help forums to discuss your ideas with others!

Posted by John Mueller, Ofir Roval and Hillel Maoz
Categories: Web Design

Why Altruism Is The Ace To Get Your Dream Design Job

Smashing Magazine - Fri, 06/22/2018 - 05:30
Why Altruism Is The Ace To Get Your Dream Design Job Why Altruism Is The Ace To Get Your Dream Design Job Andree Huk 2018-06-22T14:30:38+02:00 2018-07-11T12:36:25+00:00

Hunting for a design job can be daunting but it does not need to be. In fact, the most telling predictor of how user-focused a designer you are, is how you see the company you apply to.

In this article, I’d like to outlines uncommon tactics and crucial aspects that can help any designer. In order to get your dream job, I’ll discuss in detail on how to plan and execute your outreach to recruiters or hiring managers. Writing a stellar CV by analyzing job descriptions or calculating how many applications you have to send are just some of the aces in your pocket.

The Biggest Issue In Job Hunting

The cover letter below is the worst application we have received in years. It lacked everything you may be looking for in an application. Apart from neither an introduction nor a name, it tells the story about “me, me, me” at its best, unfortunately. And unsurprisingly, the “portfolio” did not match either.

The worst ever cover letter we have received. Can you see why? (Large preview)

I did hunt for a job myself in the past, of course. But since running blended.io for a few years now, I can tell that the attitude of “me, me, me” does not fly well. It is the biggest issue that prevents people from getting their dream job.

Can you see why? Imagine that you hire a painter to paint your living room. The painter comes by, does not listen to you and then paints the room in a color that he/she likes — not what you want. You hired a painter to paint the room in your favorite color, right?

Getting workflow just right ain’t an easy task. So are proper estimates. Or alignment among different departments. That’s why we’ve set up “this-is-how-I-work”-sessions — with smart cookies sharing what works well for them. A part of the Smashing Membership, of course.

Explore features →

Fundamentally, designers like to see themselves as the voice of the user. Designers solve user problems, don’t they?

Interestingly, that user-driven attitude turns into plain selfishness when designers start to look for a new job. Many want to solve their need only. Obviously, the company wants to hire someone to solve a problem they have internally. Henceforth, any designer who does not realize that the company one applies to is actually the user in question, should not be in (user-centered) design to start with.

Their needs and your desire usually make for a big gap. (Large preview)

When you look for a job, you may ask yourself:

  • Can I do interesting work?
  • Will I get along well with the coworkers?
  • Do they pay well?

Companies, on the other hand, ask themselves:

  • How much experience does s/he have?
  • Will s/he fit well?
  • Do we get extra value for what we have to pay?

See the problem? There is a clear gap. You may now say that the company is mainly focused on their problem, that is, matching a candidate with their internal need. Indeed, they are. Does a user for whom you are designing care about who designed the product? No.

By now you should be able to see why “Me, Me, Me” is such a big problem. An application that screams “Me, Me, Me” plainly shows the company that the applicant’s sole purpose is to look after her- or himself. For context, would you buy stuff you really don’t need? No. Alas, why shall the company hire someone they don’t need? In terms of UX or design in general, the most telling predictor of how user-focused you are is how you see the company you apply to.

When I started to write this article, I spoke with a friend of mine. Let’s call him Mark. Mark told me that he was on the lookout for a new job and that the process was going OK. I urged him to review his approach and cover letter regarding “Me, Me, Me.” The following day he changed the email and cover letter he had wanted to send and turned “Me, Me, Me” into “How can I help you achieve your goals?” Guess what? He was invited for an interview.

Of course, I cannot fully tell whether it was the change in approach or his strong portfolio, or something else. It may well have been the case. Though, I find it interesting that he was invited the next day.

Actual Applications, Real Insight

In the past, we’ve recruited designers and engineers for our innovation agency. After some time, you can see patterns emerging. To notice the subtleties of these patterns, we will review job applications that we have received.

The following are actual applications for a position as Software Engineer (NodeJS). These below are not handpicked but rather a somewhat random selection.

Applications for an engineering position. The amount of “I” is staggering and not a good sign of a great cover letter. (Large preview)

Let’s review the main points we notice from these applications above:

  • Around 80% of cover letters start with “Dear recruiter” or similar, not addressing a specific person. Why does this matter? We are not 100 people at our company. The applicant does not show interest as she did not bother to look up the person who could be in charge.
  • The majority of applicants start many of their sentences with something like “I can, I want, I will.” Why does this matter? When you design a product, who do you design for? Exactly, the user. As we pointed out above, the user is the company to which one applies.

As this is an article for designers, we will also review applications for a design role. After we received an application for an Interaction Designer, we sent out additional questions to the applicants to better understand their background.

Sending out additional questions to an applicant was step one when we received an application. (Large preview)

The form we sent out included a question about their past work and experience. As it turned out, many applicants sent very similar answers to the ones you see on the image above. The most interesting: On the question what the applicant focuses on most, almost everyone responded with “Visual design.” Keep in mind that the role advertised was for an Interaction Designer vacancy. I cannot tell whether it was clear to applicants what interaction design implies, but why would they apply if they don’t understand the role’s responsibilities?

Remember what I explained above? An applicant focused on the user (that is, the company in question) should realize that such replies do not match the requirements (the need) and will not make the cut. The best indication of the actual problem company X has is the job itself. Unless you know someone at that company, the best starting point are the nuances of job descriptions.

In the next section, we will review how to read job descriptions and how to best prepare your CV, resume or portfolio. Further, to show you hands-on examples of what kind of cover letters we really liked, you will find two examples at the end of this article.

How To Read Job Descriptions

I am not a person who ever worked in the recruitment industry per se, nor do I recruit 8 hours per day. I will cover the most important aspects seen from my perspective.

A Cover Letter — Again?

Imagine a funnel that has five steps and only allows items with a certain property to pass each step. The cover letter is part of the first step. It segments those out who are not willing to take the effort and tell why they are interested. For context, Imagine a pay-to-play game with a certain economic benefit for the winner. You would not pay up for a game if you would not think that you could win, right? Same with the cover letter. The effort you put in is the upfront payment.

We, as the hiring company, look for a match to the role we want to fill. Sounds obvious I would say. Nonetheless, we receive applications that just do not match up. The reason is twofold: First and foremost, the experience, value, and skills often don’t match. Second, if an applicant does not send a proper introduction, resume or portfolio, how can we tell whether experience and skill set match?

Consider the addressee of your application or portfolio. (Icon credit Freepik) (Large preview) Who Is The Addressee?

We talked about that the company you apply to equals the user you would design for, but there is a more nuanced perspective to this. If you consider a typical company, how many people would look at your application and in what order?

  • A recruiter or HR person;
  • The domain expert, e.g. Senior Designer or Design Director;
  • The CEO or department head;
  • Others.

To whom are you about to send the initial application? Very often that person is a recruiter. What is their expertise, UX or recruitment? Exactly. Be aware who will see your portfolio first and consider what the receivers expertise is. In our case, we don’t have a full-time recruiter on staff. Therefore, an application is likely to arrive in my inbox.

A report by The Ladders indicates that recruiters spend about 4-5 minutes per resume (self-reported data). The actual study though finds that recruiters spend 6 seconds reviewing an individual resume! I assume the reason is to some extent that they just get so many resumes. Why do they get so many? Well, I think that this, in turn, is due to fact that people apply at way too many jobs that do not match. Mind that the study does not indicate in what industry the recruiters work. Interesting to note is that the study also suggests that standardly formatted resumes reduce cognitive load and are easier to read (hard to tell whether that has equal weight in the design industry).

A recruiter, in most cases, cannot tell whether your portfolio work is stellar or not, nor do they aspire to. Recruiters manage the process from start to finish. They start with an apparently short review of your resume or CV. They look for matches between role and resume: the better your resume matches the job description, the higher your chances.

You have two options: Pick jobs that match your resume, or prepare the resume so that it matches the job description. The former is certainly less work and yields the best results in my experience.

Quick Portfolio How-To

But what about your portfolio? It’s pretty much the same thing. Everyone unconsciously understands that. Why would you send an application for a visual design role when you are a user researcher? Still, some people do for reasons I cannot understand. Aren’t we in the business of solving user problems? Who are the users and what are their problems?

Moreover, a recruiter is a human being. What does a human being without domain expertise perceive when they review portfolios? Visuals, of course (even if unconsciously). Everyone can tell whether some work or a portfolio looks properly done or not. Therefore, make sure to include great visuals even if you apply to non-visual design roles, for example. If you are not great with visuals, browse around and look for portfolios you like and then mimic what you see.

On the other hand, the domain expert might see your portfolio first. In such a case, get right to the point. Neat visuals are always a good idea because they also tell the viewer that you know how to structure the content for communication purposes. Don’t get me wrong, content matters most. You need to be able to get the right message across that is catered to the job in question.

If you are about to re-do your portfolio or just want to improve it, look for your dream job and its description for clues. Ideally, gather a bunch of them and then compare. Create a checklist of important needs and requirements across jobs you’ve found. Based on the checklist, start to structure content to build up your portfolio as best possible. Then take a step back and see how you can design the content to that it tells the story. That process can be the sure-fire way to get your application past recruiters and into the hands of the decision maker.

The Market Drives Everything

I once read an article from a founder who had just raised funding. He wrote about his experience interacting with CVs and wrote:

The magic hand of markets. (Large preview)

Why is that? As far as I know, no fundamental law of nature exists that a product has to be great (leaving aside the subjective meaning of 'great').

The reason is that a customer uses a product not because it’s “great” but because it solves their problem (similarly with a new hire). I would even argue that the market drives (almost) everything. For example, a funded company can hire more people faster.

Why does it matter you wonder? I am not suggesting to have a less than stellar design portfolio nor bad code. You don’t know with whom you are in competition with for a role at company X. So, I urge you to consider the dynamics and the strength of the market or opportunity (the company pursues) for which you indirectly sign up for (in case you get the job).

When to join a company: the sweet spot is when the market is not yet hot. (Large preview)

First, pick companies that solve real user problems. Remember MySpace and Twitter in the early days? Their web and mobile experience were way less than stellar but users did not care. On the flip side, companies that do not solve real problems will fade and vanish. Along the slow decline, raising that next round of funding will be tougher, team morale will turn sour, employees can feel that product stickiness will just not happen.

Second, use market dynamics to your advantage. Consider applying at a company that is pursuing an opportunity in new markets (for in-house positions generally). In regard to a design studio or agency, this would imply that the studio itself has positioned itself as a firm that helps companies in new markets. Remember that to a huge extent the market drives the success of that studio, not because they have such a great process.

A company without an in-house designer or design team might be on the lookup for such a person. Look for the sweet spot. That is, a market that is in its infancy, e.g. blockchain, VR, unmanned travel. Of course though, those companies are harder to spot and riskier than established ones.

Markets that are not yet mainstream are not sexy to the early-to-late majority crowd. The result is such that vacancies at companies in unknown markets do not have as much competition (around 1896 in the chart).

The red line shows the adoption of cars. The blue line levels out at 3 car companies (US data only, courtesy of Horace Dediu at Smashing Conference Barcelona 2017). (Large preview)

Third, a result of the above is that older markets consist of only a handful of established companies (around 1935 in the chart). These are the ones that were and are strong enough to fight and win the battle of competition. These companies are established, hence, competition for jobs is fierce.

One last thing I’d like to point out concerning the market: Go where the action is (i.e. “Go where the puck will be, not where it is right now”). If you are into Fintech, go to Frankfurt, London or NYC. Into movies? Go to Los Angeles or Munich. And most importantly, go where the clients are.

Some may argue that with chat and video conferencing tools, does it matter whether the competition is in Berlin or atop a mountain in Switzerland? I would argue that it does. As a local, serendipity will also come to your advantage (tough to mimic that as a remote freelancer). Being able to go out and network offline (in hubs like Berlin), gives you a competitive edge over the myriad of freelancers in Bali.

“Hello, I Am Awesome”

Know where you stand and know what matters where you want to go. This is crucial and saves you a look of effort, hassle, and pain.

Skills of interns compared with those of Chief Design Officers. (Large preview)

For example, for a young designer who is about to start her career, hard skills matter. The higher she advances in her career, the importance of hard skills will decrease and that of soft skills will increase, e.g. taking things less personal, leading teams, being able to resolve conflicts, giving sincere feedback and productive criticism, and the like.

How Do You Know Where You Stand? Ask!

Last weekend, a colleague of mine whom I had met six months ago for the first time, asked me to touch base with him. He wanted to talk about his portfolio and how it could improve. He wanted to know where he stands.

Ask more senior people in your current company for feedback. Reach out to colleagues of colleagues or friends that are more senior and in the same industry as you. And then, do not ask for hard skills only — also inquire about your soft skills. Apart from getting feedback for you to act on, the kind of inquiry also shows that you are humble and open for feedback.

Ask feedback about what you do not so well. Be persistent. People have learned from experience that their counterparts don’t like to receive negative feedback. So, you have to push to elicit this kind.

The earlier you are aware of such behavioral pitfalls, the better it will be for you. I have learned that the hard way myself. Not that I was not asking about soft skills but rather that when I made mistake here and there, people hardly ever told me. So when I asked people, they told me (if they had experienced anything, of course).

I Am Awesome. Of Course.

Be aware that practically everyone says the same about themselves: I am awesome. Although cover letters are not 100% the same, of course, they very much rhyme in many aspects. The majority of people think that they do great work, they want to learn, grow and join a great company.

The typical application HR receives: I am awesome! Of course you are. But so are all others. Now what? (Large preview) So, How Do You Distinguish Yourself?

Do not tell, but show! And don’t talk about what you want but how you could help.

In terms of UX or design in general, recruiters expect a portfolio. But then again, every designer does have a “great” portfolio of some sort. Now what? This is how you can distinguish yourself further:

  • Organize or speak
    This extends your network and makes your name known across borders.
  • Write
    Like what I'm doing here.
  • Volunteer
    At a conference, for example.
  • Go the extra mile
    See the points above; go to meetups after work, ask the hard questions, ask peers how you can improve, follow up after rejections (this is a hard one, I know, but how could you get feedback otherwise?)
  • Network frequently
    Too often, this is underestimated.
Don’t expect any other applicant to be less awesome than you are. (Large preview)

These activities show — and this is most important for a recruiter/company — that you are interested in a topic above your day job (that pays the bills). This is hardly new, but why does this work?

Companies want to get a good deal, and receive extra value for free (everyone wants to have something for free, right). What is a good deal? A good deal is either very cheap in economic terms or adds value on top (that comes for free). Companies do perceive the aforementioned activities as added value. For example, a colleague of mine runs a design company in Munich. One of his employees is part of a jury of a well-known design prize in Germany. The company perceives this as added value (e.g. they can use it for ads, and this promotes their business indirectly).

Networking: How I Received 35 Introductions

Networking is important, everybody understands that. And this is where it ends. You may also understand that you have to give first and don’t expect anything in return, immediately. Sounds easy but isn’t. It is effort, unfortunately.

A good colleague of mine, Tony, told me years ago that you have to build your network when you do not need it. As Stephen Covey said some time ago, “Always start with the end in mind.” In order to show you (remember, “Don’t tell”) how that worked for me, here is a short job hunting story.

35 Introductions In Two Weeks

I spent a couple of weeks in San Francisco in March of 2011 (for context: I am originally from Germany, where I have spent about 50% of my career, and currently reside in Berlin). While there, I networked as best as possible, collecting as many contacts as I could and made sense. I already had a network in California because I had lived in Los Angeles back in 2006.

I decided to make a return trip to San Francisco in September to hunt for a job. Prior to my trip, I reached out to the connections I had made in March as well as any other friends and colleagues already in my network.

Job hunting in San Francisco: 79.5% of colleagues returned an introduction. (Large preview)

In total, I had asked about 44+ people for an introduction to colleagues in their network. Most of those 44+ were acquaintances, though a handful I knew better. Up until the first week in September, I had received 35 introductions (thanks again if you, dear reader, had been one of them).

A couple of things that are noteworthy: First, I did not know these 44+ people well. In most cases, I did not give first, that is, I did not ask how I could help before asking for help myself. However, I did earnestly convey that I would go to length to reciprocate the favor. What made the difference for me was that I was persistent. I tracked each conversation or request for an introduction and followed up if I had not gotten an intro, a reply or else.

Out of those 35, I managed to get 5 interviews at the likes of Amazon, Grockit, and Evernote. I did not manage to get a job at the time because the H1B visa quota filled up fast and unexpectedly in mid-September. This left me practically without a chance to get a visa (before even having had all interviews).

Here is what I do when I meet new people: I write down their full name, email and/or phone number. I make a note about what the person does and what we had talked about. I add a note like “May 18, 2018, what does the person do, where does s/he live”, and who did the introduction.

Furthermore, I try to find out what the person needs or wants to achieve and then offer to put them in touch with someone in my network. What generally helps tremendously is to have a good long-term memory of people and their needs, and the desire to help. Lastly, I connect on LinkedIn in order to stay up to date about what colleagues do and need.

Don’t Forget: Give first and don’t expect anything in return.

From Opportunities To Job Offers

Get yourself a neat Kanban board (a set of columns where tasks move from left to right) with Trello or Asana, for example (any board suffices). There is really no excuse anymore for anyone to not be able to track each introduction, job position or next action.

A simple Kanban board (here from Asana.com) will hold you accountable. (Large preview)

Set up four columns and name them as the following:

  • Opportunities
  • Introductions
  • Application sent
  • Interviews/Offers

All opportunities go here, whether you found a vacancy online or were told by a friend to have a look at a company.


The name says it all. For each vacancy that interests you, research whether you know someone or whether a colleague/friend of yours knows a person at the company. Once you’ve found a connection, kindly ask for an introduction. Keep in mind that an introduction usually will take at least a week. Beware that some people may not even know a person in question. Thus, send +1 requests for introductions.

Asking For An Introduction

Do not send a simple email such as “Please introduce me to XYZ”. In order to increase your chances, write a template like the following.

Your email template:

Hi %friend%,

I saw on %socialNetworkName% that you are connected with %personAtCompany% at %company%. They have an interesting vacancy outstanding to which I’d love to apply. I would like to ask whether you would mind introducing me to %personAtCompany% (if you know the person well enough)?

To make it easy for you, I have prepared an email for you to copy and paste. In the meantime, how can I help you?

Thanks in advance,

Bye, %yourName%

PS: In case that you don’t know the person well, please let me know. Thanks.

Subject: Intro %personAtCompany% <> %yourName%

Hi %personAtCompany%,

I would like to introduce you to %yourName%. S/he saw an interesting vacancy at your company. S/he is CC’ed. I will let her/him reach out to you directly if you don’t mind.

Hope that I was able to make a worthwhile introduction.

Bye, %friend% A template for sending request for introductions that delivers. (Large preview) Application Sent

Once you receive an introduction, send your application as soon as possible AND thank your friend with a quick email. Then move the card/opportunity to the “Application Sent” column and set a date/note on it to follow up in one or two weeks.

Pro tips: See section “How To Apply” further down.

Interviews (Offers)

In practice, this column will have much fewer cards. For this reason, I put this together with Offers. Eventually, you may take one of the first offers and don’t need the Offers column anyway.

Pro tip #1: Set aside a time in your calendar to go through each column and follow-up task.

Pro tip #2: Whenever you are in touch with a person at the company, make sure to add her/him to your contact list, together with a couple of notes. If you have had more frequent interactions, feel free to connect on LinkedIn. Why? People move around companies and you never know when you may meet again.

The Math Of Job Hunting

What is your ratio of job offers to applications?

Don’t know? Well, the ratio will tell you how long you will likely be looking for a job.

It is a tough question to answer. The problem for most of us though is likely to be overconfident. We all like to see ourselves as one of the lucky few who get a decent job almost immediately. Apparently, the math doesn’t prove that assumption.

The data I was able to find in regard to the number of applicants per position is very broad. Some sources report that they receive 250 applicants per job opening, others report around 60 (data from 2014). Though, the probability that the applicant will take the offer seems to be around 89%.

Let’s take these number as the upper and lower bounds. Alas, your ratio may be between 1:60 and 1:250. Whoa! That means that you need to send out between 60 and 250 applications to get 1 job offer.

What is your ratio between a job offer and applications sent? (Large preview)

Taking the above numbers into consideration, the main question becomes how productive you really are, i.e. how many applications do you send out per week? Let’s start with 2 per week and run the numbers.

  • A ratio of 1:10 would imply that with sending 2 applications per week, it will take you 1.15 months to get an offer (10/4.33/2 = 1.15).
  • 1:60: Sending 2 applications/week, it will take you 6.93 months.
  • 1:250: Sending 2 applications/week, it will take you 28.87 months.

If you send out 2 applications per week, it will take you between 7 months and 2+ years to find a cool job. Gosh, that is a long time indeed. Alas, 2 per week doesn’t get you anywhere (unless you are one of the few).

But what about 10 applications per week?

  • 1:60: 10 applications/week, results in a job hunt that takes 1.39 months,
  • 1:250: Sending 2 applications/week, it will take you 5.77 months.

That looks much better (on first glance). Of course, sending out 10 resumes per week also implies that you have to find 10 suitable openings per week, preparing resumes and portfolio, email and cover letter, and so on.

That is decent effort. Whatever way you cut it, that is the math. Now the question is what ratio does apply to you? I strongly suggest starting with something like 1:70 (8 months for 2 applications/week or 1.6 months for 10/week). Why? Because it will instill the right motivation right at the get-go.

But here is another aspect. If you consciously search and separate the OK from the ‘Awesome’ (those that almost perfectly match your experience) jobs you find, your ratio decreases. The better the match, the better your chances are. If, say, the ratio halves to 1:35, it may just take 3–4 weeks to get this awesome job (10 applications/week). Focus and deliver for 3–4 weeks, and done!

How To Apply

In short:

  1. Always ask for an intro first (see above how to do this);
  2. Reply within 1-2 days if you have gotten the intro (attach e.g. CV);
  3. Follow up a week later;
  4. Follow up each week until you get a response.

If you do not know anyone that could connect you to the company, test the waters (not the best approach). This is why networking is so important. The more people you know, the more likely it is that you can ask someone for an introduction. The spoiler: please do not randomly invite strangers on LinkedIn. Although it does increase your reach, it won’t work well.

But here is your real edge by following the process: 99.5% (gut feel) of applicants do not get past step 2. They do not follow up.

Don’t be the 99.5%. Follow up and you leave your competition in the dust. (Large preview) Follow Up Or Die

I mean it. If you have a good task list or Kanban-like board with columns at your disposal, this will get much much easier. If you receive a rejection, take it as a learning experience. Always ask for feedback. Without feedback, you cannot grow. When you follow up, do this:

  • Reply and be kind;
  • Make it easy for the other person to say “No”;
  • Make it clear that your intention is to get feedback to be able to learn, improve and grow.
Crucial notes:
  • Follow up until you get a reply that is to your liking. I can already see your face: “I only get general HR emails.” Very often yes, but have you ever tried to follow up more than twice?
  • Be aware that companies or recruiters may not want to go into detail by email because of legal reasons. It might be worth suggesting to talk on the phone or meet face-to-face instead.
Examples Of Good Cover Letters

As I mentioned above, here are two cover letters for an interaction design role that we really liked. See the difference to those applications at the beginning?

Great cover letters focus on the need of the company and tell what an applicant achieved. (Large preview) Putting It All Together

You might remember the very first sentence of this post: Finding the right job that excites, challenges, and paves the way for a long-term and evolving design career is hard work.

The approach with the least effort is to send out a whole bunch of automated emails and CVs no matter what the job asks for. By following this approach, you would indeed consider the math of job hunting. But that’s about it. The downside is that you would need to factor in the worst ratio you are willing to accept: 1:250 but perhaps 1:300 or more.

For a moment now, consider the company who accepts an applicant with such an approach. Do they know what they are doing? Alas, when you consider the above, there is hardly another way for your new and exciting dream job: hard work. Luckily, you can plan ahead by using the math of job hunting to your advantage.

Although this article is hardly a complete 101 of job hunting, I tried to make you think out-of-the-box in regard to some crucial aspects that, in fact, few people consider. Now it’s your time to take action: Pick an aspect from above that you have not considered yet and apply the learnings to make you stand out.

Always remember that the most telling predictor of how user-focused a designer you are, is how you see the company you apply to: the company is the user.

(ah, ra, yk, il)
Categories: Web Design

Review: Oxygen 2 Website Builder Lets You Design Code-Free Websites Like A Pro

Popular WordPress website builder, Oxygen has a brand new version of the plugin in the works. In this review, we take a closer look at Oxygen 2.0 to see...

The post Review: Oxygen 2 Website Builder Lets You Design Code-Free Websites Like A Pro appeared first on Onextrapixel.

Categories: Web Design

Most Important Git Commands for Web Developers

Currently, Git is one of the most popular version control systems among developers. You can use it to track changes in your projects and coordinate the work of multiple...

The post Most Important Git Commands for Web Developers appeared first on Onextrapixel.

Categories: Web Design

Meet Smashing Book 6: New Frontiers In Web Design

Smashing Magazine - Wed, 06/13/2018 - 03:00
Meet Smashing Book 6: New Frontiers In Web Design Meet Smashing Book 6: New Frontiers In Web Design Vitaly Friedman 2018-06-13T12:00:09+02:00 2018-06-14T13:28:26+00:00

It is about time to finally make sense of all the front-end and UX madness, isn't it? Meet Smashing Book 6 with everything from design systems to accessible single-page apps, CSS Custom Properties, Grid, Service Workers, performance patterns, AR/VR, conversational UIs & responsive art direction. And you can add your name into the book, too. About the book ↓.

Smashing Book 6 is dedicated to the challenges and headaches that we are facing today, and how to resolve them. No chit-chat, no theory: only practical, useful advice applicable to your work right away.

  • Book
  • eBook
Book$29 $39Print + eBook

Printed, quality hardcover. Free airmail shipping worldwide. Sep 2018.

eBook$14.90 $19Get the eBook

PDF, ePUB, Kindle. First chapters are already available.

About The Book

With so much happening in front-end and UX these days, it’s getting really hard to stay afloat, isn’t it? New technologies and techniques appear almost daily, and so navigating through it all in regular projects is daunting and time-consuming. Frankly, we just don’t have time to afford betting on a wrong strategy. That’s why we created Smashing Book 6, our shiny new book that explores uncharted territories and seeks to establish a map for the brave new front-end world.

You know the drill: the book isn’t about tools; it’s about workflow, strategy and shortcuts to getting things done well. Respected members of the community explore how to build accessible single-page apps with React or Angular, how to use CSS Grid Layout, CSS Custom Properties and service workers as well as how to load assets on the web in times of HTTP/2 and bloated third-party scripts.

We’ll also examine how to make design systems work in real-life, how to design and build conversational interfaces, AR/VR, building for chatbots and watches and how to bring responsive art-direction back to the web.

Print shipping in late September 2018. Hardcover + eBook. 432 pages. Written by Laura Elizabeth, Marcy Sutton, Rachel Andrew, Mike Riethmueller, Harry Roberts, Lyza D. Gardner, Yoav Weiss, Adrian Zumbrunnen, Greg Nudelman, Ada Rose Cannon and Vitaly Friedman. Pre-order the book today.

  • Book
  • eBook
Book$29 $39Print + eBook

Printed, quality hardcover. Free airmail shipping worldwide. Sep 2018.

eBook$14.90 $19Get the eBook

PDF, ePUB, Kindle. First chapters are already available.

Why This Book Is For You

We worked hard to design the book in a way that it doesn’t become outdated quickly. That’s why it’s more focused on strategy rather than tooling. It’s about how we do things, but not necessarily the tools we all use to get there.

Table of Contents

The book contains 11 chapters, with topics ranging from design to front-end. Only practical advice, applicable to your work right away.

  • Making design systems work in real-life
    by Laura Elizabeth
  • Accessibility in times of single-page applications
    by Marcy Sutton
  • Production-ready CSS Grid layouts
    by Rachel Andrew
  • Strategic guide to CSS Custom Properties
    by Mike Riethmueller
  • Taming performance bottlenecks
    by Harry Roberts
  • Building an advanced service worker
    by Lyza Gardner
  • Loading assets on the web
    by Yoav Weiss
  • Conversation interface design patterns
    by Adrian Zumbrunnen
  • Building chatbots and designing for watches
    by Greg Nudelman
  • Cross Reality and the web (AR/VR)
    by Ada Rose Cannon
  • Bringing personality back to the web
    by Vitaly Friedman
From left to right: Laura Elizabeth, Marcy Sutton, Rachel Andrew, Mike Riethmuller, Harry Roberts, Lyza Gardner, Yoav Weiss, Adrian Zumbrunnen, Greg Nudelman, Ada Rose Edwards, and yours truly.
  • Book
  • eBook
Book$29 $39Print + eBook

Printed, quality hardcover. Free airmail shipping worldwide. Sep 2018.

eBook$14.90 $19Get the eBook

PDF, ePUB, Kindle. First chapters are already available.

Download the Sample Chapter

To sneak a peek inside the book, you can download Vitaly’s chapter on bringing personality back to the web (PDF, ca. 18MB). Enjoy!

Goodie: New Frontiers In Web Design Wallpaper

To celebrate the pre-release of the book , Chiara Aliotta designed a set of mobile and desktop wallpapers for you to indulge in. Feel free to download it (ZIP, ca. 1.4MB).

Get ready for the new frontiers in web design with Chiara’s beautiful wallpaper. About The Designer

The cover was designed by the fantastic Chiara Aliotta. Chiara is an Italian award-winning designer with many years of experience as an art director and brand consultant. She founded the design studio Until Sunday and has directed the overall artistic look and feel of different tech companies and not-for-profit organizations around the world. We’re very happy that she gave Smashing Book 6 that special, magical touch.

Add Your Name To The Book

We kindly appreciate your support, and so as always, we invite you to add your name to the printed book: a double-page spread is reserved for the first 1.000 people. Space is limited, so please don’t wait too long!

A double-page spread is reserved for the first 1.000 readers. Add your name to the printed book.
  • Book
  • eBook
Book$29 $39Print + eBook

Printed, quality hardcover. Free airmail shipping worldwide. Sep 2018.

eBook$14.90 $19Get the eBook

PDF, ePUB, Kindle. First chapters are already available.

Categories: Web Design

Building A Pub/Sub Service In-House Using Node.js And Redis

Smashing Magazine - Tue, 06/12/2018 - 06:30
Building A Pub/Sub Service In-House Using Node.js And Redis Building A Pub/Sub Service In-House Using Node.js And Redis Dhimil Gosalia 2018-06-12T15:30:58+02:00 2018-06-14T13:28:26+00:00

Today’s world operates in real time. Whether it’s trading stock or ordering food, consumers today expect immediate results. Likewise, we all expect to know things immediately — whether it’s in news or sports. Zero, in other words, is the new hero.

This applies to software developers as well — arguably some of the most impatient people! Before diving into BrowserStack’s story, it would be remiss of me not to provide some background about Pub/Sub. For those of you who are familiar with the basics, feel free to skip the next two paragraphs.

Many applications today rely on real-time data transfer. Let’s look closer at an example: social networks. The likes of Facebook and Twitter generate relevant feeds, and you (via their app) consume it and spy on your friends. They accomplish this with a messaging feature, wherein if a user generates data, it will be posted for others to consume in nothing short of a blink. Any significant delays and users will complain, usage will drop, and if it persists, churn out. The stakes are high, and so are user expectations. So how do services like WhatsApp, Facebook, TD Ameritrade, Wall Street Journal and GrubHub support high volumes of real-time data transfers?

Nope, we can't do any magic tricks, but we have articles, books and webinars featuring techniques we all can use to improve our work. Smashing Members get a seasoned selection of magic front-end tricks — e.g. live designing sessions and perf audits, too. Just sayin'! ;-)

Explore Smashing Wizardry →

All of them use a similar software architecture at a high level called a “Publish-Subscribe” model, commonly referred to as Pub/Sub.

“In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead categorize published messages into classes without knowledge of which subscribers, if any, there may be. Similarly, subscribers express interest in one or more classes and only receive messages that are of interest, without knowledge of which publishers, if any, there are.“


Bored by the definition? Back to our story.

At BrowserStack, all of our products support (in one way or another) software with a substantial real-time dependency component — whether its automate tests logs, freshly baked browser screenshots, or 15fps mobile streaming.

In such cases, if a single message drops, a customer can lose information vital for preventing a bug. Therefore, we needed to scale for varied data size requirements. For example, with device logger services at a given point of time, there may be 50MB of data generated under a single message. Sizes like this could crash the browser. Not to mention that BrowserStack’s system would need to scale for additional products in the future.

As the size of data for each message differs from a few bytes to up to 100MB, we needed a scalable solution that could support a multitude of scenarios. In other words, we sought a sword that could cut all cakes. In this article, I will discuss the why, how, and results of building our Pub/Sub service in-house.

Through the lens of BrowserStack’s real-world problem, you will get a deeper understanding of the requirements and process of building your very own Pub/Sub.

Our Need For A Pub/Sub Service

BrowserStack has around 100M+ messages, each of which is somewhere between approximately 2 bytes and 100+ MB. These are passed around the world at any moment, all at different Internet speeds.

The largest generators of these messages, by message size, are our BrowserStack Automate products. Both have real-time dashboards displaying all requests and responses for each command of a user test. So, if someone runs a test with 100 requests where the average request-response size is 10 bytes, this transmits 1×100×10 = 1000 bytes.

Now let’s consider the larger picture as — of course — we don’t run just one test a day. More than approximately 850,000 BrowserStack Automate and App Automate tests are run with BrowserStack each and every day. And yes, we average around 235 request-response per test. Since users can take screenshots or ask for page sources in Selenium, our average request-response size is approximately 220 bytes.

So, going back to our calculator:

850,000×235×220 = 43,945,000,000 bytes (approx.) or only 43.945GB per day

Now let’s talk about BrowserStack Live and App Live. Surely we have Automate as our winner in form of size of data. However, Live products take the lead when it comes to the number of messages passed. For every live test, about 20 messages are passed each minute it turns. We run around 100,000 live tests, which each test averaging around 12 mins meaning:

100,000×12×20 = 24,000,000 messages per day

Now for the awesome and remarkable bit: We build, run, and maintain the application for this called pusher with 6 t1.micro instances of ec2. The cost of running the service? About $70 per month.

Choosing To Build vs. Buying

First things first: As a startup, like most others, we were always excited to build things in-house. But we still evaluated a few services out there. The primary requirements we had were:

  1. Reliability and stability,
  2. High performance, and
  3. Cost-effectiveness.

Let’s leave the cost-effectiveness criteria out, as I can’t think of any external services that cost under $70 a month (tweet me if know you one that does!). So our answer there is obvious.

In terms of reliability and stability, we found companies that provided Pub/Sub as a service with 99.9+ percent uptime SLA, but there were many T&C’s attached. The problem is not as simple as you think, especially when you consider the vast lands of the open Internet that lie between the system and client. Anyone familiar with Internet infrastructure knows stable connectivity is the biggest challenge. Additionally, the amount of data sent depends on traffic. For example, a data pipe that’s at zero for one minute may burst during the next. Services providing adequate reliability during such burst moments are rare (Google and Amazon).

Performance for our project means obtaining and sending data to all listening nodes at near zero latency. At BrowserStack, we utilize cloud services (AWS) along with co-location hosting. However, our publishers and/or subscribers could be placed anywhere. For example, it may involve an AWS application server generating much-needed log data, or terminals (machines where users can securely connect for testing). Coming back to the open Internet issue again, if we were to reduce our risk we would have to ensure our Pub/Sub leveraged the best host services and AWS.

Another essential requirement was the ability to transmit all types of data (Bytes, text, weird media data, etc.). With all considered, it did not make sense to rely on a third-party solution to support our products. In turn, we decided to revive our startup spirit, rolling up our sleeves to code our own solution.

Building Our Solution

Pub/Sub by design means there will be a publisher, generating and sending data, and a Subscriber accepting and processing it. This is similar to a radio: A radio channel broadcasts (publishes) content everywhere within a range. As a subscriber, you can decide whether to tune into that channel and listen (or turn off your radio altogether). 

Unlike the radio analogy where data is free for all and anyone can decide to tune in, in our digital scenario we need authentication which means data generated by the publisher could only be for a single particular client or subscriber.

Basic working of Pub/Sub (Large preview)

Above is a diagram providing an example of a good Pub/Sub with:

  • Publishers
    Here we have two publishers generating messages based on pre-defined logic. In our radio analogy, these are our radio jockeys creating the content.
  • Topics
    There are two here, meaning there are two types of data. We can say these are our radio channels 1 and 2.
  • Subscribers
    We have three that each read data on a particular topic. One thing to notice is that Subscriber 2 is reading from multiple topics. In our radio analogy, these are the people who are tuned into a radio channel. 

Let’s start understanding the necessary requirements for the service.

  1. An evented component
    This kicks in only when there is something to kick in.
  2. Transient storage
    This keeps data persisted for a short duration so if the subscriber is slow, it still has a window to consume it.
  3. Reducing the latency
    Connecting two entities over a network with minimum hops and distance.

We picked a technology stack that fulfilled the above requirements:

  1. Node.js
    Because why not? Evented, we wouldn’t need heavy data processing, plus it’s easy to onboard.
  2. Redis
    Supports perfectly short-lived data. It has all the capabilities to initiate, update and auto-expire. It also puts less load on the application.
Node.js For Business Logic Connectivity

Node.js is a nearly perfect language when it comes to writing code incorporating IO and events. Our particular given problem had both, making this option the most practical for our needs.

Surely other languages such as Java could be more optimized, or a language like Python offers scalability. However, the cost of starting with these languages is so high that a developer could finish writing code in Node in the same duration. 

To be honest, if the service had a chance of adding more complicated features, we could have looked at other languages or a completed stack. But here it is a marriage made in heaven. Here is our package.json:

{ "name": "Pusher", "version": "1.0.0", "dependencies": { "bstack-analytics": "*****", // Hidden for BrowserStack reasons. :) "ioredis": "^2.5.0", "socket.io": "^1.4.4" }, "devDependencies": {}, "scripts": { "start": "node server.js" } }

Very simply put, we believe in minimalism especially when it comes to writing code. On the other hand, we could have used libraries like Express to write extensible code for this project. However, our startup instincts decided to pass on this and to save it for the next project. Additional tools we used:

  • ioredis
    This is one of the most supported libraries for Redis connectivity with Node.js used by companies including Alibaba.
  • socket.io
    The best library for graceful connectivity and fallback with WebSocket and HTTP.
Redis For Transient Storage

Redis as a service scales is heavily reliable and configurable. Plus there are many reliable managed service providers for Redis, including AWS. Even if you don’t want to use a provider, Redis is easy to get started with.

Let’s break down the configurable part. We started off with the usual master-slave configuration, but Redis also comes with cluster or sentinel modes. Every mode has its own advantages.

If we could share the data in some way, a Redis cluster would be the best choice. But if we shared the data by any heuristics, we have less flexibility as the heuristic has to be followed across. Fewer rules, more control is good for life!

Redis Sentinel works best for us as data lookup is done in just one node, connecting at a given point in time while data is not sharded. This also means that even if multiple nodes are lost, the data is still distributed and present in other nodes. So you have more HA and less chances of loss. Of course, this removed the pros from having a cluster, but our use case is different.

Architecture At 30000 Feet

The diagram below provides a very high-level picture of how our Automate and App Automate dashboards work. Remember the real-time system that we had from the earlier section?

BrowserStack’s real-time Automate and App Automate dashboards (Large preview)

In our diagram, our main workflow is highlighted with thicker borders. The “automate” section consists of:

  1. Terminals
    Comprised of the pristine versions of Windows, OSX, Android or iOS that you get while testing on BrowserStack.
  2. Hub
    The point of contact for all your Selenium and Appium tests with BrowserStack.

The “user service” section here is our gatekeeper, ensuring data is sent to and saved for the right individual. It is also our security keeper. The “pusher” section incorporates the heart of what we discussed in this article. It consists of the usual suspects including:

  1. Redis
    Our transient storage for messages, where in our case automate logs are temporarily stored.
  2. Publisher
    This is basically the entity that obtains data from the hub. All your request responses are captured by this component which writes to Redis with session_id as the channel.
  3. Subscriber
    This reads data from Redis generated for the session_id. It is also the web server for clients to connect via WebSocket (or HTTP) to get data and then sends it to authenticated clients.

Finally, we have the user’s browser section, representing an authenticated WebSocket connection to ensure session_id logs are sent. This enables the front-end JS to parse and beautify it for users.

Similar to the logs service, we have pusher here that is being used for other product integrations. Instead of session_id, we use another form of ID to represent that channel. This all works out of pusher!

Conclusion (TLDR)

We’ve had considerable success in building out Pub/Sub. To sum up why we built it in-house:

  1. Scales better for our needs;
  2. Cheaper than outsourced services;
  3. Full control over the overall architecture.

Not to mention that JS is the perfect fit for this kind of scenario. Event loop and massive amount of IO is what the problem needs! JavaScript is magic of single pseudo thread. 

Events and Redis as a system keep things simple for developers, as you can obtain data from one source and push it to another via Redis. So we built it.

If the usage fits into your system, I recommend doing the same!

(rb, ra, il)
Categories: Web Design

How to Build Complex, Large-Scale Vue.js Apps With Vuex

Tuts+ Code - Web Development - Tue, 06/12/2018 - 05:47

It's so easy to learn and use Vue.js that anyone can build a simple application with that framework. Even novices, with the help of Vue's documentation, can do the job. However, when complexity comes into play, things get a bit more serious. The truth is that multiple, deeply nested components with shared state can quickly turn your application into an unmaintainable mess.

The main problem in a complex application is how to manage the state between components without writing spaghetti code or producing side effects. In this tutorial you'll learn how to solve that problem by using Vuex: a state management library for building complex Vue.js applications.

What Is Vuex?

Vuex is a state management library specifically tuned for building complex, large-scale Vue.js applications. It uses a global, centralized store for all the components in an application, taking advantage of its reactivity system for instant updates.

The Vuex store is designed in such a way that it is not possible to change its state from any component. This ensures that the state can only be mutated in a predictable manner. Thus your store becomes a single source of truth: every data element is only stored once and is read-only to prevent the application's components from corrupting the state that is accessed by other components.

Why Do You Need Vuex?

You may ask: Why do I need Vuex in the first place? Can't I just put the shared state in a regular JavaScript file and import it into my Vue.js application?

You can, of course, but compared to a plain global object, the Vuex store has some significant advantages and benefits:

  • The Vuex store is reactive. Once components retrieve a state from it, they will reactively update their views every time the state changes.
  • Components cannot directly mutate the store's state. The only way to change the store's state is by explicitly committing mutations. This ensures every state change leaves a trackable record, which makes the application easier to debug and test.
  • You can easily debug your application thanks to the Vuex integration with Vue's DevTools extension.
  • The Vuex store gives you a bird's eye view of how everything is connected and affected in your application.
  • It's easier to maintain and synchronize the state between multiple components, even if the component hierarchy changes.
  • Vuex makes direct cross-component communication possible.
  • If a component is destroyed, the state in the Vuex store will remain intact.
Getting Started With Vuex

Before we get started, I want to make several things clear. 

First, to follow this tutorial, you need to have a good understanding of Vue.js and its components system, or at least minimal experience with the framework. 

Also, the aim of this tutorial is not to show you how to build an actual complex application; the aim is to focus your attention more on Vuex concepts and how you can use them to build complex applications. For that reason, I'm going to use very plain and simple examples, without any redundant code. Once you fully grasp the Vuex concepts, you will be able to apply them on any level of complexity.

Finally, I'll be using ES2015 syntax. If you are not familiar with it, you can learn it here.

And now, let's get started!

Setting Up a Vuex Project

The first step to get started with Vuex is to have Vue.js and Vuex installed on your machine. There are several ways to do that, but we'll use the easiest one. Just create an HTML file and add the necessary CDN links:

<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <!-- Put the CSS code here --> </head> <body> <!-- Put the HTML template code here --> <script src="https://unpkg.com/vue"></script> <script src="https://unpkg.com/vuex"></script> <script> // Put the Vue code here </script> </body> </html>

I used some CSS to make the components look nicer, but you don't need to worry about that CSS code. It only helps you to gain a visual notion about what is going on. Just copy and paste the following inside the <head> tag:

<style> #app { background-color: yellow; padding: 10px; } #parent { background-color: green; width: 400px; height: 300px; position: relative; padding-left: 5px; } h1 { margin-top: 0; } .child { width: 150px; height: 150px; position:absolute; top: 60px; padding: 0 5px 5px; } .childA { background-color: red; left: 20px; } .childB { background-color: blue; left: 190px; } </style>

Now, let's create some components to work with. Inside the <script> tag, right above the closing </body> tag, put the following Vue code:

Vue.component('ChildB',{ template:` <div class="child childB"> <h1> Score: </h1> </div>` }) Vue.component('ChildA',{ template:` <div class="child childA"> <h1> Score: </h1> </div>` }) Vue.component('Parent',{ template:` <div id="parent"> <childA/> <childB/> <h1> Score: </h1> </div>` }) new Vue ({ el: '#app' })

Here, we have a Vue instance, a parent component, and two child components. Each component has a heading "Score:" where we'll output the app state.

The last thing you need to do is to put a wrapping <div> with id="app" right after the opening <body>, and then place the parent component inside:

<div id="app"> <parent/> </div>

The preparation work is now done, and we're ready to move on.

Exploring VuexState Management

In real life, we deal with complexity by using strategies to organize and structure the content we want to use. We group related things together in different sections, categories, etc. It's like a book library, in which the books are categorized and put in different sections so that we can easily find what we are looking for. Vuex arranges the application data and logic related to state in four groups or categories: state, getters, mutations, and actions.

State and mutations are the base for any Vuex store:

  • state is an object that holds the state of the application data.
  • mutations is also an object containing methods which affect the state.

Getters and actions are like logical projections of state and mutations:

  • getters contain methods used to abstract the access to the state, and to do some preprocessing jobs, if needed (data calculating, filtering, etc.).
  • actions are methods used to trigger mutations and execute asynchronous code.

Let's explore the following diagram to make things a bit clearer:

On the left side, we have an example of a Vuex store, which we'll create later on in this tutorial. On the right side, we have a Vuex workflow diagram, which shows how the different Vuex elements work together and communicate with each other.

In order to change the state, a particular Vue component must commit mutations (e.g. this.$store.commit('increment', 3)), and then, those mutations change the state (score becomes 3). After that, the getters are automatically updated thanks to Vue's reactive system, and they render the updates in the component's view (with this.$store.getters.score). 

Mutations cannot execute asynchronous code, because this would make it impossible to record and track the changes in debug tools like Vue DevTools. To use asynchronous logic, you need to put it in actions. In this case, a component will first dispatch actions (this.$store.dispatch('incrementScore', 3000)) where the asynchronous code is executed, and then those actions will commit mutations, which will mutate the state. 

Create a Vuex Store Skeleton

Now that we've explored how Vuex works, let's create the skeleton for our Vuex store. Put the following code above the ChildB component registration:

const store = new Vuex.Store({ state: { }, getters: { }, mutations: { }, actions: { } })

To provide global access to the Vuex store from every component, we need to add the store property in the Vue instance:

new Vue ({ el: '#app', store // register the Vuex store globally })

Now, we can access the store from every component with the this.$store variable.

So far, if you open the project with CodePen in the browser, you should see the following result.

State Properties

The state object contains all of the shared data in your application. Of course, if needed, each component can have its own private state too.

Imagine that you want to build a game application, and you need a variable to store the game's score. So you put it in the state object:

state: { score: 0 }

Now, you can access the state's score directly. Let's go back to the components and reuse the data from the store. In order to be able to reuse reactive data from the store's state, you should use computed properties. So let's create a score() computed property in the parent component:

computed: { score () { return this.$store.state.score } }

In the parent component's template, put the {{ score }} expression:

<h1> Score: {{ score }} </h1>

And now, do the same for the two child components.

Vuex is so smart that it will do all the work for us to reactively update the score property whenever the state changes. Try to change the score's value and see how the result updates in all three components.

Creating Getters

It is, of course, good that you can reuse the this.$store.state keyword inside the components, as you saw above. But imagine the following scenarios:

  1. In a large-scale application, where multiple components access the state of the store by using this.$store.state.score, you decide to change the name of score. This means that you have to change the name of the variable inside each and every component that uses it! 
  2. You want to use a computed value of the state. For example, let's say you want to give players a bonus of 10 points when the score reaches 100 points. So, when the score hits 100 points, 10 points bonus are added. This means each component has to contain a function that reuses the score and increments it by 10. You will have repeated code in each component, which is not good at all!

Fortunately, Vuex offers a working solution to handle such situations. Imagine the centralized getter that accesses the store's state and provides a getter function to each of the state's items. If needed, this getter can apply some computation to the state's item. And if you need to change the names of some of the state's properties, you only change them in one place, in this getter. 

Let's create a score() getter:

getters: { score (state){ return state.score } }

A getter receives the state as its first argument, and then uses it to access the state's properties.

Note: Getters also receive getters as the second argument. You can use it to access the other getters in the store.

In all components, modify the score() computed property to use the score() getter instead of the state's score directly.

computed: { score () { return this.$store.getters.score } }

Now, if you decide to change the score to result, you need to update it only in one place: in the score() getter. Try it out in this CodePen!

Creating Mutations

Mutations are the only permissible way to change the state. Triggering changes simply means committing mutations in component methods.

A mutation is pretty much an event handler function that is defined by name. Mutation handler functions receive a state as a first argument. You can pass an additional second argument too, which is called the payload for the mutation. 

Let's create an increment() mutation:

mutations: { increment (state, step) { state.score += step } }

Mutations cannot be called directly! To perform a mutation, you should call the commit() method with the name of the corresponding mutation and possible additional parameters. It might be just one, like the step in our case, or there might be multiple ones wrapped in an object.

Let's use the increment() mutation in the two child components by creating a method named changeScore():

methods: { changeScore (){ this.$store.commit('increment', 3); } }

We are committing a mutation instead of changing this.$store.state.score directly, because we want to explicitly track the change made by the mutation. This way, we make our application logic more transparent, traceable, and easy to reason about. In addition, it makes it possible to implement tools, like Vue DevTools or Vuetron, that can log all mutations, take state snapshots, and perform time-travel debugging.

Now, let's put the changeScore() method into use. In each template of the two child components, create a button and add a click event listener to it:

<button @click="changeScore">Change Score</button>

When you click the button, the state will be incremented by 3, and this change will be reflected in all components. Now we have effectively achieved direct cross-component communication, which is not possible with the Vue.js built-in "props down, events up" mechanism. Check it out in our CodePen example.

Creating Actions

An action is just a function that commits a mutation. It changes the state indirectly, which allows for the execution of asynchronous operations. 

Let's create an incrementScore() action:

actions: { incrementScore: ({ commit }, delay) => { setTimeout(() => { commit('increment', 3) }, delay) } }

Actions get the context as the first parameter, which contains all methods and properties from the store. Usually, we just extract the parts we need by using ES2015 argument destructuring. The commit method is one we need very often. Actions also get a second payload argument, just like mutations.

In the ChildB component, modify the changeScore() method:

methods: { changeScore (){ this.$store.dispatch('incrementScore', 3000); } }

To call an action, we use the dispatch() method with the name of the corresponding action and additional parameters, just as with mutations.

Now, the Change Score button from the ChildA component will increment the score by 3. The identical button from the ChildB component will do the same, but after a delay of 3 seconds. In the first case, we're executing synchronous code and we use a mutation, but in the second case we're executing asynchronous code, and we need to use an action instead. See how it all works in our CodePen example.

Vuex Mapping Helpers

Vuex offers some useful helpers which can streamline the process of creating state, getters, mutations, and actions. Instead of writing those functions manually, we can tell Vuex to create them for us. Let's see how it works.

Instead of writing the score() computed property like this:

computed: { score () { return this.$store.state.score } }

We just use the mapState() helper like this:

computed: { ...Vuex.mapState(['score']) }

And the score() property is created automatically for us.

The same is true for the getters, mutations, and actions. 

To create the score() getter, we use the mapGetters() helper:

computed: { ...Vuex.mapGetters(['score']) }

To create the changeScore() method, we use the mapMutations() helper like this:

methods: { ...Vuex.mapMutations({changeScore: 'increment'}) }

When used for mutations and actions with the payload argument, we must pass that argument in the template where we define the event handler:

<button @click="changeScore(3)">Change Score</button>

If we want changeScore() to use an action instead of a mutation, we use mapActions() like this:

methods: { ...Vuex.mapActions({changeScore: 'incrementScore'}) }

Again, we must define the delay in the event handler:

<button @click="changeScore(3000)">Change Score</button>

Note: All mapping helpers return an object. So, if we want to use them in combination with other local computed properties or methods, we need to merge them into one object. Fortunately, with the object spread operator (...), we can do it without using any utility. 

In our CodePen, you can see an example of how all mapping helpers are used in practice.

Making the Store More Modular

It seems that the problem with complexity constantly obstructs our way. We solved it before by creating the Vuex store, where we made the state management and component communication easy. In that store, we have everything in one place, easy to manipulate and easy to reason about. 

However, as our application grows, this easy-to-manage store file becomes larger and larger and, as a result, harder to maintain. Again, we need some strategies and techniques for improving the application structure by returning it to its easy-to-maintain form. In this section, we'll explore several techniques which can help us in this undertaking.

Using Vuex Modules

Vuex allows us to split the store object into separate modules. Each module can contain its own state, mutations, actions, getters, and other nested modules. After we've created the necessary modules, we register them in the store.

Let's see it in action:

const childB = { state: { result: 3 }, getters: { result (state) { return state.result } }, mutations: { increase (state, step) { state.result += step } }, actions: { increaseResult: ({ commit }, delay) => { setTimeout(() => { commit('increase', 6) }, delay) } } } const childA = { state: { score: 0 }, getters: { score (state) { return state.score } }, mutations: { increment (state, step) { state.score += step } }, actions: { incrementScore: ({ commit }, delay) => { setTimeout(() => { commit('increment', 3) }, delay) } } } const store = new Vuex.Store({ modules: { scoreBoard: childA, resultBoard: childB } })

In the above example, we created two modules, one for each child component. The modules are just plain objects, which we register as scoreBoard and resultBoard in the modules object inside the store. The code for childA is the same as that in the store from the previous examples. In the code for childB, we add some changes in values and names.

Let's now tweak the ChildB component to reflect the changes in the resultBoard module. 

Vue.component('ChildB',{ template:` <div class="child childB"> <h1> Result: {{ result }} </h1> <button @click="changeResult()">Change Result</button> </div>`, computed: { result () { return this.$store.getters.result } }, methods: { changeResult () { this.$store.dispatch('increaseResult', 3000); } } })

In the ChildA component, the only thing we need to modify is the changeScore() method:

Vue.component('ChildA',{ template:` <div class="child childA"> <h1> Score: {{ score }} </h1> <button @click="changeScore()">Change Score</button> </div>`, computed: { score () { return this.$store.getters.score } }, methods: { changeScore () { this.$store.dispatch('incrementScore', 3000); } } })

As you can see, splitting the store into modules makes it much more lightweight and maintainable, while still keeping its great functionality. Check out the updated CodePen to see it in action.

Namespaced Modules

If you want or need to use one and the same name for a particular property or method in your modules, then you should consider namespacing them. Otherwise you may observe some strange side effects, such as executing all the actions with the same names, or getting the wrong state's values. 

To namespace a Vuex module, you just set the namespaced property to true.

const childB = { namespaced: true, state: { score: 3 }, getters: { score (state) { return state.score } }, mutations: { increment (state, step) { state.score += step } }, actions: { incrementScore: ({ commit }, delay) => { setTimeout(() => { commit('increment', 6) }, delay) } } } const childA = { namespaced: true, state: { score: 0 }, getters: { score (state) { return state.score } }, mutations: { increment (state, step) { state.score += step } }, actions: { incrementScore: ({ commit }, delay) => { setTimeout(() => { commit('increment', 3) }, delay) } } }

In the above example, we made the property and method names the same for the two modules. And now we can use a property or method prefixed with the name of the module. For example, if we want to use the score() getter from the resultBoard module, we type it like this: resultBoard/score. If we want the score() getter from the scoreBoard module, then we type it like this: scoreBoard/score. 

Let's now modify our components to reflect the changes we made. 

Vue.component('ChildB',{ template:` <div class="child childB"> <h1> Result: {{ result }} </h1> <button @click="changeResult()">Change Result</button> </div>`, computed: { result () { return this.$store.getters['resultBoard/score'] } }, methods: { changeResult () { this.$store.dispatch('resultBoard/incrementScore', 3000); } } }) Vue.component('ChildA',{ template:` <div class="child childA"> <h1> Score: {{ score }} </h1> <button @click="changeScore()">Change Score</button> </div>`, computed: { score () { return this.$store.getters['scoreBoard/score'] } }, methods: { changeScore () { this.$store.dispatch('scoreBoard/incrementScore', 3000); } } })

As you can see in our CodePen example, we can now use the method or property we want and get the result we expect.

Splitting the Vuex Store Into Separate Files

In the previous section, we improved the application structure to some extent by separating the store into modules. We made the store cleaner and more organized, but still all of the store code and its modules lie in the same big file. 

So the next logical step is to split the Vuex store into separate files. The idea is to have an individual file for the store itself and one for each of its objects, including the modules. This means having separate files for the state, getters, mutations, actions, and for each individual module (store.js, state.js, getters.js, etc.) You can see an example of this structure at the end of the next section.

Using Vue Single File Components

We've made the Vuex store as modular as we can. The next thing we can do is to apply the same strategy to the Vue.js components too. We can put each component in a single, self-contained file with a .vue extension. To learn how this works, you can visit the Vue Single File Components documentation page

So, in our case, we'll have three files: Parent.vue, ChildA.vue, and ChildB.vue. 

Finally, if we combine all three techniques, we'll end up with the following or similar structure:

├── index.html └── src ├── main.js ├── App.vue ├── components │ ├── Parent.vue │ ├── ChildA.vue │ ├── ChildB.vue └── store ├── store.js ├── state.js ├── getters.js ├── mutations.js ├── actions.js └── modules ├── childA.js └── childB.js

In our tutorial GitHub repo, you can see the completed project with the above structure.


Let's recap some main points you need to remember about Vuex:

Vuex is a state management library that helps us to build complex, large-scale applications. It uses a global, centralized store for all the components in an application. To abstract the state, we use getters. Getters are pretty much like computed properties and are an ideal solution when we need to filter or calculate something on runtime.

The Vuex store is reactive, and components cannot directly mutate the store's state. The only way to mutate the state is by committing mutations, which are synchronous transactions. Each mutation should perform only one action, must be as simple as possible, and is only responsible for updating a piece of the state.

Asynchronous logic should be encapsulated in actions. Each action can commit one or more mutations, and one mutation can be committed by more than one action. Actions can be complex, but they never change the state directly.

Finally, modularity is the key to maintainability. To deal with complexity and make our code modular, we use the "divide and conquer" principle and the code splitting technique.


That's it! You already know the main concepts behind Vuex, and you are ready to start applying them in practice.  

For the sake of brevity and simplicity, I intentionally omitted some details and features of Vuex, so you'll need to read the full Vuex documentation to learn everything about Vuex and its feature set.

Categories: Web Design

How To Turn Your Users Into Advocates

Smashing Magazine - Tue, 06/12/2018 - 03:15
How To Turn Your Users Into Advocates How To Turn Your Users Into Advocates Nick Babich 2018-06-12T12:15:44+02:00 2018-06-14T13:28:26+00:00

(This article is kindly sponsored by Adobe.) As businesses become more consumer-oriented, competition grows fiercer. Thousands of companies worldwide are struggling each day to gain more market share and to win over new consumers. A significant number of companies concentrate only on acquiring new customers — they allocate enormous marketing budgets trying to strengthen their customer base. But acquiring new customers only becomes harder and more expensive. According to the 2017 Digital Advertising Report by Adobe, ad costs are seeing growth five times faster than US inflation rates.

Cost of advertising increase from 2014 to 2016 in the US. (Image source)

In an attempt to find new customers, companies often forget to think of ways to engage with existing users. However, acquiring a new customer is anywhere from 5 to 25 times more expensive than retaining an existing one.

To succeed in the modern market, companies need to do more than produce an excellent product or provide reliable service: They need to turn their faithful users into advocates.

In this article, I’m going to discuss:

  • who are product advocates,
  • actionable ways to turn your customers into brand advocates,
  • what to consider when creating a strategy for advocacy.
Who Are Product Advocates?

Brand advocates are people who feel so positively about a brand that they want to recommend it to others. They’re often called volunteer marketers because they pass on positive word-of-mouth messages about the brand to other people (both offline and online). Advocates do it organically — money is not the primary reason why they promote a brand or product; they promote it because they truly believe in the brand.

Why Advocacy Is Great

Who sells your products or services? You might think it the sole responsibility of the sales and marketing team. Yes, for a long time, sales and marketing was the team responsible for product growth, but the situation has changed. Your customers have quickly become the most critical people to sell what you’re offering. More specifically, your customers have become keen advocates for your product or service. Advocates can be a key part of growing your customer base:

  • Organic promotion
    Brand advocacy is the modern form of traditional word-of-mouth marketing. And word of mouth about a product or service is one of the most powerful forms of advertising; when regular people recommend a product, their message carries more weight than a paid advertisement. According to a McKinsey study, word of mouth can generate more than double the sales of paid advertising.
  • Authentic reviews and testimonials
    Social proof plays a vital part in the process of product selection. Reading reviews and testimonials is the first step potential users make when researching a product; reviews and testimonials play a role in the wisdom of the crowd. And advocates can be excellent sources of reviews and testimonials. According to Google, 19% of brand advocates share their experiences online in their networks — twice as many as non-brand advocates.
  • Brand awareness
    Advocates use the power of social channels to amplify a brand’s exposure. As a result, they can reach out to people you might not have considered.
  • Valuable customer feedback loops
    Advocates can provide valuable customer insights. Their insights can help you formulate more focused, customer-centric product road maps.
Loyalty And Advocacy Are Not The Same Thing

Many people confuse loyalists and brand advocates. Brand loyalists and advocates aren’t the same groups of customers. Loyal customers are people who stay with your brand. For example, if you run an e-commerce store, loyal customers will be your return buyers. But they might not actively promote your brand to others (i.e. they might not be comfortable with sharing information about your brand publicly).

Advocates, on the other hand, are people who not only are loyal to your brand, but also proactively talk up and advocate for your company to their own networks. The word “proactive” is key here. Advocates invest in the success of your brand heavily. The goal is to turn brand loyalists into brand advocates.

Who Has The Potential To Become A Brand Advocate?

Your existing customers are the most apparent advocates for your brand. Let’s define the groups of existing users who likely to be interested in a brand advocacy program:

  • Promoters
    Promoters are people who participate in an NPS survey, a single-question survey that sounds like, “On a scale of 0 to 10, how likely are you to recommend us to your friends, family, or colleagues?”, and who answers 9 or 10.
  • Referrers
    These are existing customers who refer new users to your product.
  • Repeat visitors
    Repeat visitors are highly engaged and interested in the content you provide.
  • Social sharers
    These are people who share your content on social media on a regular basis.
  • Critics
    Critics leave feedback about your product or service.

However, your customers are not your only advocates. The best brand advocates are people who work with you: your employees. Communications marketing firm Edelman found that 52% of consumers view employees as very credible sources of information about a brand.

How To Encourage Advocacy

Getting customers to advocate for a brand is a lot different from getting them to buy products or services. Users don’t become advocates without reason. To acquire a brand ambassador, companies need to create the conditions that generate not only happy customers, but true customer advocates.

Don’t Try To Force It

Pushing people towards a particular type of action typically results in them doing the opposite. Don’t try to force advocacy; it should be completely natural.

Create A Delightful UX

Designing for the user experience has a lot more to it than making a product usable. It’s also important to generate a certain positive emotional effect while people are using a product. After all, user experience is about how users feel when they interact with a product. As humans, we establish some sort of an emotional connection with all of the products we use. It’s possible to establish a deeper connection with a product by adding elements that generate positive emotions at multiple points along that journey.

Pleasure is at the top of Aaron Walter’s pyramid of emotional design. Designers should have a goal to please their users and make them feel happy when they use the product.

The reward for brands that connect with customers’ emotions in a positive way can be substantial. People love to talk about products that make them happy.

Duolingo is an excellent example of incorporating delight in UX. What makes Duolingo thrive is its smooth functionality wrapped in a friendly design with elements of gamification. Each lesson is presented as a challenge to the user. When users accomplish a task, Duolingo celebrates this progress with the users by rewarding them with a badge. By presenting the learning process as a challenge, the service creates a sense of development and accomplishment. The latter has a significant impact on delight.

Evoking a positive emotional response in users is key to creating a delightful UX. Duolingo transforms the task of learning a new language into an inviting experience. This motivates users to level up and achieve mastery in the discipline. Focus On Building Trust

Advocacy is always a risky business. When discussing a company, advocates are putting their reputation on the line. They know that if something goes wrong, people will blame them for it. But one thing can alleviate those fears: trust. The more they trust you, the more easily they will recommend your product.

Below are a few things that play a significant role in building trust.

Stand By What You Offer

Deliver what you promise, and promptly solve problems when something goes wrong. That’s the obvious starting point, but you’d be surprised at how many fail to execute well on this simple principle.

Casper, an e-commerce company that sells sleep products online, is an excellent example of a company that exemplifies trust. Ordering a mattress on the Internet isn’t a simple thing. A customer might try a product and find that it’s not good for them. The company understands this and offers an extended trial period (customers can test a product for 100 nights) and an incredibly lenient return policy. By making returns as simple as possible, Casper makes the process of ordering a mattress as comfortable as possible. Casper not only stands by its products, but also trusts its customers to be honest when requesting a refund.

Make It Easy To Reach You

When customers interact with a brand, they expect to have a dialog, not a monologue. They want you to listen to them and demonstrate that you care about them as individuals. This is especially important when users face problems. Users should be able to reach a company through whichever channel is most convenient to them at the time. Whether they prefer face-to-face communication, email, a phone call or a message in a social network, make sure you’re available by all those means.

Ask For Feedback

Asking users for feedback not only is one of the best ways to gain insight into your business, but is also a great way to build relationships. When you ask users for feedback, they understand that you actually care about them and want to make their experience better.

However, the way you ask for feedback plays a vital role in how users react to it. Generic surveys with questions like, “Are you happy with our service? Answer yes or no” won’t deliver many insights. You need to research users problems first, get to know what is bothering them, and only after that ask questions that your users will be happy to answer.

DigitalOcean makes users feel that their opinions carry weight. Encourage Your Customers To Talk About You

Despite the digital world constantly changing, one trend remains the same: When it comes to evaluating a new product or service, potential clients trust the advice and expertise of existing clients. To build trust, you need to encourage users to talk about you. Here are a few things to remember when asking users for a review:

  • Find the right time to ask for a review. The request for a review should be a natural part of the customer journey.
Booking.com makes asking for feedback a natural part of the user journey. When Booking.com users check out at a hotel, the service asks them to review their stay.
  • Focus on quality, not quantity. Stay away from reviews and testimonials that praise the product. “Amazing product, highly recommended” doesn’t say much to potential customers. Prioritize testimonials that have context and that tell a story. This testimonial from Amazon illustrates exactly what I mean:
Product reviews can act as social proof and encourage prospects to convert. The best reviews not only describe the pros and cons of a product, but tell a story of how the product benefits the user. Offer A Loyalty Program

A loyalty program is a tried-and-true technique to show users your gratitude. As mentioned above, loyalty and advocacy aren’t the same thing. Still, a loyalty program can be used to increase the number of brand advocates:

  • Beat negative experience.
    A loyalty program might come in handy when users face a problem and complain about it. Of course, it’s essential to respond to the user request and provide a solution to the problem as fast as you can. But once the issue has been resolved, you can offer the customer loyalty points as an apology. This might help you to win back frustrated users, and maybe they can even advocate for your brand.
  • Encourage social activity.
    Motivate users to participate in social activities. For example, reward users by awarding loyalty points every time they tweet or post to Facebook, write a review, or refer their friends.
Offer A Referral Program

Running a referral program is a great way to encourage existing users to share information about your business. A successful referral program can help you achieve two key goals:

  • acquire new customers,
  • turn existing customers into brand advocates.

Moreover, studies confirm that referred customers are more valuable than customers acquired by other methods; they tend to yield higher profit margins and stay longer (they have a 16% higher lifetime value than non-referred customers), resulting in an overall higher customer lifetime value.

The critical point with a referral strategy is to find out the right incentive to make users spread the word about your product. Dropbox’s referral program is possibly one of the most famous cases of referral marketing done right. The service grew 3900% in 15 months with a simple referral program. When existing Dropbox users referred Dropbox to someone and the person signed up, both got extra free space. Apparently, Dropbox’s tremendous rise is not all due to the referral program; the service provides an excellent user experience, and the team continually improves its product. But the referral program was a great accelerator of the process of promotion.

Dropbox offered a two-sides referral program. Both advocate and referrer are rewarded for completing the desired task.

Uber is an excellent example of how a referral program baked into the service from day one can boost adoption. When Uber launched, it was quite a revolutionary service that brought the sharing economy to the transportation industry. People had to adapt to this new format of ridesharing — many potential users had doubts that stopped them from trying the new experience. The referral program was an excellent tool to alleviate fears. The incentive for participation in the program is straightforward: The service offers a free ride to both the referrer and the new rider upon a successful referral. A free ride is an excellent opportunity to get to know the service. This way, Uber gives new customers the perfect introduction to the service.

Uber’s referral program

Both Dropbox and Uber integrated the referral program very naturally into the product experience. For Dropbox users, the referral program is presented as the final step of the onboarding process — at the point when users already know what benefits the product brings to them and when they’ll be most likely to participate in the program. As for Uber, the referral program has its own option in app’s main menu.

Personalize Customer Experiences

Personalization allows brands to build deeper connections with their customers. It feels great when a product offers an experience that feels tailored especially to us. A personalized experience is what often drives a customer to say, “This is the brand for me.”

It’s possible to make the experience more personal by gathering information on customers and using it to deliver more relevant content. For example, you could have an intuitive interface that adjusts exactly the way the user expects. Netflix is an excellent example of earning loyalty based on providing a personalized experience. The service offers content suggestions based on the user’s viewing history. Netflix also notifies users when new seasons of their favorite TV shows are released.

Netflix does a great job of personalizing its mobile push notifications. Leverage The Power Of Social Media

The power of word of mouth created by brand advocates is amplified through social media. In fact, if there’s one place your company should look for brand advocates, it’s on your social media channels. Today, 70% of Americans use social media channels to engage with friends, family and the people they know. Thus, it’s essential to practice social listening — listen to what your current customers and advocates are saying about your brand — and respond to their comments accordingly.

Choose The Social Networks Most Effective To Your Business

It’s extremely important to know where your audience lives on social media and where potential advocates could have the most influence.

Carefully Choose Content To Publish

Before posting anything on social media, ask yourself two simple questions, “Does it benefit our company?” and “Does it meet our audience’s needs?” Ideally, you should post content that both reflects your business’ goals and satisfies the needs of your target audience.

Respond To User Feedback

Recognizing and responding to positive feedback is particularly important over social media. Reward the people who stand out in your community. If you have a customer who wants to engage with you, engage with them. Give them as much love as they’re giving you.

Users giving positive feedback about your brand is by far the best brand promotion. MailChimp responds to positive customer feedback on Twitter. Share User-Generated Content

One of the best ways to push customer advocacy is through user-generated content.

It’s great for brands because one piece of user-generated content can reach thousands of people within hours. And it’s great for users: Being mentioned or having content shared by a brand is really exciting for many consumers.

Airbnb is an excellent example of how user-generated content can be a vital part of a brand’s content. In the company’s Instagram account, Airbnb shares stunning photos captured by its customers. The photos include exotic locations, and this kind of content is highly attractive to prospective customers.

Sharing user content helps you get to that user’s audience. Airbnb uses such content to show off its users’ talents behind the camera. Solve User Problems

When users have a problem with a product, they often post questions or complaints on social networks in the hope of getting a quick response. It’s tremendously important to address every concern users have about your brand. By solving their problems, you clearly demonstrate that your brand is genuinely addressing customer concerns. Just imagine the effect when you resolve an issue on Twitter, Facebook or Instagram, and the happy user shares the whole conversation with their friends and family. The benefits will be priceless. Thus, the more you interact with people and solve their issues on social media, the more value you will provide to them, and the more they will like you.

MailChimp deals with user problems on Twitter. Encourage Your Followers To Share Content

Social media are great places to run promotional campaigns. Next time you run a promotion, ask your followers to share special moments using the hash tag assigned to the campaign. Track the hash tag, and choose the most inspiring contributions. This type of sharing has three significant benefits:

  • It builds brand loyalty.
  • It brings a community together.
  • It helps you create great content relevant to your brand.
In Adobe XD’s promotional campaign on Twitter, designers share their work with Adobe XD using the hash tag #AdobeXDUIKit. Provide Social Reward

Monitor your social media channels to identify people who are frequently mentioning your brand, and reward them with personal messages or gifts.

Reward users for connecting and interacting with your brand on social media. Starbucks sent a personalized, reusable Starbucks cup to one of its loyal customers to thank her for promoting Starbucks’ products in her Instagram posts. Make Social Engagement A Natural Part Of The User Journey

Encourage your users to share their achievements in the app on social media. Every once in a while, give users a shout out by sharing their posts on your page as well. Such encouragement can play a key role in making other people do the same. Just make sure the spotlight is on their accomplishments, not your product.

Runtastic (an app that tracks the number of kilometers a user runs every day) is a great example. The app encourages users to share their run with friends on social networks. Users love to share their progress with their network because it makes them look good.

Encourage your followers to share special moments. Runtastic encourages its users to share their accomplishments on social media. Boost Employee Advocacy

Your employees can help you amplify the brand’s message. According to Weber Shandwick research, 30% of employees are deeply engaged and have a high potential to be employer advocates. Moreover, the leads generated by an employee through social networking convert 7 times more often than other leads.

Your employees know the product inside out; they are capable of providing support and answering detailed questions about the product. It’s possible to boost employee advocacy by following a few simple rules:

  • Train your employees on social sharing activities. Organize seminars to educate your employees on the importance of social sharing and how they can participate in this activity.
  • Incentivize participation in social activities. Provide benefits to frequent sharers and referrers, and acknowledge them in company events.
  • Practice co-creating content with your employees. Give your employees more opportunities to be involved with your brand by sharing their own messages that reinforce business goals.
  • Help them build their personal brand. When your employees gain enough credibility to market your company, the impact of promotion will be much higher.
Help Customers Reach Their Professional Goals

Every brand should help customers to become more experienced in what they do. One way to help your customers with their professional advancement is to provide educational opportunities. Today, many big companies are focused on creating content that will help their users. For example, Adobe offers a magnificent suite of products for designers, but it isn’t only the products that make the company recognizable; it’s the content it publishes. Adobe runs a blog that offers free in-depth educational content that helps thousands of designers create better products.

Hundreds of thousands of designers return to Adobe’s blog every month to learn more about design. Readers recognize and love the brand because the blog posts help them in what they do. Create “Wow” Moments For Your Users

One of the most effective ways to make your users happy (and turn them into brand advocates) is to surprise them — for example, with an unexpected gift. A gift doesn’t mean something expensive. It could be as simple as a handwritten note. Most users would be delighted to receive such a gift because they understand that it takes time to write a personal message. Give your customers such a surprise and they’ll want to talk about it and about, more importantly, its sender.

In today’s world of digital communication, a handwritten note stands out. Sending thank-you notes is a fantastic, and very personal, way to surprise your customers. (Image source) Things To Remember When Creating A Brand Advocacy Program

We’ve just reviewed a great list of methods to boost brand advocacy. But which methods should be applied in your case? Unfortunately, when it comes to creating a brand advocacy program, there’s no silver bullet that turns customers into enthusiastic advocates. Each company has its own unique set of requirements, and it’s impossible to provide a one-size-fits-all solution. But it is still possible to provide a few general recommendations on how to create an advocacy program.

Set A Goal

Without clear goals, your chances to engage advocates decrease significantly. Before you get started, know what you want to achieve from your advocate marketing program. What do you want advocates to do?

Choose advocacy goals that align with your overall business objectives. For example, if your top business goal is to increase conversions, then one of your top advocacy goals could be to get more high-quality referrals.

Here are a few common goals:

  • Higher brand engagement
    The number of comments, likes and mentions on your channels is a signifier of success.
  • Higher conversion rates
    Get more high-quality referrals that result in increased sales.
  • Better brand awareness
    By tracking keywords associated with your brand, you’ll know how often people mention your brand and in what context.

Quick tip: Use the S.M.A.R.T. goal-setting program to set the most effective goals possible. The goals you define should be specific, measurable, attainable, relevant and timely.

Measure The Outcome

When it comes to measuring the outcome of an advocacy program, many teams use NPS (Net Promoter Score) as a key metric. NPS is computed by asking users to answer, “How likely are you to recommend this product to a friend or relative? Rate it on a scale from 0 to 10.” The answers are then grouped into three categories:

  • Detractors: responses of 0 to 6, which indicate dissatisfaction.
  • Passives: responses of 7 or 8, which indicate moderate satisfaction.
  • Promoters: responses of 9 or 10, which indicate high satisfaction and a strong likelihood of recommendation.

The NPS is then calculated by subtracting the percentage of detractors from the percentage of promoters. The NPS can range from -100% (only detractors) to +100% (only promoters).

The Net Promoter Score (NPS) is an index ranging from -100 to 100 that measures the willingness of customers to recommend a company’s products to others.

While NPS is an excellent base level for measuring customer satisfaction and loyalty, don’t use NPS as a key performance indicator. Jared Spool provides a few valid arguments on why NPS can be considered harmful to business. Figure out the more reliable and actionable ways to measure how customers feel about your brand and its offerings.

Also, when it comes to evaluating your advocacy program, focus on measuring retention, not conversion. Customer retention refers to a business’ ability to keep a customer over a specified period of time. Your retention rate can tell you a lot about your user base.

Here are three metrics that can help you measure it:

  • Customer retention rate
    The customer retention rate indicates what percentage of customers have stayed with you over a given period of time. While there’s no standard formula for calculating a customer retention rate, Jeff Haden shares a simple way to measure it. Customer retention rate = ((CE – CN) / CS)) x 100, where CE is the number of customers at the end of a period, CN is the number of new customers acquired during a period of time, and CS is the number of customers at the start of a period of time. A business with a low customer retention rate is like a bucket of water with holes in it.
  • Customer lifetime value
    The customer lifetime value is a projection of revenue a business can expect from a customer relationship. Knowing the lifetime value of a customer will help you determine how much money you can spend on customer acquisition; it also enables you to calculate your return on investment (ROI). A customer’s acquisition costs being higher than their lifetime value will often cause problems.
Customer lifetime value (Image source)
  • Referral rate
    If a business runs a referral program, customer referrals are the ultimate proof of your advocacy program. Referral rate = number of coupons redeemed / number of coupons issued. If any user has a personal coupon they can share with friends and family, the formula can be even more straightforward: referral rate = number of coupons redeemed / total number of users.

Think of brand advocates as your new sales team. They have tremendous brand value, they drive awareness, and they are capable of persuading people to consider your product. By focusing your efforts on developing brand advocates, you will see an increase in your company’s growth.

This article is part of the UX design series sponsored by Adobe. Adobe XD tool is made for a fast and fluid UX design process, as it lets you go from idea to prototype faster. Design, prototype and share — all in one app. You can check out more inspiring projects created with Adobe XD on Behance, and also sign up for the Adobe experience design newsletter to stay updated and informed on the latest trends and insights for UX/UI design.

(ms, al, il)
Categories: Web Design

Creating Stylish and Responsive Progress Bars Using ProgressBar.js

Tuts+ Code - Web Development - Mon, 06/11/2018 - 06:34

Nothing on the web happens instantly. The only difference is in the time it takes for a process to complete. Some processes can happen in a few milliseconds, while others can take up to several seconds or minutes. For example, you might be editing a very large image uploaded by your users, and this process can take some time. In such cases, it is a good idea to let the visitors know that the website is not stuck somewhere but it is actually working on your image and making some progress.

One of the most common ways to show readers how much a process has progressed is to use progress bars. In this tutorial, you will learn how to use the ProgressBar.js library to create different progress bars with simple and complex shapes.

Creating a Basic Progress Bar

Once you have included the library in your project, creating a progress bar using this library is easy. ProgressBar.js is supported in all major browsers, including IE9+, which means that you can use it in any website you are creating with confidence. You can get the latest version of the library from GitHub or directly use a CDN link to add it in your project.

To avoid any unexpected behavior, please make sure that the container of the progress bar has the same aspect ratio as the progress bar. In the case of a circle, the aspect ratio of the container should be 1:1 because the width will be equal to the height. In the case of a semicircle, the aspect ratio of the container should be 2:1 because the width will be double the height. Similarly, in the case of a simple line, the container should have an aspect ratio of 100:strokeWidth for the line.

When creating progress bars with a line, circle, or semicircle, you can simply use the ProgressBar.Shape() method to create the progress bar. In this case, the Shape can be a Circle, Line, or SemiCircle. You can pass two parameters to the Shape() method. The first parameter is a selector or DOM node to identify the container of the progress bar. The second parameter is an object with key-value pairs which determine the appearance of the progress bar.

You can specify the color of the progress bar using the color property. Any progress bar that you create will have a dark gray color by default. The thickness of the progress bar can be specified using the strokeWidth property. You should keep in mind that the width here is not in pixels but in terms of a percentage of the canvas size. For instance, if the canvas is 200px wide, a strokeWidth value of 5 will create a line which is 10px thick.

Besides the main progress bar, the library also allows you to draw a trailing line which will show readers the path on which the progress bar will move. The color of the trail line can be specified using the trailColor property, and its width can be specified using the trailWidth property. Just like strokeWidth, the trailWidth property also computes the width in percentage terms.

The total time taken by the progress bar to go from its initial state to its final state can be specified using the duration property. By default, a progress bar will complete its animation in 800 milliseconds.

You can use the easing property to specify how a progress bar should move during the animation. All progress bars will move with a linear speed by default. To make the animation more appealing, you can set this value to something else like easeIn, easeOut, easeInOut, or bounce.

After specifying the initial parameter values, you can animate the progress bars using the animate() method. This parameter accepts three parameters. The first parameter is the amount up to which you want to animate the progress line. The two other parameters are optional. The second parameter can be used to override any animation property values that you set during initialization. The third parameter is a callback function to do something else once the animation ends.

In the following example, I have created three different progress bars using all the properties we have discussed so far.

var lineBar = new ProgressBar.Line('#line-container', { color: 'orange', strokeWidth: 2, trailWidth: 0.5 }); lineBar.animate(1, { duration: 1000 }); var circleBar = new ProgressBar.Circle('#circle-container', { color: 'white', strokeWidth: 2, trailWidth: 10, trailColor: 'black', easing: 'easeInOut' }); circleBar.animate(0.75, { duration: 1500 }); var semiBar = new ProgressBar.SemiCircle('#semi-container', { color: 'violet', strokeWidth: 2, trailWidth: 0.5, easing: 'bounce' }); semiBar.animate(1, { duration: 3000 });

Animating Text Values With the Progress Bar

The only thing that changes with the animation of the progress bars in the above example is their length. However, ProgressBar.js also allows you to change other physical attributes like the width and color of the stroking line. In such cases, you will have to specify the initial values for the progress bar inside the from parameter and the final values inside the to parameter when initializing the progress bars.

You can also tell the library to create an accompanying text element with the progress bar to show some textual information to your users. The text can be anything from a static value to a numerical value indicating the progress of the animation. The text parameter will accept an object as its value. 

This object can have a value parameter to specify the initial text to be shown inside the element. You can also provide a class name to be added to the text element using the className parameter. If you want to apply some inline styles to the text element, you can specify them all as a value of the style parameter. All the default styles can be removed by setting the value of style to null. It is important to remember that the default values only apply if you have not set a custom value for any CSS property inside style.

The value inside the text element will stay the same during the whole animation if you don't update it yourself. Luckily, ProgressBar.js also provides a step parameter which can be used to define a function to be called with each animation step. Since this function will be called multiple times each second, you need to be careful with its use and keep the calculations inside it simple.

var lineBar = new ProgressBar.Line("#line-container", { strokeWidth: 4, trailWidth: 0.5, from: { color: "#FF9900" }, to: { color: "#00FF99" }, text: { value: '0', className: 'progress-text', style: { color: 'black', position: 'absolute', top: '-30px', padding: 0, margin: 0, transform: null } }, step: (state, shape) => { shape.path.setAttribute("stroke", state.color); shape.setText(Math.round(shape.value() * 100) + ' %'); } }); lineBar.animate(1, { duration: 4000 }); var circleBar = new ProgressBar.Circle("#circle-container", { color: "white", strokeWidth: 2, trailWidth: 25, trailColor: "black", easing: "easeInOut", from: { color: "#FF9900", width: 1 }, to: { color: "#FF0099", width: 25 }, text: { value: '0', className: 'progress-text', style: { color: 'black', position: 'absolute', top: '45%', left: '42%', padding: 0, margin: 0, transform: null } }, step: (state, shape) => { shape.path.setAttribute("stroke", state.color); shape.path.setAttribute("stroke-width", state.width); shape.setText(Math.round(shape.value() * 100) + ' %'); } }); circleBar.animate(0.75, { duration: 1500 }); var semiBar = new ProgressBar.SemiCircle("#semi-container", { color: "violet", strokeWidth: 2, trailWidth: 8, trailColor: "black", easing: "bounce", from: { color: "#FF0099", width: 1 }, to: { color: "#FF9900", width: 2 }, text: { value: '0', className: 'progress-text', style: { color: 'black', position: 'absolute', top: '45%', left: '50%', padding: 0, margin: 0, transform: null } }, step: (state, shape) => { shape.path.setAttribute("stroke", state.color); shape.path.setAttribute("stroke-width", state.width); shape.setText(Math.round(shape.value() * 100) + ' %'); } }); semiBar.animate(0.75, { duration: 2000 });

Creating Progress Bars With Custom Shapes

Sometimes, you might want to create progress bars with different shapes that match the overall theme of your website. ProgressBar.js allows you to create progress bars with custom shapes using the Path() method. This method works like Shape() but provides fewer parameters to customize the progress bar animation. You can still provide a duration and easing value for the animation. If you want to animate the color and width of the stroke used for drawing the custom path, you can do so inside the from and to parameters.

The library does not provide any way to draw a trail for the custom path, as it did for simple lines and circles. However, you can create the trail yourself fairly easily. In the following example, I have created a triangular progress bar using the Path() method.

Before writing the JavaScript code, we will have to define our custom SVG path in HTML. Here is the code I used to create a simple triangle:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0" y="0" width="300" height="300" viewBox="0 0 300 300"> <path d="M 50 50 L 200 100 L 200 300 z" fill="none" stroke="#ddd" stroke-width="1"/> <path id="triangle" d="M 50 50 L 200 100 L 200 300 z" fill="none" stroke="blue" stroke-width="5"/> </svg>

You might have noticed that I created two different path elements. The first path has a light gray color which acts like the trail we saw with simple progress bars in the previous section. The second path is the one that we animate with our code. We have given it an id which is used to identify it in the JavaScript code below.

var path = new ProgressBar.Path("#triangle", { duration: 6000, from: { color: "#ff0000", width: 2 }, to: { color: "#0099ff", width: 10 }, strokeWidth: 4, easing: "easeInOut", step: (state, shape) => { shape.path.setAttribute("stroke", state.color); shape.path.setAttribute("stroke-width", state.width); } }); path.animate(1);

Final Thoughts

As you saw in this tutorial, ProgressBar.js allows you to easily create different kinds of progress bars with ease. It also gives you the option to animate different attributes of the progress bar like its width and color. 

Not only that, but you can also use this library to change the value of an accompanying text element in order to show the progress in textual form. This tutorial covers everything that you need to know to create simple progress bars. However, you can go through the documentation to learn more about the library.

If there is anything that you would like me to clarify in this tutorial, feel free to let me know in the comments.

Categories: Web Design