Direct Approach vs. Philosophy Culture

When I was in high school, I joined a forum for philosophers. I was an observer, just monitoring the active users discussing different points of view on the same general principle, or cosmic factor. Later on, I started reading different books on personal skills, psychology and communication.

The Esoteric Book

The most amazing thing I found was a book. Actually two books – same title, same table of contents. One written by a US writer, the other – from an Indian philosopher.

The difference between both books was unbelievable. The US one was completely “how to” with homework assignments after each chapter. The latter one was full of stories. Nothing certain, no rules, no guidelines – just stories.

And yet, they conveyed the same idea. But the first one was focused on a single approach, while the other one was more vague, up for interpretations.

The Flash Mentor

I had several mentors over the years, one of them was a Flash consultant. He was coaching me on freelancing, management, communication and other skills since he was in his eight years of freelance and remote working when we met.

Since I was enrolled in a private university here, he was also a student there. A memorable moment of one of our discussions was the fact that all of the students in their course were freelancers and consultants with years of practical background, and all they wanted to understand is the theoretical part of what they do on a daily basis. Figures.

My First Conference

My first technical conference was during my first year as a junior developer. I was still fresh and didn’t know too much about the technical stack.

It was a high-end .NET conference, for professional engineers and team leaders. While there were a few code-related talks (the ones that I was excited about), the majority of the talks didn’t make any sense to me. Not because they were too hard, but they were too vague. There were stories, case studies and other elements that weren’t practical at my job, weren’t applicable and there was no framework that I could have learned that would be used in my day job.

Skills vs. Mindset

Many years later I came to the realization that, during the learning process, people need different things. General “inspirational” talks are often of no use to juniors and people who are just starting. On the other hand, seniors are often bored by “yet another framework” or technology, and they’re no longer in the game of learning more skills or technologies, but rather figuring out how to optimize the process, how to accelerate their workflow, or how to apply what they already have the way that influential leaders use it.

I tend to see the same pattern now. People who have started a year or two ago are passionate about new technologies, code snippets and frameworks that they can use as developers. Seniors and team leaders would like to see the bigger picture, and pass it through their own perspective and environment in order to improve it. It’s the direct, “how to do this” approach compared to the “let’s review one of the paths in your future”.

Is there a right or wrong way to present your vision? Not really. But it’s a great skill to be able to extract a use case out of a general principle, or extrapolate a single example into a larger process.

The post Direct Approach vs. Philosophy Culture appeared first on Mario Peshev on WordPress Development.

WordCamp Paris slides: Unit Tests for WordPress plugins

Last week-end I gave a talk at WordCamp Paris, about the exciting topic of Unit Tests for WordPress plugins (are you excited already?). I think I'll write a short blog post about it in the next few days ; I'll also write a series of post about unit testing, because that subject is so exciting :)

In the meantime, here are my slides (in French) :

Plain old downloadable PDF: WordPress Plugin Unit Tests, or Slideshare stuff below.

The demo plugin and all its tests are on Github: ozh/plugin-unit-test-demo.

(cc) Ozh for planetOzh, 2015. | Permalink | No comment | Add to | splogmenotplz
Read more posts tagged with: , , ,

Feed enhanced by Better Feed from Ozh

It’s Not You – The repo cache is very sticky right now

So you made an update recently and it’s stuck on the old version, but the downloads are right for your new release?

We know.

It will update, eventually. We’ve made some recent changes to everything and updates are running a little slower to sync and flush the cache. We’re aware of the delays and kicking the gerbils running the servers to make it faster.

You should refrain from making multiple updates to ‘fix’ it right now, though. It won’t help.

Drew Jaynes to Lead WordPress 4.2

photo credit: 10up
photo credit: 10up

WordPress 4.2 development officially kicked off today at the regularly scheduled core development meeting. Andrew Nacin announced that 10up engineer Drew Jaynes will be leading the release.

Jaynes, who has contributed to every major release since 3.3, recently led the initiative to create inline documentation for every hook in WordPress. He will be accompanied by Scott Taylor, who will help guide core feature plugin development for the media and image efforts that will be in motion throughout 2015.

The WordPress core team is planning three releases this year. “At the moment, that looks like one in April, one in August, and one in early December,” Nacin said. He anticipates that the WP REST API will see the light of day in 4.3 or 4.4, due later this year.

Jaynes opened the meeting with discussion on possible candidates for features in 4.2, which are likely to include Press This, Theme Switcher, and Shiny Updates (smoother installation and updating of plugins and themes). The merge deadline for feature plugins is approximately two weeks away.

“In addition to feature plugins, I’d like the general focus to be on polishing up some of our existing UIs in terms of mobile and accessibility wherever we can,” Jaynes said. “Seems like there’s tickets hanging out there we could get some wins on.”

A 4.1.1 maintenance release is on its way this week or possibly early next week. The 4.2 project schedule is now updated with tentative dates for the release. The team is targeting April 8th for the official release, with the first beta planned for the week of February 25th.

Estimation Is Arbitrary – Risk is Out There

Chris Lema posted about his approach for Estimating Without Requirements and this is one of the most brilliant posts of his that I’ve ever read.

When I started my freelance career, the first thing I encountered was the estimation challenge. Working full-time at a company is often estimation-free – you can give some rough numbers in a matter of weeks or so, but in general the work takes as long as it takes and that’s it. Some of the PM resources online suggest that you need to multiply your estimate by 1.5 or even by 3 if you’re not too experienced. Then again, it’s arbitrary – I’ve seen how easy it is to get that wrong and get out of scope.

I’ve been struggling with estimates ever since, which is why I had to fine tune my pricing strategy. I always try to work with budgets and estimate accordingly, otherwise chances are that we will end up surcharging due to the lack of requirements, or miss essential details and underbid accordingly.

What Chris suggests is using three columns for our estimate: Expected Case, Best Case and Worst Case. Usually the first two numbers are close, since we can optimize our process or guess some delays, but the interesting number is the worst case scenario.

Why do we expect that a worst case scenario may take 10 times longer than the best case one? The reason is the lack of requirements.

You won’t believe how often I get inquiries for building a clone of Facebook or LinkedIn. Sometimes it’s literally rebuilding everything, including the infrastructure. Or it could just be a plain install of a membership plugin.

The most normal thing to do here is asking for more details. Discussing the requirements with the client, sharing your concerns and the possible outcomes based on the number of options, filters, integrations or whatever. Suddenly, most of our concerns become invalid, or actually add up to a new set of requirements. And the amplitude is reduced drastically.

Not to mention the time you have to spend extra with your client upfront. You do the initial meeting or a call, then you prep the estimate. The worst case scenario suddenly would cost 10 times more. You call back, spend quite some time clarifying each of the possible directions that the project may take. Get back to the drawing board, reestimate, find out more challenges, call back, clear, multiply by 1.5 and send the estimate. Or use the formula by Chris, but with lower gap between the realistic and the worst case estimate.

