Late last year I wrote down my 2017 WordPress resolutions. These were the goals I set myself (for better or worse) that I would like to achieve this year.
As we’re just over halfway through the year I thought it might be interesting to take a look back and see if I’ve made any headway on any of these items and whether I need to make some drastic changes for the next six months.
A more stable work environment.
If I think about it I have not yet quite achieved the ratio I had set out to, but there is some good news. I can’t remember when last I worked past 23:00 and I’ve even had some weeks where I didn’t have to catch up in the evenings at all. I have not yet been able to carve out time for plugin development though, so that is something I want to work on more. I can still be doing better with my project estimation so I’m constantly evolving that process.
5 for the future.
To be honest this has worked out, but in ways that I never could have imagined. Due to an unexpected set of circumstances I am the lead organiser for WordCamp Cape Town this year. I am enjoying this tremendously as I am really looking forward to putting together an even that could change someone else’s life as it did mine in 2015. I also recently joined the WordPress community team as a Community Deputy, meaning that currently I assist with vetting new WordPress meetup groups as well as hold Meetup orientations.
I still want to start contributing to WordPress Core as well as Calypso, the WordPress.com product, so I am looking forward to the the newly announced New Contributors meeting. I’ve also started learning React in order to look at contributing to Calypso.
REST API powered plugin
This one is still coming, as I’ve decided to build it using React for the admin sections (similar to Jetpack) so I need to finish my React fundamentals course first.
Twenty Seventeen theme
Sadly this won’t be happening this year, but I am getting a lot of experience using Twenty Seventeen on the WordCamp Cape Town site, so perhaps that counts?
This will also not be happening, however another podcast idea has revealed itself which is a much more exciting idea and one that will benefit way more people, so watch this space.
So, not to bad as far as I can see. I think I’m pretty close to completing at least 4 out of the 5 before the end of the year. I’ll check back in December and see how it went. How’s your year going? Any goals you’ve set that you’ve either achieved or are on your way to do so?
As a freelance WordPress developer/consultant I rarely work in a team environment. So my usage of Git is mostly for my own purposes of being able to have my code backed up somewhere and the ability to create branches to try out new pieces of functionality without affecting the ‘master’ code base.
Recently I was chatting to Simon Dowdles, another Cape Town based WordPress developer, about this. He is, in his own words, very strict about a Git workflow. We agreed that it would be a good idea to implement a better system, so we put his workflow into place.
- Development branch is where all UP TO DATE and approved code lives
- Master branch is the truth and is ALWAYS what is on production
- Feature/hotfix branches are branched off of develop and only come back into develop with a Pull Request
- Release branches are made off of develop for releases, the release is done, merged back into master and tagged with the appropriate version tag (ie 1.2.0)
- Release branch is deleted, and there is only ever one
On the surface this all seems very obvious but it is often something that one tends to dismiss when working alone on the code base. After working with it for a few days however I can already see the benefits.
Lets first look at a real work example of how this would work in practice.
Firstly the repository is going to need a develop branch. So inside the root of my project folder I’ll create the develop branch from the master branch.
git checkout -b develop
And then push the branch
git push -u origin develop
If the develop branch already exists I can just switch to it
git checkout develop
Now I will need to create my feature branch, to make my code changes. So while still on the develop branch, create a a feature branch
git checkout -b feature/my-cool-feature
I can now starting coding my changes, committing frequently. I tend to commit every time I complete a chunk of functionality. So if I fix a bug, I commit. If I add a function and its more or less complete I commit.
git commit -a
At the end of every day, or if I am going to leave my workstation for a period of time, I push all current commits to the feature branch.
git push -u origin feature/my-cool-feature
When I am convinced it is good to go, I will submit a pull request or PR. When I create my PR I will request that it is merged into the develop branch, NOT master.
As we are using GitHub for this project I prefer to use the web based tools to create a PR, but most of the other cloud based Git services provide similar tools.
The rest of the team will review this PR, which will involve testing. They will scrutinise my code and provide feedback and I will fix or alter things to suit the team/project coding style(s).
Each time I commit the above changes, the team in the PR is notified and will see the changes in the PR.
When everyone is happy, they approve the PR and I merge my PR into the develop branch. At the same time I can choose to delete my feature branch (which I typically do)
The develop branch now has more (stable) code in it, and part of my PR should have been a version bump. (for example let’s say to 1.0.1)
The team decides it is time to release version 1.0.1
First I need to make sure all my code is up to date
And then make sure I am in the develop branch. This is the branch that has all the approved code for the next release (1.0.1).
git checkout develop
I create a release branch called release/1.0.1 off of develop
git checkout -b release/1.0.1
The code gets deployed ( in this case its a WordPress plugin, so it means pushing all the code to the wordpress.org plugin repository, more on that another day 😉 )
I then merge the release/1.0.1 branch back into the master branch and tag it as release 1.0.1, again using all the GitHub PR, merging and tagging tools.
And we’re done, release 1.0.1 is in the wild and by following this approach, master is ALWAYS the truth. If for example release 1.0.2 were to fail, we simply roll everything back to master.
I’ve been working like this for three releases of the project so far and I have to say, once I had all the steps in my head, it did make developing, merging and releasing a lot smoother and more controlled.
Are you using Git as part of a team? If so I’d love to hear your comments on the idea of having a Git Workflow/Strategy.
Last year I caught the State of the Word on WordPress.tv after the event. This was mainly because a) I was fairly new to all things WordPress and b) I didn’t actually even know it was a thing. This year I knew about WCUS well in advance so I registered for the live stream and planned my life to be able to watch Matt’s talk. I am so glad I did.
The new things planned for WordPress in 2017 are really going to shake things up. I’m not here to report on those changes, I’ve leave that up to people way better than me, Brian from PostStatus and Sarah from WPTavern.
My take away from Matt’s talk was a deep introspection into what areas of WordPress I want to grow into next year. My goals this year were a) become fully self employed b) focus on WordPress as a platform c) speak at WordCamp. I’ve managed to achieve those goals, so it’s time to push myself a little harder in 2017.
As Matt put it so well (quoting Krista Tippet)
“We only learn to walk when we risk falling down, and this equation holds — with commensurately more complex dynamics — our whole lives long.”
It’s time for me to fall down a bit (again).
A more stable work environment
This past year has had it’s ups and downs (in more areas than one). For 2017 I want to focus on doing three things better.
1) A better work/life balance
2) A 25%/70% split on client work and plugin development
3) Project estimation
That last one is pretty important. One thing I have learned is that I still (after 12 years of doing this) tend to under estimate my time when it comes to project work. For 2017 I want to manage this better, not only when it comes to how long I think something will take, but also to value my experience more. This in in turn will allow me to split my development time in a way that I control (not the projects I’m working on) and be able to spend more time with my family
5 for the future.
You’re probably wondering about that 25%/70% split above, and where the other 5% is. That 5% of my development time I want to use in contributing better to WordPress. Some of the areas I want to become more involved in next year include:
WordPress Core, Calypso
Two areas that fall under the 5 for the future banner above are core and Calypso. By the end of 2017 I want to have contributed at least one patch to WordPress core and one patch to the Calypso project. This will help me become both a better WordPress developer and force me to learn React and Redux, two areas I have wanted to look into for some time now.
WordPress theme review
The WordPress theme review team is extremely under supported so I want to try and learn how to review a theme with the goal of being able to actually do one theme review once a month. I don’ know how long it will take me to get up to speed, but I need to start somewhere.
This year saw the inclusion of a new locale for South Africa (Xhosa) and two new locales soon to be submitted. While I do not speak these languages I am excited to assist the new Global Translation Editors in getting these languages up and running for WordPress.
This year I spoke, next year I plan to be a part of it, either as a volunteer or a member of the organising team. Watch this space…
REST API powered plugin
Next year I want to either build a new plugin or rewrite an existing plugin that uses the REST API for at least some part of it’s functionality. I already have an idea for which plugin I will be doing this with and I hope to get started on it very early in the new year.
Twenty Seventeen theme
Another thing I would like to do is have my personal blog run the Twenty Seventeen theme. I’ll probably need to spend a bit of time learning all the new stuff that has been released, but I am hoping this will lead to a continuing trend of my blog always running the official WordPress theme.
This is a personal project of mine, a podcast by developers aimed for developers. I have a specific idea in mind here and it’s really a passion project that I know I will enjoy and I hope you all do to.
That’s a whole list of things I want to achieve. I’m not fooled into thinking I’ll be able to do all of them, but at least I can try.
What are your resolutions for the new year?
Some time ago I wrote a blog post on remembering why I got into developing web applications in the first place. At the time I was struggling to find my focus as a developer. I’m happy to report that since then I have (more or less) figured that out.
I’ve since realised that one of my problems is that when I started out, I didn’t have a vision, mission statement or personal creed for why I wanted to do what I am doing. I just knew that I wanted to do it. Being on my own I didn’t think of such things, I tend to just rush in where angels fear to tread and then figure it out as I go along.
Today I was introduced to the Automattic creed and I was blown out of my socks. It really resonated with me, as every point in the creed is something that I believe in, a reason why I became a web developer and why I support and believe in open source as more than just a decision on software licensing. So, going into 2017 I am going to remind myself of this as much as possible.
Here is the Automattic creed:
I will never stop learning. I won’t just work on things that are assigned to me. I know there’s no such thing as a status quo. I will build our business sustainably through passionate and loyal customers. I will never pass up an opportunity to help out a colleague, and I’ll remember the days before I knew everything. I am more motivated by impact than money, and I know that Open Source is one of the most powerful ideas of our generation. I will communicate as much as possible, because it’s the oxygen of a distributed company. I am in a marathon, not a sprint, and no matter how far away the goal is, the only way to get there is by putting one foot in front of another every day. Given time, there is no problem that’s insurmountable.
That’s pretty powerful stuff!
This morning I gave a talk on the relationship between WordPress, the GPL and how if affects your business if you build products for WordPress.
I’m looking forward to seeing the video when it gets uploaded to WordPress.tv
October marks my second month at Codeable. My first month was very quiet, mostly because I was still busy with other things in September, including WordCamp. I also took my time getting into the Codeable process, commenting on only a few smaller tasks. I closed my first small task mid October, so I’m considering October as my first official month as a Codeable developer.
It should be noted that due to my other commitments I only have an average of about 20 WordPress development hours available in a week, which I try to split between plugin development, blogging and Codeable work. This means I tend to focus on smaller projects that don’t require my time for longer than about 4 – 6 hours a day, unless the deadline is very flexible.
Fellow Codeable expert, WordCamp speaker and all around nice guy Nathan Ello believes “transparency trumps secrecy” and I tend to agree with him. With that in mind, below you will find my income and client reviews from Codeable for the month of October.
Show me the money
First, a quick calculation. Based on the minimum number of hours I have available for Codeable development (4) and the Codeable minimum suggested hourly rate of $60, I am aiming to earn about $720 per week or about $2800 per month. For some this may not be much, but for my situation it is an acceptable amount (for now). I am also basing my income for the month on the amount I can withdraw on the 25th of that month, so any project I get hired for during or after that day, or that gets paid out after that date, gets moved into the following month.
So how did October go? To be honest it wasnt amazing, but I am happy with it. I’m already on a good path to more than double my October income in November and I’ve more or less figured out a good balance between Codeable work and my other ventures.
My total Codeable income for October is $504.50. Now as you will agree that’s only about a quarter of my target amount above, but I really only closed those projects in the last week of October. I was also hired for a task of about $1000 in October that is still ongoing and I have another project of a little over $1000 lined up for November. So November is already close to my target within the first week.
More important than the money is how my clients view my work. As I don’t have a lot of closed tasks for October I don’t have a huge amount of reviews on my profile, but those that I do have are very positive.
“Jonathan is The Best! Very knowledgeable and Very Professional. He is the right man for all Tasks. Glad to find him here. :)”
“Perfect teamwork. Clear communication and perfect coding.”
“A star! Smashing tutor”
A few thanks
Getting through the first few months at Codeable wasn’t easy with my specific situation. I had a few ups and downs, and I probably wouldn’t have made it this far without the help of the Codeable support team (Chris, Raleigh, Liam, David and Per) and a few fellow developers (Justin, Robin, Panos and anyone else I’ve forgotten to mention, who make hanging out on the Codeable Slack a blast) who helped and guided me along the way. A special shout out to Justin who had a nice little chat with me on Slack one day and gave me the push I needed to get back up in the horse, thanks man!
October was OK, November is already looking good, here’s to wrapping up the year on a great footing to kick off 2017 with a bang at Codeable!
(Disclaimer, links to ServerPilot and Digital Ocean contain referral codes, if you use them and make a purchase you’ll be putting a few extra $’s in my pocket)
As the web and it’s associated technologies move ever forward, the solutions available for hosting your website are about as abundant as the options available for creating it.
One of my favourite advances in hosting options has been the advent of Virtual Private Servers or VPS. What I like about VPS is that it gives you the same level of control to the base system as a physical server, but at a fraction of the cost, and with similar performance to a physical server. Over the years services like Amazon AWS, Digital Ocean and Linode have really reduced the cost of creating and managing your own web server using VPS technology. The only problem with using a VPS is that you need to have a level of understand of server technology, software and server administration to be able to setup and manage such a server, something which most web designers, developers and builders do not.
With this in mind I was quite pleasantly surprised when someone pointed out ServerPilot to me. ServerPilot provides a fast, managed and secure way to manage your VPS without needing too much technical knowledge. On installing ServerPilot on your newly purchased VPS, you are given tools which allow you to create and manage multiple PHP apps on your server. What is even better is that ServerPilot supports WordPress straight out of the box, so setting up a new blank WordPress site is a simple matter of clicking a few buttons.
Without a doubt one of the things I love about ServerPilot is the technology stack. It’s built using Nginx in front of Apache, comes pre installed with PHP-FPM and supports PHP 5.4, 5.5, 5.6, 7.0, and 7.1, all on the same server. It even installs and configures a firewall on your server as well as SecureFTP access, automatically updates itself and supports LetsEncrypt SSL, giving you the option to install and configure free SSL certificates for all your sites. Finally, depending on the package you choose, it provides various levels of server monitoring, from basic server CPU and Memory usage, all the way up to slow script reporting.
ServerPilot is about the best tool for web professionals who would like a little more control of their (and their client’s) hosting options. At $10 for the ‘Coach’ version, you can install and manage as many servers as you like. It’s designed to use Digital Ocean servers, but supports the majority of the VPS services out there (Amazon AWS, Rackspace, Linode, Microsoft Azure, Google Cloud).
If you are currently using VPS based services or are looking for alternatives to your current hosting provider, I highly recommend to try out the free version of ServerPilot. If you don’t want to spend any money on the VPS to try it out, you can use my Digital Ocean referral link for a $10 credit, which is enough for a 512MB droplet for two months, more than enough time to test out the service.
A short while about (July to be exact) I published a post about why I got into software development. At the time I was dealing with a bit of a personal crisis. I had reached a point (for the second time) of burning the candles at both ends so much that I was probably not thinking straight. So I had this daft idea to launch a Patreon account to try and crowd fund my goals. No prizes for guessing how that turned out.
What that post did however do for me is define why and more importantly how I want to make my living as a freelance developer. It also helped me realise that perhaps the tools I need to be using are out there and I just need to take the proverbial bull by the horns. So, with that in mind, I am very happy to announce that I am, as of September, one of the newest experts at Codeable.
If you have never heard of Codeable, it is the worlds #1 WordPress specific outsourcing platform. The founders, Per and Tomaz, are WordPress experts themselves and their business model and making huge inroads into bringing expert WordPress developers in contact with realistic clients who appreciate and understand the value of paying a fair price for excellent work. I’m happy to say that I’ve already completed my first few tasks at Codeable and collected a couple of great reviews.
Working at Codeable does mean that (for now at least) I have a little less free time for blog writing and replying to comments. If you were one of the people who commented on my articles during September, this is where I apologise for my lack of replies. Going forward I’m going to try and focus on publishing at least one web development specific blog post a month, so bear with me. I don’t have an army of writers like the guys at Elegant Themes.
Oh, and if you want to hire me to work on your project, just use the ‘Hire Me’ link over on the menu.
An open letter to all Divi plugin developers:
Please, copy my ideas!
I am, first and foremost, an open source developer. That means I believe that if you have a piece of software, either purchased or obtained freely via open source repositories, you should be allowed to ‘study, change, and distribute the software to anyone and for any purpose‘ (definition of open source software from Wikipedia). Secondary to that, I am a problem solver. I get great satisfaction when I can solve someone’s problem, specifically if it is with a piece of software I develop.
With that in mind, if I develop a plugin for Divi and you are developing/planning to develop a plugin for Divi that does the same thing or think you can do it better, please don’t stop. Build it, ship it, make it happen.
One of two things will occur.
- Your plugin will be superior to mine
- Your plugin will be just a copy of mine, with little to no added benefit.
Let’s consider both options
If your plugin is superior to mine, I will (silently, or maybe even publicly) congratulate you. If we ever end up discussing it, I’ll probably even share my original source code with you, if it helps you improve yours. In fact I’ve done this before with the developer of the Image Intense plugin. Image Intense does so much more than my little Image Overlay plugin every will. When I recently ended up in a discussion with the developer (over a totally separate post I shared and he found use for), he mentioned his soon to be released plugin with me. I shared my source code with him on the spot, should he ever find any use for it. Don’t believe me? Ask him yourself.
If your plugin is just a copy of mine, I’ll simply shrug it off and move on with my life. I’m actively working on new plugin ideas every week (literally, I was working on one this week and another plugin idea came to me, via a conversation with a previous client, which I started on the prototype for) so if you make something that copies anything I do, I’ll take it as a compliment. After all, they do say that “Imitation is the sincerest form of flattery.”
There are some things that I do find reprehensible.
I personally feel that if you are a developer/designer/site builder and you are using a piece of software for a client project that requires payment to obtain, you should at least pay for that plugin. I’ve seen sites where premium plugins and themes are listed free to download, citing the GPL is the legal reason why they can do this. Legally they are not wrong, nor ethically, as the GPL allows for this (see my definition of open source above). But I do feel that if you are selling your services as an expert, but part of your expertise is using a specific plugin to achieve a desired result, you should at least buy that plugin for your arsenal of tools. Having said that, because it’s GPL, there’s not really much anyone can do about it. You’re allowed to, so if you have no issues with doing it, then so be it.
I also do not agree with the concept of just copying and re-branding someone else’s code as your own. So if you buy any of my plugins, or obtain a copy of them via some other means, copy all the code verbatim but give it a new name to sell on your website (and I find out) I will call you on it. However, again because it’s GPL, there’s not really much I can (or will) do about it.
Competition is a healthy, natural part of being in business. As far as I am concerned, competition breads innovation. So please, compete with me, show me what you can do and I’ll show you what I can do. If you can do it better than me, great. My motto is not to be better than anyone else, but just to be better than the person I was yesterday.
At the end of the day the people who really win are our customers. And isn’t that the reason we got into building products in the first place, to solve our customers problems?