Watsi for my birthday

Today’s my birthday! I made it another year, and I am extremely blessed, most especially by my wonderful wife Amanda and our son Kyle.

I have one request for all of you today: please consider donating to http://watsi.org/, my favorite charity. Watsi funds healthcare for those in need around the world, and does so in a radically transparent way (all of their financials are publicly visible). 100% of your donation goes directly to fund medical care; operating expenses are covered by foundations, philanthropists, and donors who leave an optional tip.

If you don’t feel called to donate or can’t afford to right now, that’s totally fine! But please share this; perhaps someone else will. And have a great day!

And if you do donate, please comment here or let me know on twitter!

Mastermind groups are awesome

Freelancing Consulting can get lonely

As a freelancer (don’t use that word!), more than likely you work alone a lot of the time. Whether that’s in a home office, from a coffee shop, or a shared office space, you’re the only one working on your business. Now, working alone can be great, of course; it means you’re the sole decision-maker, you have complete autonomy over how you run your business, you get to decide how to deal with difficult client situations, etc.

The problem is, sometimes outside input can be immensely valuable! Other people often have valuable perspectives to offer, based on their experience and their lack of emotional investment in a situation.

Having a business partner (which I do) helps with that, but even so, it can still be great to get input from another trusted source. That’s why I think being part of a mastermind group is one of the most valuable changes you can make in your business.

A little over four months ago, Michael and I joined a mastermind group with Nick, Jane, Philip, Zack, Kai, Kurt, Jeremy, and Jonathan. Joining this group has been the single most valuable change we’ve made to our business in… ever. That may sound extreme or flippant, but I believe it’s true. We continually push each other to be better at what we do, help each other communicate better with clients, deliver (and charge for!) more value, and encourage each other.

Convinced, but don’t know what to do next? Read on.

Talk to people

The only reason I’m in this mastermind group is because Nick somehow knew of me, and knew we were working on a productized consulting service (inspired by his, as a matter of fact). I think perhaps Philip also knew of me, and they colluded on starting the group, but I can’t remember the details. However, I do know that it only happened because I’d interacted with them on Twitter at various times. If not for that, none of this would have happened.

If you know a few people local to you who is also independent and at roughly the same point in their journey, great! Start talking to them and suggest you formalize things somewhat and form a mastermind group.

Don’t know anyone local? No problem. Hop on Twitter, make some connections, and ask a few folks once you’ve built a relationship with them. Don’t know anyone there? Follow me on Twitter, see who I follow, see who follows me, etc.

Once you do get a group going, if you’re not sure what to talk about (especially if you’re all fairly new), I’d suggest reading a book or two together to give you some structure. Brennan Dunn’s Double Your Freelancing Rate and Alan Weiss’ Value Based Fees are both great choices. That will give you something to talk about, and help you improve your consulting acumen and pricing fairly quickly.

Need help?

If you have any questions about starting a mastermind group, what to talk about, etc., leave a comment or shoot me an email, and I’ll help however I can.

Don’t call yourself a freelancer

The other day, I tweeted some advice to freelancers, including “don’t call yourself a freelancer.” I got a few responses asking why, so here’s an explanation.

In your clients’ minds, freelancers are inherently less valuable than [professional whatever you are]. Their neighbor’s unemployed college dropout kid who has a nice camera calls himself a freelancer. Their stoner second cousin who makes a pittance on Fiverr calls herself a freelancer. Is that who you want to be associated with?

Besides being asked why, I also got replies asking if not freelancer, then what? If you’re a writer, call yourself a writer. If you’re a designer, then say so. If there’s not a succinct term that encompasses what you do, then use “consultant” as your title.

Call yourself a professional, conduct yourself like a professional, deliver professional results, and set professional prices. You’ll enjoy your work a lot more, and earn more in the process.

Web Agency Podcast

I recently appeared on the Web Agency Podcast with Mat Newton, and had a great time. Mat and I talked about our (mine and my partner Michael’s) journey building our agency. We cover having a partnership, raising our prices, changing your mindset, conversion optimization, and much more. Give it a listen, and if you have any questions, I’d be happy to help.