The funny thing is the time it takes you to do that. It gets complicated both for small projects, and for large customers at the same time. Why?

Smaller projects (say up to 15 hours) are tough to estimate. Usually it seems to be a simple job, but miscalculating or missing anything could take you an extra 5 hours – which means that you’re 30% and more behind your estimate. And spending too much time on communication may still result in a bid that is not accepted. If you spend 3 hours on that and you do it twice a week, it’s close to a day lost on calculations.

Large projects are a bit different. Misinterpreting a feature would cost you a few more hours, but the project would take like 200 hours or more to build. However, in order to prep everything, it would require a few meetings, building a specification, getting that approved, and probably spend close to a week on the process. Imagine wasting a week of your attention and time on a prospect that never becomes a client.

We usually tackle that either by asking for a ballpark from the client a few times, or charging for R&D at the beginning. Sometimes it doesn’t work, since clients research different opportunities and agencies, and are opposed to investing in R&D with each agency. We’ve skipped that phase and risked with some clients, and sometimes it works – the project is successful, and we wouldn’t have gotten it if we had billed the time upfront.

In the end, everything ends up with reputation. The willingness for a client to work with you is more important than everything else. If that’s the case, you can charge high rates, bill the R&D phase, charge for extra consulting and everything. Otherwise the competition sets different rules – and while it could be a decent deal, it’s a risk – a real risk out there.

I even read a study recently that 80%+ of the leads for small businesses come from word of mouth.

So, how do you deal with estimates?

The post Estimation Is Arbitrary – Risk is Out There appeared first on Mario Peshev on WordPress Development.

5 WordPress Plugins for a Mobile-Friendlier Blog


Google is cracking down on mobile-unfriendly sites.

The search engine sent a warning on Google Webmasters Tools to site owners who have mobile ranking issues. This new algorithm has hit the news as early as November but will take shape in the coming weeks and months.

The age of mobile has arrived and it’s only growing stronger. According to this free guide from Smart Insights, mobile devices have outgrown desktop computers in Internet usage in 2014.

These reasons should empower you to set up a mobile-friendly version of your blog.

If you have a WordPress blog that still needs to be optimized for mobile viewing, use the plugins listed below.



This free plugin offers a vast array of features to supercharge your blog. One that optimizes your blog for mobile viewing is the Mobile Theme feature.

By activating the Mobile Theme, you can either (a) show the excerpts or the full content of your blog posts on the homepage or (b) show a link at the footer of the page to the mobile-friendly version.

You can customize the header and background of your blog’s mobile version.

WP Touch

Create a beautiful mobile version of your WordPress site.

This paid plugin lets you choose from different WPtouch themes, all which loads 5x faster than a responsive blog design. WP Touch also gives you access to extensions that increase the mobile viewing experience such as Infinity Cache,  Responsive Images, Mobile Content, and more.

For a WordPress blog, you can buy a WP Touch license worth $59. If you own many blogs and website, you can order a license bundle at a higher price.

WP Mobile Detector   WordPress Mobile – WordPress Mobile Themes – WordPress Themes

For $50, you can install this plugin to customize a mobile version of your blog.  The plugin also has 10 mobile themes to choose from that fit your brand.More importantly, your mobile-friendly blog will be shown on more than 5,000 devices.

More importantly, your mobile-friendly blog will be shown on more than 5,000 devices. WP Mobile Detector will show the version that best appears on each device. It automatically formats blog content and layout to fit any screen size. The Advanced Mobile Statistics will track blog visitors and mobile bots to see how much traffic you’re drawing with your mobile theme.

WP Mobile Edition

WordPress › WP Mobile Edition « WordPress Plugins

This plugin lets you create a speedy and lightweight version of your blog without compromising its design. It will adapt to any kind of device that shows your blog. Whether the device is in vertical or horizontal position, the nTheme feature will show the correct version of the blog.

You can set up the mobile version to load in two ways: (1) once visitors go to the blog or (a) once visitors enable the mobile version from the desktop version that loads on their device.

WordPress Mobile Pack 2.0

WordPress › WordPress Mobile Pack « WordPress Plugins

The plugin’s basic version will allow you to create a customized version of your blog for mobile viewing. The Premium version will give you access to unlimited content resources, themes, and applications.

Do you know other mobile-friendly plugins for a better viewing experience of your WordPress blog?

More on mobile-friendly:

How To Make Your Blog Mobile Friendly

3 Ways To Monetize Your Mobile Loving Blog

The Philanthropic Side of The WordPress Community

Whether it’s businesses participating in charity work or individuals who need financial assistance, the WordPress community has repeatedly shown how generous it is. Here’s at look at some WordPress businesses that participate in philanthropy and individuals who experienced the community’s generosity first hand.

Matt Mullenweg Co-creator of WordPress

CharityWater Image

Matt Mullenweg is a strong believer in providing easy access to clean drinking water to regions of the world who need it most. He works with several charities and organizations including:

To celebrate his 30th birthday, Mullenweg requested that donations be made to his Charity water campaign in lieu of gifts. The goal was $30K, but the campaign raised over $44K.

Mitch Canter of Studionashvegas

Justice and Mercy International

Mitch Canter runs Studionashvegas, a full service WordPress development agency. Canter has attended two mission trips with a group called Justice and Mercy International. The group’s mission is to make justice personal for the poor, the orphaned, and the forgotten. He’s also traveled to Chisinau, Moldova and Prague, Czech Republic to help assess long-term needs and provide any necessary supplies for the short-term as well as interact with local children.

Canter and his wife also sponsor Veronica, a Moldovan orphan, through Justice and Mercy International. The couple routinely writes letters to Veronica and plans to see her the next time they visit the country. They also serve in their local church and volunteer with the local food bank, One Gen Away, to provide meals to families who are in need.

Syed Balkhi of WPBeginner

Pencils of Promise LogoSince 2013, Syed Balkhi and WPBeginner have helped build at least three new schools in Guatemala through the Pencils of Promise charity. Pencils of Promise is a for-purpose organization that builds schools, trains teachers, and funds scholarships. In 2014, WPBeginner celebrated its 5th birthday by hosting a huge giveaway and launching a $50K campaign to fund two new schools. The campaign was successful and Balkhi says the goal for this year is to build three new schools.


St Jude Childrens Hospital

PressNomics is an annual conference dedicated to the business side of WordPress. Each year, the event donates a portion of its proceeds to St. Jude Children’s Research Hospital. Pagely Co-founder, Joshua Strebel, says the decision to donate to St. Jude was made long before he and his wife had kids, “St Jude has been our charity of choice for many years. Even before Sally and I had kids, we were touched by those commercials that showed the kids fighting cancer. I’ve always had a soft spot for kids, coming from a large family. Of all the charities you could give to, St. Jude is a no brainer.”

Since 2012, the event has donated over $11K and Strebel says funding from PressNomics 3 this year will allow them to donate over $10K. “After PressNomics 1, we donated a little over $5K and there was an anonymous matching donation. After PressNomics 2, we donated a little over $6K. This year the budget has allowed us to donate just over $10K.”

