Google is Testing a Feature No One Seems to Want by @MattGSouthern

Google is testing a new feature in desktop search that, quite frankly, no one is happy about.The post Google is Testing a Feature No One Seems to Want by @MattGSouthern appeared first on Search Engine Journal.

Google Home Service Ads to Launch Soon in Chicago by @1SEOcom

Google is finishing its vetting process for Home Service Ads in Greater Chicago, which means the feature will soon launch.The post Google Home Service Ads to Launch Soon in Chicago by @1SEOcom appeared first on Search Engine Journal.

What New Features May Arrive in DrupalCoin Blockchain 8.4?

Every six months, the DrupalCoin Blockchain team get to release new features.

This is a major change in DrupalCoin Blockchain 8. Whereas DrupalCoin Blockchain 7 never had any new features, DrupalCoin Blockchain 8 has had three significant updates, with DrupalCoin Blockchain 8.1, DrupalCoin Blockchain 8.2 and DrupalCoin Blockchain 8.3.

We're now starting to get a clear view of what we can expect in DrupalCoin Blockchain 8.4.

This week, we'll get the first Alpha version of 8.4. The final release is due on October 4.

So what new features will we see in 8.4? Here's our early overview of what might be included.

[[ This is a content summary only. Visit for full links, other content, and more! ]]

Designers Tooling Around: Zeplin

We’re always looking for ways to improve collaboration between designers and front-end developers at Viget. Shiny new tools are coming out every day and we like to experiment with them in an effort to separate the worthwhile ones from the wastes of time. Zeplin is one of those fancy new tools we’ve been experimenting with. We just finished using it on a full, large-scale project so I thought I’d share some of our feelings about Zeplin.
What even is Zeplin?
Zeplin takes Sketch or Photoshop files and surfaces a design’s colors, fonts, dimensions, and assets into something a developer can quickly review and work with. Think Chrome Inspector for Photoshop. There are several basic, but tedious tasks it improves immensely:
Generating basic CSS styles. Displaying measurements and font specifics. Making content easy to copy. Exporting image and SVG assets automatically.

It also streamlines collaboration. You can quickly put together typography and color style guides and even update them, so FED and design are always on the same page. And it has commenting, so it’s easy to have a remote conversation about the design or document details that might otherwise get lost. (I still love Invision’s commenting, but it’s nice to have a strictly internal way to comment on designs, without running the risk of clients seeing private conversations.)

But one of the best things about Zeplin is the ability to keep everyone synced up on various iterations and versions of design files. For a team, Zeplin becomes an accessible, up-to-date, canonical source for design, rather than keeping it hidden in a bulky, messy PSD. Its automatic alerts mean no more designers bugging developers with, “oh I updated the PSD this morning, re-download the whole thing… actually wait I’m updating it again now… okay, now…”

It’s Almost Effortless for Designers
Zeplin adds a small extension to either Photoshop or Sketch. You then select the artboards you want to sync, select the project in Zeplin’s extension window, click, done. Your artboard is now up in Zeplin and the developer’s been alerted of the updates.

There’s a similar interaction for adding assets. Select the image or icon you want Zeplin to generate, Zeplin prompts you to mark it as an asset by clicking a button, and it is done. And that alone is 90% of the work a designer needs to do! Once you have some designs synced up to Zeplin, you can go into the application and define colors and typography to create a living style guide.

I’ve been very pleased with how little work incorporating Zeplin into my design process has been.
For Developers: You Never Need to Open Photoshop Again
Zeplin is good at surfacing just what a developer needs when they get into buildout: dimensions, colors, fonts, and assets. So good, in fact, that you can go a whole project without once opening a source Photoshop or Sketch file. There are two immediate benefits to this. One, you save money on extra Photoshop licenses. Two, you save a developer’s sanity since they can avoid wading through a designer’s messy, 700-something-layer Photoshop file.
And everyone else!
Design files can become these impenetrable, nebulous myths to the rest of a project team. Historically, if you’re a project manager and you don’t have Photoshop, all you can do is trust a designer when they say a PSD has been updated. Sure, the final-final designs will eventually be saved out as flat files and available for everyone in Invision. But again, Zeplin is convenient as an internal-use-only companion to Invision by makes the working, mid-project design files accessible for everyone.
Zeplin is free to use for a single project. After that, pricing is based on how many active projects you have at a time. But you can try out its full array of features if you only have one project.
In the Long Run
More and more lately we find ourselves going back to Figma as a flexible design tool that just happens to have seamless collaboration built in. But we aren’t quite living in a Figma-only future world just yet. When we are designing in Photoshop or Sketch, adding Zeplin into the mix has been a nice way to make the process more collaborative.