Advice to a new freelancer

I’ve been exchanging emails with a friend about his career, which includes considering whether to make a stronger move toward freelancing over employment. Yesterday he asked me this:

I guess I’m more of at of a loss of where to get clients. I honestly have no idea. I was thinking there was two routes to go down. 1) work with agencies or 2) work with small businesses. I figured the agency route would be much easier from a developer point-of-view, but since I haven’t done either, I’m just guessing. Which do you work with? Have a preference? Advice?

Here’s what I said, which should be useful to others not in his specific situation as well:

We (The Bright Agency) pretty much exclusively work directly with the end client. We’ve been happy with that, but if I were starting from a blank slate, I’d be going after whatever I could find, and building some agency relationships would almost certainly be part of that. I wouldn’t advise making that a long-term strategy as I believe your profit would be very limited, but it would get some projects under your belt and pay the bills. At the same time, I’d be trying to find end-client work as well. I think I’d give Robert Williams’ Workshop a try – I haven’t paid for the service as we get enough work without it, but his content is great, and I think it’s a compelling sales pitch for someone in your position.

I’d also strongly suggest reading Double Your Freelancing Rate if you haven’t already – it has a pretty solid foundation on pricing, how you position yourself and communicate that to leads/clients, etc. I’m a big believer in moving beyond the “$xx/hour for ____ development/design service” model, and toward the “$xxx/hour or $xx,xxx/week for making your business big money” model. I’d also suggest calling yourself a “consultant”, instead of a “freelancer”. Again, it’s all about the positioning.

Setting up scheduled posts with Member Mouse

On a recent membership site we built, we had a few specific criteria for how members would be able to access content:

  1. New content is published every week on the same day of the week
  2. Each week, all members get access to the same new piece of content (as opposed to a drip schedule)
  3. Members should only be able to access content that has been published since they signed up (as opposed to all old content)

Member Mouse has support built in for protecting content on a drip schedule. With that setup, what content a member sees each week (or day, or month, etc.) depends on how long they’ve been a member. For instance, they might immediately get access to post 1 when they join, then post 2 a week later, post 3 a week after that, etc.

One benefit of a drip setup is that if you only have a set amount of content that you’ll ever publish, once you prepare it all, you’re done. The downside to that approach is that once a someone has been a member long enough to access all of the content, there’s no reason for them to continue paying. As a result, the lifetime value of a member is capped. Another drawback is that because each member isn’t seeing the same new content each week, you can’t discuss that specific piece of content when promoting the site (for instance “this week, members get XYZ – join now!”).

With all that in mind, this site needed some customizations to make the content protection work as desired. We can use Member Mouse’s built in content protection settings and grant access on day 0, but that’s not enough.

Member Mouse content protection


With that in place, when a new member joins, they’d be able to access all previously published content, which isn’t what was needed for this site. To prevent that, I simply ran a quick check to compare a member’s “days as member” value in Member Mouse to the number of days a piece of content had been published, and if it had published more than seven days prior to a member joining (well, not really – more on that in a minute), the member is redirected to an error page. Here’s the code to do that:

Remember how I mentioned that I’m not really comparing to a member’s join date above? Take a look at the “days as member” calculation. I’m not actually checking the member’s join date. Instead, I’m referencing the Member Mouse “days as member” number. The important difference there is that once a member joins, that join date can never be changed (at least not from within the Member Mouse UI). By contrast, the “days as member” number can be manually changed later on:

Member Mouse days as memberWhy does that matter? Well, the truth is, it probably doesn’t. However, I believe it’s always good to design a solution with edge cases in mind. Perhaps someone will join the site at some point, then want to pay extra to be given access to all old content. It doesn’t take any extra work to write the code in such a way that that kind of scenario is easily accommodated, and it’s one less issue that might crop up in the future.