When I reached out to the community to figure out who gives to charities, I discovered a number of people who use DonorsChoose. DonorsChoose is an organization that makes it easy to help classrooms in need. Public school teachers post classroom project requests, which range from pencils for poetry to microscopes for mitochondria-organization.

Eric Mann, who contributes to the organization, had a lot of friends in college who majored in education and went on to become teachers. He discovered that many of them worked in schools with small budgets and limited supplies. He explains why he uses

I use to help fund the purchase of books for classroom lessons, field trips to museums and science exhibits, and modern laptop computers for technical education. Many of the teachers I sponsor are working in low-income areas with at-risk youth and don’t have the tools available to make much of a difference without community sponsorship.

Mann believes investing in education is one of the best long-term investments you can make, “It’s easy to spend money on this Kickstarter or that IndieGoGo when you get a tangible (or digital) return on the investment. Spending money to help protect and shepherd the education of today’s youth, though, returns an investment in better educated leaders, educators, and technologists for tomorrow.”

WP Site Care

WordPress support agency, WP Site Care, contributed to several different organizations and initiatives throughout 2014. The list is lengthy and includes:

I asked WP Site Care founder, Ryan Sullivan, why he chooses to give back to so many charities and what it means to give back.

We support a number of different causes because any charitable contributions that we’re able to make are a direct reflection of the people at our company. We found out about a number of causes from the WordPress community itself. For example, funding treatment for autism is something that has a personal impact on a few of us at WP Site Care.

We like to make sure that the causes that are important to individuals become important for all of us collectively. It not only goes to help the causes themselves, but helps us get closer as a working family.

Individuals Who Received Financial Assistance From The WordPress Community

Just Tadlock – Near the end of 2013, Justin Tadlock discovered the perfect house, but he didn’t have the money to cover closing costs, quarterly taxes, and appliances. He requested $5K to cover his costs, but he ended up receiving over $7K. It’s important to note that the campaign took place around Christmas which is a tough time financially for a number of people. However, the community rallied together to give Tadlock the ultimate Christmas gift.

Dan Griffiths – Dan Griffiths, who is known on Twitter as Ghost1227 and one of the creators of WP Tally, recently found himself in a financial emergency. He needed $2,500 within 24 hours. He reached out to Happy Joe, an organization that helps veterans in need. Happy Joe founder, James Dalman, published an all points bulletin on Twitter asking for help from the WordPress community. Within two hours of the initial call for help, Griffiths reached his goal.

Kim Parsell’s Son – Kim Parsell’s son was about to begin a new job when tragically, his mother passed away. He wasn’t able to start the job, putting him in a financial bind. He created a campaign asking for $1K to help pay bills as he mourned the loss of his mother. Within 42 minutes, 8 people raised $760 of the requested $1,000. When it was all said and done, 33 people raised $2K.

John James Jacoby – In late 2014, John James Jacoby launched a crowdfunding campaign asking for $50K in order to work on BuddyPress, GlotPress, and bbPress full-time for 6 months. The campaign was successful generating nearly $52K.

Proud To Be a Member of This Community

This is just a sample of the generosity expressed by the WordPress community. Although several businesses contribute to charities, it’s the individuals who receive funding that impress me. If one of us ends up in dire straits, potentially thousands of people are ready to help. It’s just one more reason why I’m proud to be a member of this community.

I’m certain I missed a few WordPress individuals and businesses that contribute to great causes, if you’re one of them, please use the comments and tell us about it.

Integrating Google No Captcha reCaptcha In WordPress Forms

In this tutorial you will learn how to integrate Google’s new reCatcha model in WordPress Login, Comment, Registration and Lost Password Forms.

Google No Captcha reCaptcha There are many different solutions to prevent bots from submitting web forms. But one of the most popular solution was using reCaptcha. reCaptcha actually displays a image with some text in it and user has to enter the text to submit the form successfully. It was difficult for bots to read the text on the image. But as bots algorithms become more advanced they started breaking this security. It was no more safe. This old method has a pretty bad in terms of user friendliness. There Google came with a new reCaptcha called No Captcha reCaptcha.

In this tutorial we will look at what exactly No Captcha reCaptcha is and how to create a plugin which integrates reCaptcha in the WordPress Login, Registration and Comment forms.

A Look at No Captcha reCaptcha

Google No Captcha reCaptcha No Captcha reCaptcha just displays a check box asking the user to check it if he/she is not a bot. It might look very hackable but internally Google uses advanced algorithms and methods to find if the user is a bot or not. This new model is more user friendly and secure than the old one.

Registering Your Site and Retrieving Keys

Users who install this plugins needs to register their website to retrieve site key and secret key.

You need to create a settings page for the plugin which allows the WordPress administrator to install the site key and secret key they retrieved from reCaptcha admin panel.