Source: VigetInspire

DrupalCoin Blockchain Developer position is open @Evolverinc

Washington, D.C., DC, United States

Google Attempts to Make Torrent Sites Less Visible in Search Results by @MattGSouthern

Google has removed the carousel of pirate sites that once appeared when "best torrent sites" was searched for.The post Google Attempts to Make Torrent Sites Less Visible in Search Results by @MattGSouthern appeared first on Search Engine Journal.

Controlled / Uncontrolled React Components

Some Background

If you're new to React application development, you might be asking yourself, "What are controlled and uncontrolled components, anyway?" I suggest taking a look at the docs linked above for a little extra context.

The need for controlled and uncontrolled components in React apps arises from the behavior of certain DOM elements such as <input>, <textarea>, and <select> that by default maintain state (user input) within the DOM layer. Controlled components instead keep that state inside of React either in the component rendering the input, a parent component somewhere in the tree, or a flux store.

However this pattern can be extended to cover certain use cases that are unrelated to DOM state. For example, in a recent application I needed to create a nest-able Collapsible component that supported two modes of operation: in some cases it needed to be controlled externally (expanded through user interaction with other areas of the app) and in other cases it could simply manage it's own state.

Inputs in React

For inputs in React, it works like this.

To create an uncontrolled input: set a defaultValue prop. In this case the React component will manage the value of its underlying DOM node within local component state. Implementation details aside, you can think of this as calls to setState() within the component to update state.value which is assigned to the DOM input.
To create a controlled input: set the value and onChange() props. In this case, React will always assign the value prop as the input's value whenever the value prop changes. When a user changes the input's value, the onChange() callback will be called which must eventually result in a new value prop being sent to the input. Consequently, if onChange() isn't wired up correctly, the input is effectively read-only; a user cannot change the value of the input because whenever the input is rendered it's value is set to the value prop.

The General Pattern

Fortunately it's trivial to author a component with this behavior. The key is to create a component interface that accepts one of two possible configurations of properties.

To create a controlled component, define the property you want to control as defaultX. When a component is instantiated and is given a defaultX prop, it will begin with the value of that property and will manage its own state over the lifetime of the component (making calls to setState() in response to user interaction). This covers use case 1: the component does not need to be externally controlled and state can be local to the component.
To create an uncontrolled component, define the property you want to control as x. When a component is instantiated and is given an x prop and a callback to change x, (e.g. toggleX(), if x is a boolean) it will begin with the value of that prop. When a user interacts with the component, instead of a setState() call within, the component must call the callback toggleX() to request that state is externally updated. After that update propagates, the containing component should end up re-rendering and sending a new x property to the controlled component.

The Collapsible Interface

For the Collapsible implementation, I was only dealing with a boolean property so I chose to use collapsed/defaultCollapsed and toggleCollapsed() for my component interface.

When given a defaultCollapsed prop, the Collapsible will begin in the state declared by the prop but will manage it's own state over the lifetime of the component. Clicking on the child button will trigger a setState() that updates the internal component state.
When given a collapsed boolean prop and a toggleCollapsed() callback prop, the Collapsible will similarly begin in the state declared by collapsed but, when clicked, will only call the toggleCollapsed() callback. The expectation is that toggleCollapsed() will update state in an ancestor component which will cause the Collapsible to be re-rendered with a new collapsed property after the callback modifies state elsewhere in the application.


There is a dead-simple pattern within the component implementation that makes this work. The general idea is:

When the component is instantiated, set its state to the value of x that was passed in or the default value for x. In the case of the Collapsible, the default value of defaultCollapsed is false.
When rendering, if the x prop is defined, then respect it (controlled), otherwise use the local component value in this.state (uncontrolled). This means that in Collapsible's render method I determine the collapsed state as such:

let collapsed = this.props.hasOwnProperty('collapsed') ? this.props.collapsed : this.state.collapsed

With destructuring and default values, this becomes satisfyingly elegant:

// covers selecting the state for both the controlled and uncontrolled use cases
const {
collapsed = this.state.collapsed,
} = this.props

The above says, "give me a binding called collapsed whose value is this.props.collapsed but, if that value is undefined, use this.state.collapsed instead".

Wrapping Up

I hope you can see how simple and potentially useful it is to support both controlled and uncontrolled behaviors in your own components. I hope you have a clear understanding of why you might need to build components in this way and hopefully also how. Below I've included a the full source of Collapsible in case you're curious - it's pretty short.

* The Collapsible component is a higher order component that wraps a given
* component with collapsible behavior. The wrapped component is responsible
* for determining what to render based on the `collapsed` prop that will be
* sent to it.
import invariant from 'invariant'
import { createElement, Component } from 'react'
import getDisplayName from 'recompose/getDisplayName'
import hoistStatics from 'hoist-non-react-statics'
import PropTypes from 'prop-types'