Actually, all of the above is really just extra protection. The way we set up the site, a member shouldn’t ever actually see a link to a piece of content they aren’t allowed to access. To ensure that this is the case, we alter the query on the meal plan (the custom post type we’re protecting) archive page with the following code:

Here, we again check for the “days as member” value, then add seven days, and get only content published after that date. Why the seven days in both of these functions? Because content is published weekly (on Fridays, in this case), and we want to avoid a situation where someone signs up and has nothing available to them. This way, as long as content is published every week, a new member will immediately have access to a piece of content.

Additionally, on that meal plan archive view, we filter the message that’s displayed if no posts are found and replace it with our own message. If the user is logged in, then we apologize (because they should be able to see something), and request that they contact us. If they’re not logged in, we tell them, and provide a login form (helpfully provided by Member Mouse) in case they’re already members but just happen to not be logged in.

We also encourage them to view the plans available if they’re not a member yet, and link to the relevant page on the site. Non-members shouldn’t ever get to that page, but again, we’re trying to anticipate the edge cases and design for them, rather than ignore them. I’m sure our client would rather a visitor be encouraged to browse membership options if they happen to land on that page, rather than being rudely turned away!

Got any questions about Member Mouse customization? I’d love to help out if I can. Also, if you see any issues with the code I shared, please let me know!

The Value of Participating

One thing I’d like to do a lot more of this year is helping others, especially in the WordPress community. I am by no means an expert developer or mover and shaker in the community, but I do know that there are things I can do to help and teach others.

In that vein, I often offer up suggestions (especially grammatical suggestions) when people I follow on Twitter publish blog posts or other content on the web. Sometimes I wonder if it might come across as annoying, but I usually get a thank-you of some sort in response. I figure having a better-written post helps them look better to more people, so it’s probably welcome in most cases.

Brian Krogsgard is one person I’ve done that to a few times, and it must have made a a good impression on him, because the last time I did that, he responded by saying he’d like me to just make those edits myself:

I told him I’d love to help:

However, I didn’t expect what happened next. Brian emailed me a few days later, and asked if I’d be interested in coming on as a Contributing Editor to help with edits, writing posts, and generally growing the site. I was surprised, and very excited! The result is Brian’s post today announcing that I’ve joined the Post Status team.

I’m thrilled with this development, for two reasons. First, I really like Brian and what he’s doing in the WordPress community, and I’m really looking forward to working with him and getting to know him better. Second, I’m excited about the opportunity to get even more involved in the community, and help more people however I can.

My point in sharing this with you? Participating in a community, whether that’s WordPress or any other group of people, can result in unexpected opportunities. Sometimes it can be easy to keep your head down all the time and just focus on what you’re doing. Try to remember to talk with people, help out where you can, and stretch your boundaries every now and then. You never know what might happen.

And finally, I’ll note that I got Brian’s email inviting me to be a Contributing Editor on January 27th, my birthday. Coincidentally, I tweeted Brian an offer to help with working on Post Status exactly one year prior:

What took you so long, Brian?!?!

Git clean

Thanks to Josh Eaton, I recently discovered git clean. This command came up because I had somehow created a rogue file in the root directory of a site I was working on (I’m not even sure how it got there), but couldn’t figure out how to delete it, due to its odd name:
Bizarre filenameJosh helpfully suggested that I try using git clean, which worked!

Basically, git clean removes any “untracked files” from the working tree. That is, it removes any files you haven’t already told Git about (e.g. via git add [files]). This was useful in my case because I couldn’t easily delete the file otherwise, but it could also come in handy if you started experimenting with some new work, especially if that work were in several different new files, that you hadn’t already started tracking yet.

Warning: this will delete files, so be careful! In my case, just running git clean by itself did nothing, resulting in the error message

fatal: clean.requireForce defaults to true and neither -i, -n nor -f given; refusing to clean

However, just to be sure, you should always run git clean --dry-run first, which will show you what would be removed if you ran it with the -f or –force flag. You can also perform an interactive clean; see the linked documentation for more information.