function no_captcha_recaptcha_menu() {
	add_menu_page("reCapatcha Options", "reCaptcha Options", "manage_options", "recaptcha-options", "recaptcha_options_page", "", 100);

function recaptcha_options_page() { ?>
	<div class="wrap">
		<h1>reCaptcha Options</h1>
		<form method="post" action="options.php">
		<?php settings_fields("header_section");
			submit_button(); ?>          
<?php }
add_action("admin_menu", "no_captcha_recaptcha_menu");

function display_recaptcha_options() {
	add_settings_section("header_section", "Keys", "display_recaptcha_content", "recaptcha-options");

	add_settings_field("captcha_site_key", __("Site Key"), "display_captcha_site_key_element", "recaptcha-options", "header_section");
	add_settings_field("captcha_secret_key", __("Secret Key"), "display_captcha_secret_key_element", "recaptcha-options", "header_section");

	register_setting("header_section", "captcha_site_key");
	register_setting("header_section", "captcha_secret_key");

function display_recaptcha_content() {
	echo __('<p>You need to <a href="" rel="external">register you domain</a> and get keys to make this plugin work.</p>');
	echo __("Enter the key details below");

function display_captcha_site_key_element() { ?>
	<input type="text" name="captcha_site_key" id="captcha_site_key" value="<?php echo get_option('captcha_site_key'); ?>" />
<?php }

function display_captcha_secret_key_element() { ?>
	<input type="text" name="captcha_secret_key" id="captcha_secret_key" value="<?php echo get_option('captcha_secret_key'); ?>" />
<?php }
add_action("admin_init", "display_recaptcha_options");

Let’s see how the above code works:

  • We created a settings page on WordPress admin dashboard.
  • This settings page displays two input text fields. These input fields accept site key and secret key.
  • These keys are stored as WordPress options. We name the options as site_key and secret_key.

Add No Captcha reCaptcha to WP Comment Forms

You need to integrate reCaptcha in frontend comments forms to prevent bots from putting spam comments.

Create a style.css file in your plugin directory and place this code

#submit {
	display: none;

The above code hides the submit button in WordPress comment form. So that we can place the reCaptcha box above the submit button by inserting both submit button and reCaptcha box manually.

Here is the code to integrate reCaptcha on comment forms:

function frontend_recaptcha_script() {
	wp_register_script("recaptcha", "");
	$plugin_url = plugin_dir_url(__FILE__);
	wp_enqueue_style("no-captcha-recaptcha", $plugin_url ."style.css");
add_action("wp_enqueue_scripts", "frontend_recaptcha_script");

function display_comment_recaptcha() { ?>
	<div class="g-recaptcha" data-sitekey="<?php echo get_option('captcha_site_key'); ?>"></div>
	<input name="submit" type="submit" value="Submit Comment">
<?php }
add_action("comment_form", "display_comment_recaptcha");

function verify_comment_captcha($commentdata) {
	if (isset($_POST['g-recaptcha-response'])) {
		$recaptcha_secret = get_option('captcha_secret_key');
		$response = wp_remote_get("". $recaptcha_secret ."&response=". $_POST['g-recaptcha-response']);
		$response = json_decode($response["body"], true);
		if (true == $response["success"]) {
			return $commentdata;
		} else {
			echo __("Bots are not allowed to submit comments.");
			return null;
	} else {
		echo __("Bots are not allowed to submit comments. If you are not a bot then please enable JavaScript in browser.");
		return null;
add_filter("preprocess_comment", "verify_comment_captcha");

Let’s see how the above code works:

  • We en-queued the Google’s reCaptcha JavaScript file to WordPress frontend by using wp_enqueue_scripts action.
  • We also en-queued the style.css file using wp_enqueue_style
  • Inside the comment form we display the checkbox using comment_form action.
  • When comment is submitted and before inserting it to the database WordPress calls the preprocess_comment filter. Inside the filter we check if the user is human or bot. If human then we return the comment to be inserted otherwise we return null to prevent the comment from being added to database.

Add No Captcha reCaptcha to the WP Login Form

We need to integrate reCaptcha in admin login form to prevent bots from running a brute force attack to crack passwords. Here is the code to integrate it on admin login form:

function login_recaptcha_script() {
	wp_register_script("recaptcha_login", "");
add_action("login_enqueue_scripts", "login_recaptcha_script");

function display_login_captcha() { ?>
	<div class="g-recaptcha" data-sitekey="<?php echo get_option('captcha_site_key'); ?>"></div>
<?php }
add_action( "login_form", "display_login_captcha" );

function verify_login_captcha($user, $password) {
	if (isset($_POST['g-recaptcha-response'])) {
		$recaptcha_secret = get_option('captcha_secret_key');
		$response = wp_remote_get("". $recaptcha_secret ."&response=". $_POST['g-recaptcha-response']);
		$response = json_decode($response["body"], true);
		if (true == $response["success"]) {
			return $user;
		} else {
			return new WP_Error("Captcha Invalid", __("<strong>ERROR</strong>: You are a bot"));
	} else {
		return new WP_Error("Captcha Invalid", __("<strong>ERROR</strong>: You are a bot. If not then enable JavaScript"));
add_filter("wp_authenticate_user", "verify_login_captcha", 10, 2);

Let’s see how the above code works:

  • We en-queued the Google’s reCaptcha JavaScript file to WordPress admin login, registration and lost password pages by using login_enqueue_scripts action.
  • We displayed the checkbox using login_form action.
  • Before producing the final authentication result WordPress runs the wp_authenticate_user filter to let us add a extra validation step. We check if the user is bot or human inside this filter. If its human we return the user object else we return and WordPress error object.

Add No Captcha reCaptcha to the WP Registration Form

We need to integrate reCaptcha in admin registration form to prevent bots from creating fake accounts. Here is the code to integrate it on admin registration form:

function display_register_captcha() { ?>
	<div class="g-recaptcha" data-sitekey="<?php echo get_option('captcha_site_key'); ?>"></div>
<?php }
add_action("register_form", "display_register_captcha");

function verify_registration_captcha($errors, $sanitized_user_login, $user_email) {
	if (isset($_POST['g-recaptcha-response'])) {
		$recaptcha_secret = get_option('captcha_secret_key');
		$response = wp_remote_get("". $recaptcha_secret ."&response=". $_POST['g-recaptcha-response']);
		$response = json_decode($response["body"], true);
		if (true == $response["success"]) {
			return $errors;
		} else {
			$errors->add("Captcha Invalid", __("<strong>ERROR</strong>: You are a bot"));
	} else {
		$errors->add("Captcha Invalid", __("<strong>ERROR</strong>: You are a bot. If not then enable JavaScript"));
	return $errors;
add_filter("registration_errors", "verify_registration_captcha", 10, 3);

Let’s see how the above code works:

  • We displayed the checkbox using register_form action.
  • Before producing the final authentication result WordPress runs the registration_errors filter to let us add a extra validation step. We check if the user is bot or human inside this filter. If its human we return empty error object else we add a add to the error object and return it.

Add No Captcha reCaptcha to the Lost Password Form

We need to integrate reCaptcha in admin lost password form to prevent bots from submitting this form. Here is the code to integrate it on admin lost password form:

function verify_lostpassword_captcha() {
	if (isset($_POST['g-recaptcha-response'])) {
		$recaptcha_secret = get_option('captcha_secret_key');
		$response = wp_remote_get("". $recaptcha_secret ."&response=". $_POST['g-recaptcha-response']);
		$response = json_decode($response["body"], true);
		if (true == $response["success"]) {
		} else {
			wp_die(__("<strong>ERROR</strong>: You are a bot"));
	} else {
		wp_die(__("<strong>ERROR</strong>: You are a bot. If not then enable JavaScript"));
	return $errors;    
add_action("lostpassword_form", "display_login_captcha");
add_action("lostpassword_post", "verify_lostpassword_captcha");

Let’s see how the above code works:

  • We displayed the check box using lostpassword_form action.
  • Before producing the final password reset link WordPress runs the lostpassword_post action to let us add a extra validation step. We check if the user is bot or human inside this filter. If its human we return nothing else we kill the script with an error message.

Final Thoughts

Google No Captcha reCaptcha Its a new way to protect your website forms from bots and increase user friendliness. You can also learn how Google detects bots internally using this new type of captcha. Once you have integrated this plugin in your WordPress site write your experiences below.

Proposed Enhancements to Distraction-free Writing in WordPress

When we asked readers what they thought of the new Distraction-free writing mode in WordPress 4.1, a majority of readers responded that it was an improvement. However, a number of others stated they preferred the old version. Readers also took to the comments to describe their first impression of the feature.

Distraction Free Writing in WordPress 4.1
Distraction Free Writing in WordPress 4.1

Since the release of 4.1, I’ve forced myself to use DFW. When I write content, I often hit the preview button several times to review changes. This results in DFW mode turning on and off multiple times which I find distracting and at times, annoying. I’m not the only one who feels this way as Brian Krogsgard of explains:

When I write, I tend to save and preview the post live a number of times while I’m writing, especially toward the end of my time spent writing.

It gets a bit dizzying to be fixing typos and saving and previewing while going in an out of DFW.

I’d like to see “Save Draft” and “Preview” buttons moved into the editor body, so that I can stay in DFW while finishing up my posts.

I like the idea of moving the Save Draft and Preview buttons to the post editor. It’s one of the reasons why I reviewed the Distraction Free Preview Button plugin by Alex King. Krogsgard also lists several other ideas with screenshots showing the changes in action, including:

  • Inverted editor colors
  • Centered post editor
  • Setting the editor to use the Max-width available
  • Full-height editor

Jen Mylo, who reviewed the feature as a user, suggests similar improvements. One other thing I’d like to see is a full-height editor. It’s annoying when the meta boxes fade away, the editor remains the same size as if the boxes are still in place. That’s because they are, but I think it would be better if DFW mode would go back to being a separate writing experience so meta boxes are a non-issue.

I believe if the ideas proposed by Krogsgard and Mylo are implemented, DFW would likely become the primary mode in which I write content. Until then, I’m sticking with the default interface. What you do you think of the proposed ideas and are there any you’d add?

Making It In Changing Times Writers Conference

I will be speaking on “Blogging Your Passion” at the Making it in Changing Times conference January 31, 2015, in Portland, Oregon. Produced by author Jessica Page Morrell, this day-long conference is designed to kick your writing and publishing butt in the new world of publishing. The conference features: Cathy Lamb, best-selling New York Times […]

Obstacles In Communication

One of the most annoying things online for me lately are the obstacles during different phases of communication – blogging, contacting people, sending feedback. Most of us are busy and look for the easiest and fastest way to do anything online, and our attention span is short enough to abandon an idea if the process is cumbersome in any way.

Which is one of the reasons I love WordPress in the first place – making it easy to launch websites, products and services.


But despite of the fact that I use WordPress since 2007 or so, I don’t think that it’s the best platform for writing now. It may be the most professional one, including hundreds of plugins that would help you write better, validate your SEO, curate content, link other resources, embed tweets and such, but it’s not the easiest platform. Even the distraction-free writing mode doesn’t make it incredibly better.

Try LinkedIn Pulse or Medium for example – a clean sheet with your cursor, that’s it.


TinyMCE is like democracy. As Churchill said in 1947:

“Democracy is a very bad form of government, but I ask you to never to forget it, all the others are far worse”

I do programming for a living, yet I don’t enjoy blogging in the Text editor. But it works so much better in comparison to the Visual editor. It doesn’t add all of the extra paragraphs, breaks, misalignments – not to mention pasting text from different applications.

It’s supposed to work and it’s more superior than the other WYSIWYG editors, but blogging with TinyMCE is not a pleasure.


We all know that spam bots are terrible, and cleaning your blog out of spam is just an awful way to spend your time.

I was using my 3G USB stick last weekend while working from a coffee shop. Turned out CloudFlare doesn’t like my IP address and many reputable websites asked me to enter captcha before I was able to browse them. It was demotivating to say the least, and the lack of trust in my humanness in 10 websites in a row was disappointing.

And have you seen the Google Recaptcha – the one prior to the checkbox model? I usually refresh 4 or 5 times before I can actually read a text. I bet that a robot can do better than me with those captchas.

Comments SPAM

I used to love reading blogs and commenting. But ever since Google Reader was discontinued, I haven’t been using a feed reader. I subscribe by email (simple as that) and follow some social media channels or aggregators for most online resources.

But even when I read something and I would like to comment out, I get some captcha input field under the comment field. I fill it in anyway, and then I hit “Comment”. “Your comment is awaiting moderation”, it says. Sometimes that takes days, or it hits a SPAM filter and people never live to see my reply.

Site owners also forget to add “Subscribe for comments” so that the communication can go on.

Social Media

I have a special policy about Facebook – I add back only people whom I’ve met before or I know personally. It’s a personal social network for me.

On LinkedIn though I tend to add anyone. Why? It’s a business network. And making business contacts is always helpful. But LinkedIn is always limiting people by trying to find a common company or high school that you both went to. When the process requires a review, why should one be stopped to apply in the first place for a business contact?

That’s the main reason I spend most social time on Twitter. No boundaries – everyone could contact you. Unlike Google+, if you tweet, your followers will see that. You don’t limit your posted content to specific groups. Communication is open, and you can still restrict it should you want that.

That magnitude of privacy, security measures and complication is hilarious since we all know that the large corps behind these networks and services store all of our data. I actually helped a client in one consulting startup last month, answering a WordPress multisite question in a private chat. A week later, my reply was curated and published as an article, since it was helpful and the startup team decided to combine my live chat text replies into a short article.

The more obstacles we got in our communication, the less people would be willing to waste their time for a process that is supposed to be simple.

The post Obstacles In Communication appeared first on Mario Peshev on WordPress Development.

Public beta’s for our plugins

Public beta's for our pluginsOver the last few months we’ve been working hard on improving how we build and test our plugins. We’re writing more and more unit tests and are trying to prevent issues from popping up. There’s one recurring issue though: we can’t test everything. Hosting environments vary so much that we have decided to do more public beta’s for our plugins. As a direct result of that decision, this post announces two public beta’s as well as reminds you of our beta mailing list.

For both plugins we’re aiming for a beta period of about a week but if too many bugs come out of a beta we’ll of course postpone release.

WordPress SEO by Yoast 1.8-beta

We’ve refactored large parts of the frontend code of our WordPress SEO plugin and heavily optimized how the plugin loads its modules in both front- and backend. The execution of code of our plugins code on the frontend is now approximately 30 – 40% faster, which of course is awesome. But… This almost has to lead to bugs and while we’ve fixed a fair few and our unit tests all succeed, we’d like you to test.

Most important here is testing whether there are any major differences in meta data between your pages with the current WordPress SEO plugin and this beta. This beta introduces a few new features around Twitter cards (Twitter cards on every page, support for the Twitter Gallery card) but all the other meta data should be the same.

Another thing that should work better in this release is everything to do with characters with accents, umlauts etc in the focus keyword and all the tests around that.

Download WordPress SEO by Yoast 1.8 beta here »

(or check it out from GitHub but in that case make sure to update Git sub-modules too)

Note: this is beta software. Do not use on production environments.

Google Analytics by Yoast 5.3-beta

The release of the dashboards for our Google Analytics plugin has been a bit of a bumpy ride. We’ve made some mistakes and have had to scramble to fix those. Brian Krogsgard actually wrote a nice post over on Post Status about it, if you’re interested in the background. We think this beta release fixes some of the last remaining issues but we’re having a hard time confirming those, so we decided to ask a wider audience to test.

This beta has the option to completely disable the dashboards functionality, should you want to. It should also no longer show any notices about re-authentication or at least show them way less frequently than it did for some people.

Download Google Analytics by Yoast 5.3-beta here » 

(or check it out from GitHub but in that case make sure to update Git sub-modules too)

Note: this is beta software. Do not use on production environments.

How to give feedback

So you want to test and give feedback? Awesome, thank you! We’d prefer your feedback in the form of new issues on GitHub (make sure to mention the beta) or as emails to beta at

The beta mailing list

We have a mailing list for beta testers that we’ll be using more often, you can sign up for that here. We’ll send new versions of the beta’s out to that mailing list too so make sure to subscribe if you’re testing.

This post first appeared on Yoast. Whoopity Doo!

The Features as Plugins First Model Is a Mess

Released in late 2013, WordPress 3.8 was packed with new features including, a new theme browser experience, widgets area chooser, and a redesign of the backend. It’s also the first release to include a feature using a new formal development process called features-as-plugins first. The backend redesign started off as a plugin called MP6 with development beginning in March, 2013.

Prior to MP6, features were largely developed inside of core during the development cycle. This method caused some versions to be delayed, as was the case for WordPress 3.6. The success of MP6 proved that by developing core features as plugins first, they were easier to test, manage, and merge into core at the appropriate time. Since adopting the development process, at least seven features have landed in core. However, as an outsider looking in, the process seems to be falling apart.

MP6 Set The Bar

MP6 WordPress Admin Plugin
MP6 WordPress Admin Plugin

Each week, Matt Mullenweg and Matt Thomas released a new version for people to test. They also kept everyone updated on what changed and left the comment form open to solicit feedback. This made it easy for people to participate in the development and testing process. By using P2 and the comment section, it was a lot easier to provide feedback. Since MP6 was a plugin, testing it was as easy as installing it on a stable version of WordPress.

The Lack of a Testing Audience

MP6 was available for download on the WordPress plugin directory. This made it accessible to anyone who wanted to test it. Recent plugins like the User Session Manager by John Billion don’t have any P2 posts on the Make WordPress Core site. As with several other features, discussion took place within a trac ticket. Development of the plugin was handled on Github until it received a pass to be merged into core. Having a feature plugin only available on Github and a lack of communication surrounding the feature prevents a lot of people from potentially being part of the testing group.

WordPress lead developer, Ryan Boren, noted in an open thread in November of 2014, that when it comes to gathering a testing audience, no feature plugin has reached the standards set by MP6. For plugins to be merged into core, Boren suggested the following items should be met:

  • Be present and up-to-date in the plugin directory.
  • Be as ready to go on mobile as they are on desktop.
  • Have visual records for major flows through all new interfaces on all devices.
  • Have mature UI that isn’t going to derail the release train.
  • Have a history of posting weekly updates to make/core.
  • Have a history of regular plugin directory updates.
  • Have a testing audience.
  • Publish a merge consideration post on make/core complete with visual records and other diligence.
  • Exist for at least one release cycle. Plugins created at the beginning of a release cycle should not be considered for merge until the next release.

Several feature plugins fail to adhere to many of these proposed guidelines. In June of 2014, Andrew Nacin added a “Beta Testing” tab to the add plugins screen for those who use WordPress trunk. The tab lists Feature Plugins that are available for testing.

Featured Plugin Development Looks Dead
Feature Plugin Development Looks Dead

Based on the results in the screenshot, it looks like every feature plugin is dead in the water, including the WP API. However, if you look at the activity for WP API on Github, there’s plenty of development taking place. How can more people participate in the testing process if feature plugins are not routinely updated and available for download in the directory? This needs to change sooner rather than later.

Feature Plugins are More Like Experiments

Feature plugins are not guaranteed to be added to WordPress. Instead, the process is similar to a lab with each one being an experiment. Sometimes a plugin won’t be added but parts of it will. For example, many of the improvements to the post editor in 3.9, 4.0, and 4.1 are derived from the Front-end Editor. Maybe the core team should think about renaming them to feature experiments as it’s more representative of what they really are.

Project Management

When I brought up the subject of feature plugin development at the January 7th core development meeting, Scott Taylor made an excellent point, “Features-as-plugins often become Projects without requirements or tasks, which leads to a non-schedule, and then often require all-or-nothing to go in.” Feature plugins are generally driven by one or two people who might be good developers, but lack project management skills. It’s almost like someone needs to constantly shepherd feature plugins to make sure they’re following a schedule and keeping them all on the same page.

The Process Needs to be Fixed

It’s clear that the feature plugin development process is disjointed at best. Communication is lacking, synchronized development between plugins on Github and is non-existent, and some plugins are merged too quickly. If users are to receive the maximum benefits from the experimental process, it needs to be orchestrated better. At least the core team is aware of the problems and is working towards improving the situation for the 4.2 development cycle.

Keeping WordPress Up-To-Date Is Not Enough

Keeping WordPress and your theme/plugins up to date is important, but it’s not sufficient.

A good example is working with some dodgy theme or a plugin including tons of external scripts or loading remote data. You can never be sure whether this snippet is safe, or not. I’ve seen a plugin fetching latest news from the plugin website. The site got hacked and the dashboards listing these news were affected.

ThemeForest themes are problematic by default, but different image resizing scripts already have bad reputation thanks to the numerous major hacks.

And yesterday I was fixing a major newsletter with close to 2M monthly page views. The traffic was rad, the site was kept up-to-date based on all of the update notifications. However, one of the plugins hasn’t been updated by its author since 2009, and the second one – since early 2011.

Keeping your core, theme and plugins up-to-date is important. But ensuring that the entire environment stability is in tact and is an attack vector that you can struggle with if you don’t pay enough attention.

The post Keeping WordPress Up-To-Date Is Not Enough appeared first on Mario Peshev on WordPress Development.

Is 2015 The Year of WordPress Admin Themes?

The CPO and partner of Human Made, Noel Tock, published his WordPress predictions for 2015. His predictions include, custom dashboards, front-end editing, internationalization, and more. This could be the year of admin themes, but I think it largely depends on whether the WP API is merged into core.

Tock predicts we’ll see a substantial increase in different WordPress backend experiences. Although there are implementations like Happytables and Jetty which use the WP API, I don’t think we’ll see a lot of adoption until it’s vetted and merged into core.

Regarding custom dashboard experiences, Tock makes a great point when he says:

For the most part, premium custom dashboards will fail. If it’s too generic, it likely can’t compete with WP-Admin (which actively pursues one size fits all). On the other hand, if it’s too niche or not very extendable, it won’t be of much use either. A minimal small business dashboard with front-end editing will likely be the most popular seller.

Additionally, I think his advice to those looking to experiment with the API should be considered, “Don’t create a custom dashboard because you want to change the way it looks, change it because you significantly want to improve the experience of your users.”

Jason Schuller’s admin design for Pickle is a great example of a backend that correlates with what’s on the frontend. Everything that’s unnecessary to manage the frontend of the site is removed from the backend, creating a streamlined experience.

WordPress Backend For The Pickle Theme

The WP API will make it easy for developers to create a variety of different admin experiences, but users will ultimately decide which implementation is right for them. We may even see an entire category added to the WordPress theme directory for admin themes.

Whether the API is merged this year or next, custom admin themes are inevitable. In the future, there will likely be an admin theme that matches the way you use WordPress to harmonize the user experience. What that theme looks like is anyone’s guess, but I’m looking forward to reviewing custom admin experiences created by developers using the API.

Preview the New Design for the WordPress Themes Directory

A long-awaited update to the official WordPress Themes Directory is in progress. Contributors on the Meta team for are picking up speed on the effort to move the theme repository away from bbPress and into a new plugin, comprised of a custom post type for the repository package and a theme uploader.

Konstantin Obenland posted a project update to inform contributors that both the theme and the plugin that help to power the directory are now open source and available for anyone to view on meta.trac. The plan is to match the new directory design to the WordPress admin themes browser, allowing users to filter themes in a similar way.


As you can see in the screenshots above, much of the same UI from WordPress is being re-purposed for the directory. Users will be able to select from all available filters in order to narrow down results.


A live preview of the new directory is available, though Obenland warns it’s still a bit buggy. The new design also includes an update for the commercially-supported GPL themes page.

Timeline for Launching the New Themes Directory

There is no set timeline for launching the new directory, though some of the larger tasks have already been accomplished. All the necessary API changes are complete, along with the upload process, theme suspension and approval capabilities, and theme version handling.

Obenland identified a list of important tasks that will need to be accomplished before launching the new directory. These items include things like importing existing themes from bbPress, rewriting the theme API and downloads handling to work with WordPress, synchronizing theme review results as a cron job, etc.

Matching the UI to the admin themes browser means that users will have a consistent experience, whether they are searching on or browsing in the WordPress admin. It also speeds up the process by enabling contributors to reuse work that has already been done for the core software.

If you are interested in contributing with the WordPress Meta team, now is an exciting time to jump in. All of the code for the project is public on meta.trac, and you can offer feedback on the blog.

Clarity Calls – The Ultimate Consulting Solution

I value my time a lot, and I would rarely spend it on boring stuff. I don’t browse YouTube at all, nor do I watch animated gifs all over the Internet, since I’m quite passionate about the WordPress community and building successful businesses.

I found Matt and Chris on Clarity through their social media accounts and blogs, and I find the service to be incredible. I joined Matt’s mentoring program last year, I do consulting through this blog and DevriX, and I teach classes on different subjects, so coaching is a specialty I’m passionate about.

One of the people behind Clarity’s success is Mark Cuban, one of my favorite Shark Tank investors. You can even call him for advise which could definitely pay back for a brilliant idea.

Getting access to successful people with many years of experience over the phone could rock your world if you have the right product and know what to ask for. The service is still growing, which is great for people asking for advice. Most consultants are still building their rating and work on lower rates. There is a Q&A section of the site with startup and business questions, and the quality is high – most answers are actionable and could help you grow your business with the right marketing, PR and entrepreneurship strategies.

One of the testimonials of the service is:

“A $100 Clarity call stopped me from buying $30,000 in software that I didn’t need.”
Michael Cohen • CEO of Wrightwood Furniture

My Clarity identity is available for WordPress consulting and business growth strategies.

The post Clarity Calls – The Ultimate Consulting Solution appeared first on Mario Peshev on WordPress Development.

WordPress 4.2 Will Automatically Enable Pretty Permalinks for New Sites on Installation

photo credit: gordon2208 - cc
photo credit: gordon2208cc

WordPress 1.0 introduced search engine friendly permalinks using mod_rewrite. Setting your site to use pretty permalinks is usually one of the first things that administrators do after installation.

WordPress 4.2 will add a new function that will automatically enable pretty permalinks, if the server supports it, at the time of installation. This means that in most cases you’ll never be greeted with ugly permalinks again.

The new function is the result of a ticket that was originally opened seven years ago. In the upcoming release, pretty permalinks will be enabled if WordPress can verify that they work. It will cycle through the various permalink formats, and if they all fail to work, WordPress will fall back to ugly permalinks.

By default, WordPress will set the following permalink structure for a new site, if possible, using mod_rewrite or nginx rewriting: /%year%/%monthnum%/%day%/%postname%/

Under configurations without rewrites enabled, it will set /index.php/%year%/%monthnum%/%day%/%postname%/ for PATHINFO (“Almost Pretty”) permalinks.

Eric Lewis, a contributor on the ticket, commented on the upcoming change, “Delivering pretty permalinks by default seems in line with a bunch of core philosophies – great out-of-the-box, design for the majority, simplicity, clean, lean and mean.”

If you frequently create new WordPress sites or development sites, the automatically enabled pretty permalinks in 4.2 should save you a step in the setup process.

Writing a blog: the text objective of your blogpost

Writing a blog- the text objective of your blogpostI previously wrote posts about the structure and about the style of your post. In this post, we will focus on the purpose of your text. A lot of people forget to properly formulate the purpose of their blog post or article. This is unfortunate, because if you do not properly define the aim of your text, it will be impossible to check whether or not you have succeeded. You do not write just for the sake of writing but because you have an idea of what you want your audience to know or do (or to stop doing).

Three main text objectives

I distinguish three main text objectives. First, your objective could be merely to inform people. A second objective could be to persuade people. You want people to buy your products or to return to your website. The final objective of your text could be entertaining or amusing. You could write a text in order to entertain your audience, for instance by making them laugh or by moving them. These three text objectives are not at all mutually exclusive. A piece could be informative and amusing at the same time!

Long term business aims and text objectives

Apart from the objective of your text, your company or your website will have long term business objectives. You should think about those long term business aims while determining the objectives of the text on your website.

For instance, at, we write blogposts largely to inform people about SEO. So the objective is to inform people. However, we also want people to become return visitors and to gain trust in our brand. Eventually, the long term purpose of our informing blogs is to gain enough trust for people to buy one of our products.

Be aware that if the objective of your post is to generate links from others, you should think about the character of your post as well. If you want your post to attract links from other sites in order to improve your rankings in Google you should focus on writing informative or amusing posts. Persuasive posts, in which the sales arguments are salient, will not receive as many links as purely informative posts will. People are more likely to share an informative or an amusing post than a purely persuasive post, because these posts are more free of ulterior motives.

Tips to use when focussing on one of the three main text objectives

In the following paragraphs we will give some tips you can use when writing either an informative, a persuasive or an amusing post or article.

Informative texts

In an informative text you explain something to your audience. You want them to understand more about a topic or you want them to use your information (put theory to practice). That’s it. You should take some time to clearly formulate the issue you want to address in your post. And an informative text will usually need quite some investigating in order to decide on the exact content of a piece.

The style of an informative text should be clear and professional. You should focus on the message itself. Focussing on content will give your text a professional and reliable character. Your style should not be too amicable. It could even be a bit distant.

The structure of an informative text should be clear. A logical structure could be to address a different topic in each paragraph. In the conclusion you could summarize the information of your entire text.

Persuasive texts

A persuasive text is a text a reader doesn’t necessarily want to read. The purpose of your text is to persuade your audience to do something (such as buying your product) it wasn’t necessarily planning to do. For that very reason, you will understand that writing persuasive texts is very hard.

The style of a persuasive text should be very bold. Your sentences and paragraphs should be short. You can either focus on convincing your audience with emotions or with logic.

If you choose to persuade with emotions, try to use a lot of positive words (like fun, easy, quality). Make your post personal and write from the perspective of the reader. You could for instance address the reader directly using words as ‘you’ and ‘your’. Anecdotes or stories illustrating the awesomeness of your product are very nice to use if you are trying to convince people by using emotions.

If you want to persuade using logic, you should take some time to write down all of your logical arguments. Make sure you deduce your arguments correctly and make use of examples to illustrate your arguments. Focussing on persuasion using logic calls for a relatively distant and formal style. Of course, you can also choose a strategy in which you combine persuading with emotions and logic.

The structure of a persuasive text should reflect your arguments. Make sure to use separate paragraphs for your arguments (regardless whether you have emotional or logical arguments). Use lots of headings and make sure you use the most important arguments in the titles of your headings.

Amusing texts

An amusing text’s main objective is to entertain people. Usually these texts tend to be funny. Amusing texts could also be moving or touching. A column is a very nice example of an amusing text.

Writing solely amusing texts will not be an activity many of you will undertake. Most texts will have both an amusing as well as an informative or a persuasive objective. Blogs on a mom blog often tend to be amusing (at least for women), but usually serve an informative or persuasive objective as well.

Writing in an amusing style is definitely very hard. Some people just have much more talent to be funny, to come up with funny anecdotes or with nice word plays. Perhaps you should not instantly aim for an amusing text, but try to master the informative and persuasive texts first. Using exaggerations and metaphors could be a first attempt to make your text (more) amusing. Amusing texts usually ask for an informal style. These texts are often very personal, containing the words ‘I’ and ‘my’.


Thinking about the objective of your post is something you definitely should take some time for. Take into account the long term aims of your business or your website as well. And make sure the objective of your post and the aims of your business are similar. Finally, use our tips to make sure the style and structure of your post fits your text objective.

This post first appeared on Yoast. Whoopity Doo!

The Salary Factor

Last week Eric Mann posted his 2014 Salary Survey Results covering some rough figures about our industry and the average salaries paid for different levels of experience. I like aggregated data in general, and it would be nice if more people take on that sort of studies in 2015, extending their horizons across the entire world, including web development companies in Asia, Africa, South America as well. Because “distributed” is a popular lifestyle in the WordPress Community, and it’s an important factor that we should never forget about.

Before I start, Brian Krogsgard posted about the cost of a WordPress website – which is a post that I truly love, and we’ve tried to cover some very rough numbers just to use as a reference for our prospects – and it’s so unfair as each project is so unique.

So far so good – I like the idea of the posts, I love the numbers, they’re great. But…

Is Salary The Only Factor?

The only paragraph that bugged me in Eric’s post was:

To the senior level developers earning less than their junior level counterparts, I raise an eyebrow and sincerely urge you ask for a raise at your next review. If you’re truly in a senior level position with all of the responsibilities that entails there’s no reason you should be earning just more than half the average salary for your role.

Now, that’s the part I really disagree with.

Because salary is not everything. Our jobs are not equal, our work opportunities differ, the job requirements as well. It’s similar to the client work – same work may come with different budgets, but the type of work could be appealing to some contractors, or the timing could be good, the requirements may be challenging and interesting and so forth.

Priorities and Job Requirements

Chris Lema writes a lot about high performers. These are the people who are incredibly excited about their job, work crazy hours (or just work effectively), and hit home runs. The fact that we’re discussing them as an exception is that the majority of the people are not high performers, for one reason or another.

There are people who value their own personal time. They value their family, or their hobbies, or they love to travel and want as much time off as possible.

Some of those (and others groups, too) insist on working remotely. Or at least telecommute a few days a week. Some of them ask for flexible hours, or demand not to have to work overtime every week. Others prefer game rooms in their offices, free lunch, or other company benefits.

Whatever that is, people have different priorities. And “higher salary” is not the main one for various developers. Companies like Google prove that with hundreds of additional benefits to keep their staff happy.

And even if it is, different companies require different things from their staff, by a different level of responsibility, and different amount of risk. Would you prefer to earn $80K leading a decent team and building interesting, but safe projects, or earn $120K being responsible for the infrastructure of the largest bank in the world, and all the risks from getting compromised, hacked, or anything else, and getting constant calls about false positives at 3am on Sunday morning?

I read an interview with a war hero who started at one of the largest online companies (I think it was Amazon). He said that he used to sleep fairly well during shootings in Afghanistan compared to all of the stress from the responsibilities managing the server infrastructure at Amazon. Can you even believe that?

How Valuable Are You?

I’ve been in every single stage of the business process – employee, freelancer, consultant, employer, partner, contractor, what not. And I’ve worked with clients and for employers in different situations.

One of the things that people often forget about is that their work reflects the company benefits. In other words – different clients/projects/companies have different benefit from working with you.

Depending on the industry, the size of the technical team (and company size), the company business model – your value varies. What do most people think about accountants or lawyers? They are a necessary “burden” but we “need” them, they are expensive and eat out of our profit without bringing any money on the table. What do accounting and law firms thing about accountants and lawyers? They are their main source of income!

Same goes for development. There are non-technical companies where development is a necessity, and costs should be kept to minimum. Other companies earn the majority of the profit throughout their online products in a natural way – therefore the profit from development is high.

Think about sales reps and managers. The potential of a sales rep in a retail store selling cheap shoes is one thing. A sales manager selling to Fortune 500 companies can close a deal over lunch for as much as the annual revenue of the entire company. Value differs, and so do the company terms, responsibilities, salaries, company benefits, etc.

Again, Location

Let’s talk about restaurants and comparable costs. The food market is not competitive at all outside of a small physical area. When you generalize about numbers, they’ll be almost the same in a city, or a state. Food is a business market that heavily depends on time and location – deliveries, expiration dates, people’s habits.

The web development business knows almost no boundaries. US clients work with contractors from Africa. Indian companies hire people in Europe (I’ve seen that). Canadian designers and British project managers deal with Australian projects.

Which is why the numbers differ here, too. Cost of life, opportunities for development, cost of services, etc. I can talk about that for days, but companies like Automattic prove that – there are great clients worldwide, awesome engineers as well. But there are a lot of opportunities for everyone, and we should always keep in mind the global market and the variable numbers across the world.

In Essence

To sum it up, I would gladly participate in and read on some numbers about salaries and costs in our industry. I’m passionate about that. And I’d also gladly earn as much as possible – because let’s face it, you can do everything you want with money – even donate 95% of it to charities – but you can’t afford it if the numbers don’t add up.

But let’s not compare apples and oranges only by price. And let’s consider the hundreds vectors that matter – and let the salary be just one of them.

The post The Salary Factor appeared first on Mario Peshev on WordPress Development.