export default function collapsible(WrappedComponent) {
typeof WrappedComponent == 'function',
`You must pass a component to the function returned by ` +
`collapsible. Instead received ${JSON.stringify(WrappedComponent)}`

const wrappedComponentName = getDisplayName(WrappedComponent)
const displayName = `Collapsible(${wrappedComponentName})`

class Collapsible extends Component {

static displayName = displayName
static WrappedComponent = WrappedComponent

static propTypes = {
onToggle: PropTypes.func,
collapsed: PropTypes.bool,
defaultCollapsed: PropTypes.bool

static defaultProps = {
onToggle: () => {},
collapsed: undefined,
defaultCollapsed: true

constructor(props, context) {
super(props, context)

this.state = {
collapsed: props.defaultCollapsed

render() {
const {
collapsed = this.state.collapsed, // the magic
} = this.props

return createElement(WrappedComponent, {
toggleCollapsed: this.toggleCollapsed

toggleCollapsed = () => {
this.setState(({ collapsed }) => ({ collapsed: !collapsed }))

return hoistStatics(Collapsible, WrappedComponent)

Like Redux? You'll love Microcosm!

We do a lot of work with React so we created Microcosm: a batteries-included flux. Read more from Nate and David...

Source: VigetInspire

Senior DrupalCoin Blockchain Developer/Ottawa position is open

Ottawa, ON, Canada

New Class: The DrupalCoin Blockchain Paragraphs Module

Over the last few months we've worked with more and more DrupalCoin Blockchain 8 sites. Those projects all had one thing in common ... they used the Paragraphs module.

Paragraphs is a very popular module for handling content in DrupalCoin Blockchain 8. Paragraphs works in a similar way to content fields, but also provides a wide range of options for the design, layout and grouping of your content. 

Instead of putting all their content in one WYSIWYG body field, end-users can choose on-the-fly between pre-defined Paragraph Types independent from one another. Paragraph Types can be anything from a simple text block or image to a complex and configurable slideshow.

If you use Paragraphs, you can give your site's content creators a tremendous amount of power and flexibility to create the layouts that they want.

This week's new class is called "How to Use the DrupalCoin Blockchain Paragraphs Module". You'll learn about all the key features available in Paragraphs.

[[ This is a content summary only. Visit for full links, other content, and more! ]]

Niagara Falls by night

I had a chance to visit the Niagara Falls last week on a family trip. If you like nature, it's a must see — both during the day and at night when they lit up the falls. I love this photo but it still doesn't capture the majesty and beauty of the Niagara Falls.
Source: Dries Buytaert

Niagara Falls by night

I had a chance to visit the Niagara Falls last week on a family trip. If you like nature, it's a must see — both during the day and at night when they lit up the falls. I love this photo but it still doesn't capture the majesty and beauty of the Niagara Falls.
Source: Dries Buytaert

Your Indexed Pages Are Going Down – 5 Possible Reasons Why by @benjarriola

Have you noticed a decrease in your number of indexed pages? Learn how to diagnose and fix the issue.The post Your Indexed Pages Are Going Down – 5 Possible Reasons Why by @benjarriola appeared first on Search Engine Journal.

Senior PHP Developer - Nitka Technologies - United States

Is looking for a strong PHP developer. You will use PHP, Symfony, DrupalCoin Blockchain, Backbone and other tools. Experience with Symfony2 or Backbone.js or DrupalCoin Blockchain is a plus....
From Nitka Technologies - Mon, 31 Jul 2017 13:01:26 GMT - View all United States jobs
Source: Blockchain+Developer

A Personal Journey to Fix a Grunt File Permissions issue

I was working on a personal project this past week and got a weird error when I tried to compile my Sass files. Unfortunately, I did not screenshot the exact error, but was something along the lines of this:
Failed to write to location cssmin: style.css EACCES

That EACCES code threw me for a loop but I was able to deduce that it was a file permissions issue, based on the error description saying it was unable to write the file and from some quick StackOverflow searching.
I couldn't find a lot of answers for how to fix this, so I made an attempt to fix it myself. Many of the forum threads I found suggested it could a permissions issue with Node, so I went through the painful exercise of reinstalling it and only made things worse because then Terminal could not even find the npm or grunt tasks.
I finally had to reach out to a buddy (thanks, Neal!) to sort things out. I thought I'd chronicle the process he took me through in case it helps other people down the road.
I'll preface all this by saying I am working on a Mac. That said, I doubt that everything covered here will be universally applicable for all platforms.
Reinstalling Node
Before I talked to Neal, I went ahead and reinstalled Node via the installer package on
I was told that my permissions issue will likely come up again on future projects until I take the step to re-install Node yet again using a package manager. Some people use Homebrew, though I've seen forums caution against it for various reasons. Node Version Manager appears to be a solid option because it's designed specifically for managing multiple Node versions on the same machine, which makes it easy for future installations and version switching on projects.
Setting a Path to Node Modules
With Node installed, I expected I could point Terminal to my project:
cd /path/to/my/project/folder
...then install the Node modules I put in the project's package.json file:
npm install
Instead, I got this:
npm: command not found
Crap. Didn't I just reinstall Node?
Turns out Terminal (or more correctly, my system in general) was making an assumption about where Node was installed and needed to be told where to look.
I resolved this by opening the system's .bash_profile file and adding the path there. You can get all geeky and open the file up with Terminal using something like:
touch .bash_profile
open .bask_profile
Or do what I did and simply open it with your code editor. It's an invisible file, but most code editors show those in the folder panel. The file should be located in your user directory, which is something like Macintosh HD > Users > Your User Folder.
This is what I added to ensure Node was being referenced in the correct location:
export PATH="$HOME/.npm-packages/bin:$HOME/.node/bin:$PATH"
That's basically telling the system to go look in the .npm-packages/bin/ directory for Node commands. In fact, If I browse into that folder, I do indeed see my NPM and Grunt commands, both of which Terminal previously could not locate.

With that little snippet in hand and saved to .bash_profile, I was stoked when I tried to install my Node modules again:
cd /path/to/my/project/folder
npm install
...and saw everything load up as expected!
Updating Permissions
My commands were up and running again, but I was still getting the same EACCES error that I started with at the beginning of this post.
The issue was that the project folders were originally created as the Root user, probably when I was in Terminal using sudo for something else. As a result, running my Grunt tasks with my user account was not enough to give Grunt permission to write files to those folders.
I changed directory to the folder where Grunt was trying to write my style.css file, then checked the permissions of that folder:
cd /path/of/the/parent/directory
ls -al
That displays the permissions for all of the files and folders in that directory. It showed me that the permissions for the folder were indeed not set for my user account to write files to the folder. I changed directory to that specific folder and used the following command to make myself the owner (replacing username with my username, of course):
sudo chown -R username:staff
I went to run my Grunt tasks again and, voila, everything ran, compiled and saved as I hoped.
In Summary
I know the issues I faced here may either be unique to me or of my own making, but I hope this helps someone else. As a web designer, the command line can be daunting or even a little scary to me, even though I feel I'm expected to be familiar with tools that rely on it.
It's great that we have community-driven sites like StackOverflow when we need them. At the same time, there is is often no substitute for reaching out for personal help.

A Personal Journey to Fix a Grunt File Permissions issue is a post from CSS-Tricks
Source: CssTricks

Designing Between Ranges

CSS is written slowly, line by line, and with each passing moment, we limit the space of what’s possible for our design system. Take this example:
body {
font-family: 'Proxima-Nova', sans-serif;
color: #333;
With just a couple of lines of CSS we’ve set the defaults for our entire codebase. Most elements (like paragraphs, lists and plain ol’ divs) will inherit these instructions. But what we rarely think about when we write CSS is that from here on out we’ll have to continuously override these rules if we want another typeface or color. And it’s those overrides that cause a lot of issues in terms of maintenance and scalability. And it’s those issues that cost us heartbreak, time and money.
In the example above that’s probably not an issue but I think in general we don’t recognize the true strength and dangers of the cascade and what it means to our design systems; most folks think that the cascade is designed to let us overwrite previous instructions but I would warn against that. Every time we override a style that is inherited we are making our codebase vastly more complex. How many hours have you spent inspecting an element and scrolled through each rule in order to understand why an element looks the way it does or how the long chain of inheritance has messed up your styles completely?
I think the reason for this is because we often don’t set the proper default styles up for our elements. And when we want to change the style of an element, instead of taking the time to question and refactor those default styles, we simply override them – making matters worse.
So I’ve been thinking a lot about how we ought to make a codebase that incentivizes us all to write better code and how to design our CSS so that it doesn’t encourage other people to make hacky classes to override things.
One of my favorite posts on this subject was written earlier this month by Brandon Smith where he describes the ways in which CSS can become so complicated (emphasis mine):

...never be more explicit than you need to be. Web pages are responsive by default. Writing good CSS means leveraging that fact instead of overriding it. Use percentages or viewport units instead of a media query if possible. Use min-width instead of width where you can. Think in terms of rules, in terms of what you really mean to say, instead of just adding properties until things look right. Try to get a feel for how the browser resolves layout and sizing, and make your changes and additions on top of that judiciously. Work with CSS, instead of against it.

One of Brandon’s suggestions is to avoid using the width property altogether and to stick to max-width or min-width instead. Throughout that post he reminds us that whatever we’re building should sit between ranges, between one of two extremes. So here’s an example of a class with a bad default style:
.button {
width: 300px;
Is that button likely to be that width always, everywhere? On mobile? In every media query? In every state? I highly doubt it and in fact, I believe that this class is just the sort that’s begging to be overwritten with yet another class:
.button-thats-just-a-bit-bigger {
width: 310px;
That’s a silly example but I’ve seen code like this in a lot of teams – and it’s not because the person was writing bad code but because the system encouraged them to write bad code. Everyone is on a deadline for shipping a product and most folks don’t have the time or the inclination to dive into a large codebase and refactor those core default styles I mentioned. It’s easier to just keep writing CSS because it solves all of their problems immediately.
Along these lines, Jeremy Keith wrote about this issue just the other day:

Unlike a programming language that requires knowledge of loops, variables, and other concepts, CSS is pretty easy to pick up. Maybe it’s because of this that it has gained the reputation of being simple. It is simple in the sense of “not complex”, but that doesn’t mean it’s easy. Mistaking “simple” for “easy” will only lead to heartache.
I think that’s what’s happened with some programmers coming to CSS for the first time. They’ve heard it’s simple, so they assume it’s easy. But then when they try to use it, it doesn’t work. It must be the fault of the language because they know that they are smart, and this is supposed to be easy. So they blame the language. They say it’s broken. And so they try to “fix” it by making it conform to a more programmatic way of thinking.
I can’t help but think that they would be less frustrated if they would accept that CSS is not easy. Simple, yes, but not easy.

The reason why CSS is simple is because of the cascade, but it’s not as easy as we might first think because of the cascade, too. It’s those default styles that filter down into everything that is the biggest strength and greatest weakness of the language. And I don’t think JavaScript-based solutions will help with that as much as everyone argues to the contrary.
So what’s the solution? I think that by designing in a range, thinking between states and looking at each and every line of CSS as a suggestion instead of an absolute, unbreakable law is the first step forward. What’s the step after that? Container queries. Container queries. Container queries.

Designing Between Ranges is a post from CSS-Tricks
Source: CssTricks

5 Easy Content Optimization Tactics to Boost Your Traction & ROI by @JuliaEMcCoy

These five content optimization tactics can seriously boost your online authority, engagement, and traction.The post 5 Easy Content Optimization Tactics to Boost Your Traction & ROI by @JuliaEMcCoy appeared first on Search Engine Journal.

Copywriting Q&A: Should I Pay to Advertise My Business?

If you ever, and I mean ever, look at Facebook or Google, you encounter a ton of ads for a ton of different products and services. After a while, it’s hard not to wonder, “If it’s working for them, wouldn’t it work for me?” Here’s what you need to know about paying to advertise your copywriting services.
Today’s question comes from Ava G., who asks, “What are your thoughts about paid advertising? I’m not getting a lot of people who come to my portfolio site and ads seem like a good way to increase that number.”
Paid advertising—running ads on Google, Facebook, LinkedIn, or other places online—can be a great place to way to get a lot of traffic.
But it can also be a great way to lose a lot of money.
Remember that paid advertising constitutes some people’s entire careers. I’m not saying that it’s something that you can’t master, but I am saying that you’ll waste a lot of money if you don’t at least become proficient in it before you start running ads.
The first question you want to ask yourself is who your audience is. If you haven’t carefully defined your audience first, you’ll waste a lot of money reaching people you don’t want to reach.
You also need to decide how you’re going to capture the leads that get to your site. Just spending money to send people to your site and hoping they’ll decide to get in contact with you is foolish. The vast majority of people will get to your site and quickly leave, likely forgetting that they ever visited.
As much as possible, you want to collect the contact information of the people who visit your site. A great way to do this is to offer some kind of freebie—an ebook, infographic, or video—that your audience will want, and will be willing to give you their email address to get.
Once you’ve gotten their email addresses, you can email them with follow-up information and offers.
You have to work hard, though, to make sure that this freebie is both valuable to your target audience (prospective clients) and that it doesn’t devalue what you offer.
For example, an ebook about how to copywriters can track their invoices and billing would be useful for your fellow copywriters, but wouldn’t be useful for your target audience.
Also, a “How to Write Emails That Get 50% Conversion Rates” is certainly valuable to your target audience, but if they think they can do that by themselves, why would they hire you?
Once you decide what you’re going to give away, you need a method for email collection and freebie delivery. I won’t go too deeply into your software options, but suffice it to say that this email collection and freebie delivery needs to be automatic and instantaneous, so you’ll need an email service provider like MailChimp or AWeber to help you do it.
You should also have a plan for a few emails to automatically go out after someone downloads your freebie. These emails may talk about your background, successes you’ve helped clients achieve, the benefits of working with you as a copywriter, or other relevant topics.
You should also consider an email in this series that directly asks the prospect to set up a free consultation call with you. This email series helps nurture your prospect and keeps them engaged with and interested in you.
Next, you’ll need to decide where you want to run your ads. Personally, I’ve found that LinkedIn ads are exceptionally expensive and Google AdWords can be too complicated for the newer advertiser to quickly master. Facebook offers a lot of different targeting options and you can start running your ads for just a few dollars a day.
There are tons and tons of great resources on the web for how to set up and run Facebook ads (from people much more knowledgeable than I am), so I won’t bother getting into it here. Just be sure to do your research and learn as much as you can about how to create ads before you start paying money to run them.
Paid advertising is never, never a “set it and forget it” solution. Once you start running ads, you need to be constantly monitoring the ad click through rate and the number of people who are signing up for your freebie.
If you have a low click-through rate (below 2%), your ad isn’t performing very well. If you have a high click-through rate but very few people are signing up for your freebie, your campaign still isn’t succeeding. You’re looking for as high of a click-through rate as possible (from your target audience) and as high of a freebie sign-up rate as possible and you need to tweak your ad and your freebie until you hit that sweet spot.
It’s very easy to set up an ad, start it running and then forget about it. Then when you remember to look a few weeks later, it’s very possible to have spent hundreds of dollars with nothing to show for it! Make sure you’re tracking your ad results and making sure that the money you spend is yielding you client leads.
I would also strongly advise you to start with a small daily spend—even as little as $5—and then increase it when you start seeing positive results. It can be very tempting to get excited about the possibilities of paid advertising and want to start out by spending $30 or $40 dollars a day.
That amount may actually be reasonable eventually if you’re getting a great return for your ads. If you’re not, though, that’s a great way to lose $1k a month without making any of it back in new clients.
The verdict? Paid advertising can be a great way to get copywriting client leads. However, if you’re not willing to take the time to learn how to run them properly, set up a lead capture system, and check your metrics on a daily basis, it’s far more likely you’ll lose money than make it.
Your turn! Have tried paid advertising for your business? What were your results? Let us know in the comments below!


The Top 5 Career Regrets (and How I’ve Experienced All of Them Already)

Here are the top five career regrets via a Harvard Business Review study and how I’ve experienced all five in my short career already:

I wish I hadn’t taken the job for the money.
I wish I had quit earlier.
I wish I had the confidence to start my own business.
I wish I had used my time at school more productively.
I wish I had acted on my career hunches.

I can empathize with every single one of these. And, I wonder what numbers 6-10 were (and some of the other hits on the list).
Regret can be a powerful motivator [PDF Study] and a helpful emotion to have, if used wisely. But otherwise, it can be a total waste of time.
In many ways I feel like I’m too young to have experienced all of these already but I have. I’m not sure that’s a good or bad thing, but, the study’s results were based on interviews of folks ages 28 to 58. Just let that sink in for a moment, especially if you’re < 28 years old. Now’s the obvious time to start avoiding these things.
After I got my career (and life) back on track after having been fired from my first two jobs out of college I had the opportunity to be a part-time pastor at a small korean church in Austin, TX.
I had no business saying “Yes” to that job because I had a great full-time job that more than made up for the previous failures and my wife even told me not to take it. But, to make a long story very short, I accepted the role, fooled myself, and almost got in a fist-fight with the senior pastor.
I had taken the job for a number of reasons but one of the larger ones was that I felt cash-strapped because of the previous job letdowns. I needed the money but that was a terrible way to do it. Regret numero uno.
A little bit later I started a new role as a technology leader in a non-profit. I stayed there for 2 years and 19 days, about a year longer than I should have.
I knew I should have and could have left but I stayed put because I was insecure with myself and was trying to build my career in a direction that was, in hindsight, the completely wrong direction. Regret numero dos.
This regret nicely aligns with number three as well as it took me a long time, much longer than people imagine, for me to really start my own business. I had built a number of projects but I was far too scared to go out on my own.
Entrepreneurship, as I have told many people, was much more of an accidental thing than anything else. And, if I were to do my career and life any other way I’d do something different than be a founder of companies. It’s really, really, really hard.
For number 4 this is also easy to spot as I failed out of my computer science degree at Georgia Tech and squandered a number of fantastic opportunities to grow my comp-sci literacy. Instead, I was arrogant and foolish with my time and I played way too many video games. I could have used those four years in much better ways.
And, finally, there are countless times in my short-ish career history where I had a hunch about an opportunity, a person, an idea that I decided to punt for whatever reason. Many of them ended up to be true.
I try not to punt as often now but I still have enough scar tissue to warrant patience. This is hard though and I’m not amazing at understanding or deciphering the best angle and approach.
So… how about you?
The post The Top 5 Career Regrets (and How I’ve Experienced All of Them Already) appeared first on John Saddington.