bradt.ca https://bradt.ca/ Founder & CEO @ SpinupWP Sun, 31 Aug 2025 16:03:26 +0000 en-US hourly 1 https://wordpress.org/?v=6.9.4 No Clicks, No Content: The Unsustainable Future of AI Search https://bradt.ca/blog/no-clicks-no-content/ https://bradt.ca/blog/no-clicks-no-content/#comments Sun, 31 Aug 2025 15:34:38 +0000 https://bradt.ca/?p=99688 AI companies are causing a content drought that will eventually starve them.

The post No Clicks, No Content: The Unsustainable Future of AI Search appeared first on bradt.ca.

]]>

AI companies are causing a content drought that will eventually starve them.

In a recent article, The Economist didn’t mince words: “AI is killing the web.” Published last month, the piece raises urgent questions about how artificial intelligence is reshaping the internet as we know it: ChatGPT, Google, and its competitors are rapidly diverting traffic from publishers. Publishers are fighting  to survive through lawsuits, partnerships, paywalls, and micropayments. It’s pretty bleak, but unfortunately I think the situation is far worse than it seems.

The article focuses mainly on the publishing industry, news and magazine sites that rely primarily on visits to their sites and selling ads. This is hardly new for the publishing industry. Televisions arrived in living rooms in the 60s disrupting print and radio media, in the late 90s and early 2000s the internet further devastated the print business, and social media was stealing attention well before the advent of AI. But it’s not just the publishing industry. There’s a much larger economy being disrupted by generative AI platforms.

For the past 25 years, online businesses have relied on people searching Google for information and clicking through to their sites to get the information. For example, a business that sells dirt bikes might create a comprehensive guide to winterize a cottage. People search for information on winterizing their cottage, click through to the dirt bike company’s guide, and are then exposed to the company’s brand, maybe join their email list, and maybe buy their products or services.

Now that ChatGPT and Google are serving the information up to people, there’s little reason to click through to the site. If you’ve used Google search lately, you’ll have noticed an AI blurb responding to your query before you even see a list of links. The result: less clicks on the links.

So the question follows, if fewer and fewer people are visiting your company site, what’s your incentive to produce and maintain high quality content?

Worse yet, ChatGPT and Google rely on the content produced by businesses to train their AI models. If businesses stop producing content, what happens to the answers provided by ChatGPT and Google?

Could AI companies be this short sighted?

In short: Yes. This is a gold rush mentality. And like any gold rush, there’s little attention paid to the long term. It’s get rich quick and we’ll deal with the consequences later. It’s a race to become the dominant force in AI with no attention paid to the sustainability of their fuel source: the content.

However, Google doesn’t fit this profile. They’ve needed businesses and publishers to produce content all along and they know they still do.

We, the public, have greatly benefited from the symbiotic relationship between businesses and Google. You ask Google for something and it responds with links to the best content. Businesses want those visitors to their sites and so they want to have the best content. Although Google’s results pages have gotten worse for the public and businesses in recent years (half a page of ads at this point), the situation has largely been a win-win-win for them, businesses, and the public.

Businesses produced and maintained quality content, Google rewarded the businesses with visitors while diverting some to their ads, and the public got the information they were searching for. Unfortunately this symbiotic relationship is breaking down. In their effort to stay relevant and compete with ChatGPT, Google is tearing up the contract they’ve had with publishers and businesses for the past 25 years.

Google knows this but they seem to be pretending that they don’t. In fact, it seems that they’re scared and they don’t know what else to do. They have no other option.

One solution here seems to be regulation. To many, it feels like an injustice that AI companies can scrape information from sites, combine it, and serve it up to their users. The bottom line is that if the content didn’t exist to train their models, the AI companies wouldn’t be able to produce an answer.

Unfortunately, lawsuits so far have been going in favor of AI companies. Copyright law doesn’t seem to be a fit here, so perhaps we need new laws. I doubt they’ll come quickly enough though. Google search is rolling out AI Mode right now: no more AI blurb with links underneath. Just a ChatGPT-like interface when you do a Google search. It seems we’re already well into this trap and there doesn’t seem to be an escape.

Then again, there’s definitely an economic bubble here. ChatGPT is not profitable despite billions in revenue. The infrastructure is very expensive to run. Perhaps the bubble will burst, the money will dry up, and it won’t be feasible to employ generative AI for general search. Google and its competitors will use it for other things of course, but not for search. It’s hard to see this happening though. The genie is out of the bottle.

The post No Clicks, No Content: The Unsustainable Future of AI Search appeared first on bradt.ca.

]]>
https://bradt.ca/blog/no-clicks-no-content/feed/ 5
How to Make a PDF Look Scanned Using ImageMagick and Automator in macOS https://bradt.ca/blog/how-to-make-a-pdf-look-scanned-imagemagick-automator-macos/ https://bradt.ca/blog/how-to-make-a-pdf-look-scanned-imagemagick-automator-macos/#comments Thu, 22 Apr 2021 15:39:10 +0000 https://bradt.ca/?p=19960 Is someone asking you for a “wet signature” and yet they still want you to scan the document and email it to them? Are they asking you to print-sign-scan-email a document? What a waste of ink, paper, and most importantly, time! Ideally we could do this all digitally. Ideally I could add an image of […]

The post How to Make a PDF Look Scanned Using ImageMagick and Automator in macOS appeared first on bradt.ca.

]]>
Is someone asking you for a “wet signature” and yet they still want you to scan the document and email it to them? Are they asking you to print-sign-scan-email a document? What a waste of ink, paper, and most importantly, time! Ideally we could do this all digitally. Ideally I could add an image of my signature to a PDF and then run it through some kind of “scanify” processing to rough it up a bit and make it look scanned. I’ve come up with a DIY solution using free tools to do exactly this.

Why not use an online tool?

If you search for “make pdf look scanned” you’ll notice that all the top results are online tools that invite you to upload your PDF and promise to spit out a roughed up PDF that looks scanned. But can you trust them? Does your PDF contain banking information, medical details, or other sensitive information that you definitely wouldn’t want to share with just anyone?

Identity theft a legitimate concern these days and I certainly don’t want to share my PDFs with these faceless online tools. This is the perfect example of a situation where desktop software is better than cloud-based software.

Adding a Signature to a PDF using Preview app in macOS

Preview is an app that’s included with macOS and is great for filling out PDFs and adding signatures. I’ve been using it for years for this.

Start by opening the PDF in Preview app. If Adobe Acrobat has taken over as your default PDF app, you’ll need to right-click, go to Open With, and select Preview.app from the list:

If you’d like a copy of the PDF I’m using here, you can download a copy.

In Preview app, click the Show Markup Toolbar button:

To add text to the PDF, click the text button:

Edit the text and then drag it to where you want it placed:

To add a signature, click the Sign button:

You are then prompted to add your signature:

I tried signing using the trackpad and iPad options but found the results pretty disappointing. I found a big difference between my signature made these ways vs one made with a pen and paper. For best results, I recommend using the Camera option, where you hold up a piece of paper with your signature on it to your camera.

You only need to do this once. Once you have your signature added to Preview app, it’s there until you remove it. Now you can click on the Sign button again, click your signature, and it will be added to the PDF for you to drag into place.

(That is not my real signature.)

Installing ImageMagick via HomeBrew

Now that we have a PDF all filled in and signed, we need to scanify it, make it look like it was scanned. For this we need tools.

First, open a Terminal window. (If I’ve already lost you, the rest of this tutorial probably isn’t for you, unless you’re keen for a lot of learning.)

If you don’t have HomeBrew already installed on your Mac, install it now:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Install ImageMagick via HomeBrew:

brew install imagemagick

Now let’s see if ImageMagick is installed:

convert -v

If you get a ton of output and scrolling up you see something similar to the following, then you have ImageMagick successfully installed.

Version: ImageMagick 7.0.10-21 Q16 x86_64 2020-06-23 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(3.1) 
Delegates (built-in): bzlib freetype gslib heic jng jp2 jpeg lcms lqr ltdl lzma openexr png ps tiff webp xml zlib
Usage: convert [options ...] file [ [options ...] file ...] [options ...] file

Image Settings:
  -adjoin              join images into a single multi-image file
...

Scanifying Your First PDF

Now let’s try running our PDF through ImageMagick to rough it up and make it look scanned:

convert -density 300 ~/"Downloads/Agreements/Contractor Agreement Template (Public).pdf" \
-alpha remove -rotate 0.33 -attenuate 0.15 +noise Multiplicative +repage -monochrome \
-compress group4 ~/"Downloads/Agreements/Contractor Agreement Template (Public) Scanned.pdf"

Unless you’ve named the PDF the same as mine (Contractor Agreement Template (Public).pdf) and put it in the same folder (~/Downloads/Agreements/), you will need to modify the two paths of the PDFs before running this command.

Roughing up a PDF is actually a pretty CPU intensive process. My 2019 MacBook Pro wants to take off (fan runs pretty hard) when I run this command on a simple three-page PDF. It only takes 16 seconds to run, but uses a lot of CPU. For larger PDFs, it can take longer and my laptop fan really starts humming.

Anyhow, after running this you should end up with a second, crappier looking PDF. Each page should consist of one big image. If you try select any text, you’ll find out you can’t. Each page should be a little crooked and the text should be a little blurrier.

Download the roughed up PDF

Using Automator to Add a Scanify option to the Quick Actions menu in Finder

Great, we can now rough up a signed PDF so that it looks like we print-sign-scanned it. But it’s kind of a pain to have to open Terminal app and run commands. Wouldn’t it be nice if we could just right-click a PDF and choose a Scanify option? Turns out we can using the Automator app in macOS.

Open Automator app, choose New Document, then select Quick Action, and hit the Choose button:

Update the settings to Workflow receives current PDF files in Finder:

I also like to update Image to Documents, but that’s optional.

Now select Utilities and drag Run Shell Script to the workflow area:

Change the “Pass input:” option to “as arguments”.

Paste the following shell script into the box:

for f in "$@"
do
	fullname="${f##*/}"
	filename=$(basename $fullname .pdf)
	path="${f%/*}"
	cd $path
	/opt/homebrew/bin/convert -density 300 "$f" -alpha remove -rotate 0.33 -attenuate 0.15 +noise Multiplicative +repage -monochrome -compress group4 "$filename Scanned.pdf"
done

Type CMD-S to save and give it it the name Scanify when prompted:

Now you can run Scanify by right-clicking a PDF in Finder:

How awesome is that? Let me know by leaving a comment below.

The post How to Make a PDF Look Scanned Using ImageMagick and Automator in macOS appeared first on bradt.ca.

]]>
https://bradt.ca/blog/how-to-make-a-pdf-look-scanned-imagemagick-automator-macos/feed/ 4
2015 Year in Review https://bradt.ca/blog/2015-year-review/ https://bradt.ca/blog/2015-year-review/#comments Fri, 15 Jan 2016 16:44:13 +0000 https://bradt.ca/?p=18974 TL;DR — The Delicious Brains team more than doubled in size, revenue nearly doubled, and we started selling a second product. I had a great year personally playing ultimate, tennis, and traveling to Mexico. Wow, look at that, I only published one lonely article here in 2015 and it was my year in review. But […]

The post 2015 Year in Review appeared first on bradt.ca.

]]>
TL;DR — The Delicious Brains team more than doubled in size, revenue nearly doubled, and we started selling a second product. I had a great year personally playing ultimate, tennis, and traveling to Mexico.

Wow, look at that, I only published one lonely article here in 2015 and it was my year in review. But hey, I did write 13 posts on the Delicious Brains blog and recorded 20 episodes of Apply Filters. That’s more than I’ve ever published in a year for sure.

This is only my second year doing a year in review post. I really enjoyed doing one last year and found it valuable not only to look back but to set goals going forward.

Professionally

2015-revenueDelicious Brains Inc. was the focus of my work again. The year started out a little shaky revenue-wise. The holiday dip that started in November continued through February.

I was hoping it would bounce back in January and it stressed me out a bit when it didn’t. We had just hired two full-time developers and had two others on trial to go full-time. Fortunately things bounced back in March and we had our best month ever. Things kept growing from there and by year’s end revenue was up 81% over the previous year.

The growth of WP Migrate DB Pro was the bulk of this. In August we launched a new product, WP Offload S3 and it exceeded expectations, giving our bottom line a nice boost as well.

One of the main drivers of our growth has been the rise in quality traffic to our site. It tripled from February to December!

2014-2015-traffic

This is largely due to publishing quality content on our blog every week. We made a commitment to this at the start of the year and following through on it really paid off. We ended up writing 44 articles. A huge change from the 3 articles published the year before.

One of the reasons we were able to publish every week was our team. We added three full-time developers in the first half of the year: Ashley, Jeff, and Gilbert. That brings the team up to 6 (including myself) and with everyone on the team writing, each team member only had to write an article every 6 weeks or so.

Our team in MiamiThe entire team met in-real-life for the first time in May. We rented a villa in Miami Beach, attended WordCamp Miami, and although there were some hiccups with the accommodation, we had a great time overall.

WP Migrate DB saw 4 major releases this year. 2 addons had a major revamp, a new addon was released, and a massive release of WP Migrate DB Pro was released:

In 2016 I hope to do a better job limiting the scope of our releases so that we can push out smaller releases more often.

Our new plugin, WP Offload S3 saw 2 major releases: the launch release followed by a batch of minor releases that amounted to a major release:

There’s also plenty of stuff we’ve been working on that hasn’t seen the light of day yet, the big one being Data HawkMergebot, our solution to the database merging problem.

I’m really proud of the team we’ve built, our culture, and what we’ve accomplished in 2015. Really looking forward to pushing ourselves in 2016 and adding some new faces to the team.

Conferences

I attended 5 conferences in 2015, compared to 2 the year before.

It started with PressNomics in Phoenix and Big Snow Tiny Conf in Vermont. They were back-to-back events, so while I had a great time reconnecting with friends in Phoenix, I was pretty burnt out by the time I arrived in Vermont.

Lesson learned: go home after a conference.

I find conferences exhausting. Late nights, early mornings, drinking, eating junk, and no exercise over several days takes its toll. But late night drinks is where the magic happens. Relationships level up and the best ideas come out. You have to dig deep, give 110%, etc.

Big Snow Tiny Conf 2015Fortunately the snowboarding, sauna, and home cooking at Big Snow Tiny Conf helped rejuvenate me and I had an awesome time. The mountain conditions were perfect. The temperature was just right and we had a little fresh powder fall both days. The house was great, just as advertised. All the attendees (most I hadn’t met before) were awesome people and we had some really productive discussions over scotch and beers.

MicroConf Las Vegas was a blast again in 2015. It’s the conference I get the most value out of by far. I also recommended it a ton in 2015. I can see myself going back year-after-year, though not in 2016 due to a scheduling conflict.

In December I flew to Philadelphia to attend the WordPress Community Summit for the first time. It was great to meet the people I knew from Trac and WordPress Slack, sit in on discussions with very smart people, and contribute in some small ways. I also attended WordCamp US right after the summit. Apparently it was the biggest WordCamp ever, which isn’t hard to believe if you were in attendance. It was huge. I met a ton more people, went from one late night web hosting company party to the next. Exhausting, but excellent. I plan to attend the next one.

Personally

Another great year personally. The family was happy and healthy again, which is the main thing. I’m grateful for having so much time to spend with my sons and watch them grow, but admittedly I often wish I could be doing something else. I didn’t truly appreciate how much I value me-time until I had kids. My wife and I are both career-driven people so it’s been challenging for us.

I think the thing that has changed my personal life the most in 2015 has been yoga. I had a hard time getting into it but eventually found a flavour of yoga that worked. I wrote about it in a piece for the Delicious Brains blog:

Six months ago I decided to give yoga a try. Most of the yoga for beginners videos I found on YouTube were very….I’ll say silly. I don’t dig the narrative or tone of most yoga instructors. For example, an instructor saying “Feel the energy flowing to your fingertips” in a soft voice just seems so phony to me. Anyways, I ended up searching “yoga for men beginner” on YouTube and found a series of videos by Sean Vigue. He’s a little goofy and does some upselling, but no soft voice phoniness.

After weeks of doing his videos, I ended up buying his book, Power Yoga for Athletes. I’ve been using that exclusively as I prefer setting my own pace rather than going at the video’s pace. It’s also nice to not have a screen on. Overall it’s been great. I’ve been progressing fast, doing more difficult poses, and greatly improving flexibility. It feels really good after doing a session, so much so that I get annoyed when there’s a day I can’t do one.

In a typical week I’ll have 3 days where I do 20 mins of yoga and 2 days where I’ll do 20 mins of HIIT. I’ll play 2 matches of tennis and a hockey game. In the summer, I’ll head to the nearby soccer field and do some ultimate (frisbee) running drills before lunch a couple of days.

In February, my wife and I took our 5 month old son to Mexico to escape the harsh Canadian winter for a week. This was my first trip to Mexico and given my love of fine tequila and Mexican food I had high expectations, but even those were exceeded. I loved it.

View from the porch of the hotel roomWe booked a boutique hotel in the center of Playa del Carmen, which I highly recommend. Although we mostly hung around Playa, we did take a day trip to Tulum and had lunch at a tiny beachfront restaurant which I also highly recommend. We also went to Cenote Azul for a half day where the fish nibble at your toes.

Snowed InOn the day we were supposed to fly back home our flights were cancelled due to a snow storm, so we got an extra day in Playa! The shoveling I had to do when I got home was ridiculous. The trip would have been perfect except for the fact that we had to deal with a crying baby during the nights and getting up early.

In the summer I captained/coached/played Borderline, the Atlantic mens 33+ ultimate frisbee team. Unfortunately we came up short of our goal of getting a medal at nationals, losing a game we should have won and missing the quarters by a +/- differential. Very disappointing, but I learned some lessons.

I also continued to play tennis, playing stronger opponents, losing and learning, and improving my game. I played in my first tournament since I was a teenager and got knocked out in the first round. I still have a long way to go to reach my potential, so I’m really looking forward to continuing to study the game and improve this year.

It feels a little aristocratic to say, but we hired a cleaner to clean the whole house once a week. It has taken a huge weight off our shoulders. The house is always pretty clean and even as it gets dirty we know it will be cleaned soon. One less thing on our plates and well worth the cost.

For books, I didn’t consume much non-fiction in 2015, but I do highly recommend the audiobook The Art of Learning by Josh Waitzkin. The author narrates his own story really well which is why I recommend the audiobook. Reading probably works too. I also listened to The Inner Game of Tennis again when I was in a tennis slump. Highly recommend that book too.

The Tim Ferriss podcast has been hugely influential for me this year, here’s a few of those episodes and things that really stuck out for me:

2015 Goal Checkup

Looking at the goals I had set a the beginning of 2015, I’ve mostly met them. I failed to free up more of my time for creativity by offloading project management tasks. I am making that a top priority this year.

I had planned to launch an Amazon SES plugin but I changed my mind on the business model and shelved it for now. I was also hoping to launch Mergebot, but the project ended up as more of a prototype and not really fit for release yet. We ended up spending a lot more developer time on WP Offload S3 than I had anticipated, which took away from the other projects.

On the personal side I think I did continue an informed, healthy lifestyle and diet and continued to learn, adjust, and adapt.

Professional Goals for 2016

  1. Get project management tasks off my plate
  2. Launch Mergebot
  3. Launch WP Offload SES plugin
  4. Grow revenue (hopefully double)
  5. Hire for a non-developer role
  6. Grow team (hopefully 3 more)

Personal Goals for 2016

  1. Keep a daily private journal
  2. Hell Yea! or No
  3. Travel for fun, exploration, adventure, experiencing new cultures
  4. Continue to improve at yoga
  5. Travel to play a tennis tournament
  6. Continue an informed healthy lifestyle and diet
  7. Continue to learn, adjust, and adapt

The post 2015 Year in Review appeared first on bradt.ca.

]]>
https://bradt.ca/blog/2015-year-review/feed/ 1
2014 Year in Review https://bradt.ca/blog/2014-year-review/ https://bradt.ca/blog/2014-year-review/#comments Tue, 06 Jan 2015 13:08:52 +0000 http://bradt.ca/?p=18212 While reading the many year in review posts, I couldn’t help but reflect on my own year and decided it would be worthwhile to spend some time reflecting, digging through my calendar and email, and writing a review myself. I’m amazed at how quickly I forget what was going on even 6 months ago. Professionally Unfortunately 2014 started off with […]

The post 2014 Year in Review appeared first on bradt.ca.

]]>
While reading the many year in review posts, I couldn’t help but reflect on my own year and decided it would be worthwhile to spend some time reflecting, digging through my calendar and email, and writing a review myself. I’m amazed at how quickly I forget what was going on even 6 months ago.

Professionally

Unfortunately 2014 started off with a bit of a bummer. There was a big storm on the East Coast, flights were cancelled, and I wasn’t able to make the tiny conference Brian and I had organized. We have over double the number of attendees this year, so really hoping the weather is ok at the end of this month.

On the up side, I was able to make it to my first MicroConf and my first WordCamp in the US. I also gave a talk in Miami which I thought went pretty well. Both events were electric. I plan to make it back to both this year and look forward to catching up with friends.

Screen Shot 2015-01-05 at 11.20.49 AMDelicious Brains Inc has been the focus of my work this year and what a year! In the last 10 months of 2014, revenue was up 2.4x over the previous 10 months. (Doesn’t make sense to compare 2013 with 2014 because we only launched in April 2013.)

It was really great to see nice healthy growth happening month-over-month. I was hoping to double revenue in 2014, so I was very happy with the numbers. The big dip in November and December was a bit disappointing, but to be expected around the holidays.

As for the product itself, I was very happy with how we pushed WP Migrate DB Pro forward. We pushed out 24 releases of the core plugin and its addons, including a new CLI addon in June. We managed to restructure the pro version to share a codebase with the free version. We had Daniel Bachhuber do a code audit which identified lots of improvements we’re still working through. We setup unit testing, Travis CI, and Scrutinizer.

Another highlight was hiring. It started out rocky, but I feel like we have a good process in place now for bringing on new people. We started half heartedly in April with just a job post on our site. Then we emailed our lists. Then I published an apprenticeship offer on this blog. From June through August we had 5 developers do trials that didn’t work out. Then in September, we were very happy to have Ian accept our offer to go full-time after a smooth trial. And later that month Iain accepted an offer to go full-time as well. A month later Chris left to pursue his own thing, which was a bit disappointing, but on the upside we were still +1 full-time developer on the year.

I feel like I’ve learned a ton about hiring but have still only scratched the surface. The book Who: The A Method for Hiring was very insightful. Probably the most impactful thing I took away from that was that a company should always be in the process of hiring. And so we’re hiring now and always will be going forward. We even have a couple of developers on trial at the moment.

Throughout 2014 I struggled to find a marketing channel that worked. Definitely discovered more channels that didn’t work. BuySellAds, Facebook, and Twitter all performed poorly. By August I had pulled all campaigns and was only running retargeting. I’ve heard similar things from others businesses though, so it makes me feel a bit better.

I also heard others saying content is king throughout 2014. I kept saying I’d publish more screencasts and blog posts but never did. That is probably my biggest regret professionally for the year. I just couldn’t rationalize putting developer time into producing content over writing code.

The good news is that I’ve given my head a shake and already formalized a publishing schedule and guidelines for producing content going forward. We should start publishing an original piece of quality content every week starting at the end of this month. Keep an eye on the Delicious Brains blog. I’m really looking forward to see how it’s received and how it impacts traffic and sales.

I also explored a business idea in 2014 with Jason Schuller. We called it Test Driiive. Similar idea to Ninja Demo, but a SaaS. We hired Daniel Bachhuber to build a prototype. Although those we approached initially liked the idea, they changed their mind after we asked them to implement the prototype. They didn’t like the idea of depending on a 3rd party. We ended up scuttling the project and releasing Daniel’s work. Although it didn’t work out, it was a fun little experiment and learning experience.

Personally

10643874_650918641673053_2093146818_nOverall it was a great year personally. The family is happy and healthy, which is the most important thing. The biggest event of the year happened in September. We welcomed a new addition to the family.

Dealing with an infant and a 2.5 year old at the same time has been a challenge. When it was just one, my wife and I could hand off while the other takes a breather or gets some work done. No longer possible with two. No more getting a few hours work done on Saturdays and Sundays. Not a big deal, but an adjustment for sure.

10494932_10152600678454669_4524487480039901277_o_2To stay healthy I continued to tweak a short but intense workout routine and ran it most weekdays. I also played hockey and ultimate frisbee quite a bit throughout the year. In March, I helped my rec league hockey team win the league championships and helped my beach ultimate team take home the championship at Parlee Beach. My first tournament wins ever.

In June, we finally sold our home and moved 40 mins to the town where my wife works and my son is in daycare. I can’t express how awesome it is to be in a town again. No more getting on a highway to go anywhere. Every time I get on the bike I feel very fortunate. I’ve also joined the tennis club and started hitting balls for the first time in over 5 years. Pretty rough at first, but it’s coming back.

Feels really great to be renting again. We managed to get an awesome 4 bedroom home in a great neighbourhood. The fenced-in backyard is amazing for the kids. We had owned a big century farmhouse, so there was always a constant nagging of things to do. With both my wife and I having careers and raising kids, upkeep issues were a pain. Moving has been a huge weight off our shoulders and simplified our life a lot.

Goals for 2015

I’m not a fan of setting hard and fast goals. Increase metric X by Y and all that.

Sure they’re measurable, but I find it sucks the fun out of things for me. “Read 50 books in 2015.” No thanks. I currently enjoy reading and forcing myself to read just so I can check a box would ruin it. And where did 50 come from? I’ll give you a hint: I was standing up.

I like a broad goal and a “hopefully”…

  1. Grow revenue (hopefully double)
  2. Employ more developers (hopefully double)
  3. Free up more of my time for creativity (offload more project management tasks)
  4. Launch Amazon S3 & CloudFront Pro
  5. Launch new Amazon SES plugin
  6. Launch a solution to avoid database merging
  7. Continue an informed healthy lifestyle and diet
  8. Continue to learn, adjust, and adapt

The post 2014 Year in Review appeared first on bradt.ca.

]]>
https://bradt.ca/blog/2014-year-review/feed/ 4
Developer Founders Should Start with Hiring a Developer https://bradt.ca/blog/developer-founders-start-hiring-developer/ https://bradt.ca/blog/developer-founders-start-hiring-developer/#comments Tue, 09 Dec 2014 15:51:49 +0000 http://bradt.ca/?p=17877 Developer founders going at it alone should hire a developer from the beginning so they can spend more of their time on things other than writing code.

The post Developer Founders Should Start with Hiring a Developer appeared first on bradt.ca.

]]>
TL;DR – Developer founders going at it alone should hire a developer from the beginning so they can spend more of their time on things other than writing code.

photo-1416339442236-8ceb164046f8

I’ve been reflecting on how amazing it is to be a software developer with entrepreneurial ambitions in the times we live in. Today a developer can start a business by investing no more than their time. Have a software idea? Open an editor and start coding.

Thirty years ago if you wanted to bootstrap a new business, you either borrowed money or used your own savings to cover the startup costs.

But just because you can start a business by doing all the coding yourself and spending no cash, should you?

I don’t think you should and I’ll give you six reasons why. Let’s start with most important reason first.

1. User Experience

It is extremely important to get the user experience (UX) of your product right. In fact, I would say this is the most important element in the development of a new software product or service. If the UX is a mess, people are going to bail.

Your first priority as a product developer should be to get all the little details right so that the product is a pleasure to use. Good enough doesn’t cut it. If the first impression is a bad one, it’s unlikely you’ll get (or keep) peoples’ money.

Doing all the coding and also ensuring that the UX is optimal is extremely difficult. To do both simultaneously requires a super human level of discipline. I’m not saying it can’t be done. It’s just very rare to be able to do both well. (Drew Wilson is an example of one of these rare individuals.)

I don’t have this level of discipline. When I code, I take the path of least resistance and it sometimes results in a suboptimal UX. I might even consider the optimal UX before starting to code. Might even lay it all out in mockups or a requirements document. That helps, but when I set out to code and realize how much more work it is going to be to achieve that optimal UX, I sometimes convince myself to change the requirements.

And I bet that sometimes you would too.

Let’s say you need to allow the user to specify a folder where a file should be saved. You could just provide a text field, have them type out the file path, and give an error if the path doesn’t exist. That would work and take very little coding.

A better UX would be to have a file picker where the user could browse the filesystem for the folder and select it. But there’s no file picker component in the language/libraries you’re using so you’ll have to build one from scratch, at least 2 days of coding.

What would you do?

Since you’re doing all the coding and your time is very limited, it’s really difficult to rationalize building that file picker. There’s other higher priority features still to be coded, so putting it off is usually what happens. As you work on the rest of the features and time goes by, you get more and more comfortable with it as it is.  When launch approaches, you might revisit it, you might not. If you do, do you spend the time and delay launch?

The bottom line is that the file picker is the optimal UX. You should definitely do it.

Now consider if you weren’t doing most of the coding. You had hired a developer. You provide them with mockups, review/test/comment on their commits, and steer the development of the product.

The mockups have a file picker in them, so the developer will just build it. They may push back, asking if you really want them to spend a couple of days on it, but it’s a much easier decision when you’re not doing the coding yourself.

Since you’ve stepped away from the code, choosing the path of least resistance is no longer a decision you’re making. You’re now focused and making decisions solely in the interest of the optimal UX.

The difference here is subtle, but the impact on the UX can be huge.

2. Faster

Hiring a developer also allows you to go faster. If you hire the right person, having them focused on coding and you on other things should progress the project more quickly. If you hire a coder with equal or better abilities and work well together, you should go a lot faster.

3. Code Quality

If you’re coding alone, you test and review as best you can, but having a second set of eyes on the code and someone to run their own tests makes a huge difference. Hiring a developer allows you to be an independent code reviewer and tester which should result in less bugs and higher code quality.

4. Hiring a developer is in your wheelhouse

Since you’re a developer, you should be able to pick a good developer. Hiring isn’t easy. It will almost certainly take a few trials to get the right person. But since you’re a developer yourself and can evaluate good code and good design decisions, you should know when you have a good developer or not.

5. Backup

What happens when you go on vacation? Will you be handling support the whole time? And what if you get sick or hurt? How long can the business run without you?

Having someone who can cover for you is an excellent reason to hire.

6. Freeing yourself up for learning

Outsourcing sales and marketing is next to impossible when you’re starting out. You really need to learn these things yourself before attempting to outsource. If you’re doing all the coding, you simply won’t have time to learn these things. Hiring a developer frees up some time to dig into these areas and learn.

Pfftt, how can I afford to hire a developer?

Right. You’re working a day job, but you can easily do some coding in the evenings and weekends to work on the business but can’t afford to hire a developer. Or maybe you’re freelancing full-time and can set aside time to work on your product business but can’t afford to hire a developer.

Sorry, but that doesn’t make any sense.

Your time is money. If you have time to put into coding for the business, you could also use that time to do some consulting/freelancing, then use the cash earned to hire.

Sounds crazy, right?

Well call me crazy then because that’s exactly what I did.

To start working on WP Migrate DB Pro, I saved up a bit of cash, hired a full-time developer (making our runway very clear upfront and ensuring they understood the risk) and worked with them on the product. I spent about half my time on the product and the other half I did some freelancing.

Although earning cash freelancing and spending it on hiring a developer seems like a roundabout way of doing things, you have to carefully weigh the benefits.

The post Developer Founders Should Start with Hiring a Developer appeared first on bradt.ca.

]]>
https://bradt.ca/blog/developer-founders-start-hiring-developer/feed/ 5
I’ll give you a job and help you launch your first product https://bradt.ca/blog/job-plus-apprenticeship/ https://bradt.ca/blog/job-plus-apprenticeship/#comments Fri, 18 Jul 2014 11:27:19 +0000 http://bradt.ca/?p=17712 TL;DR – Work with me on my product business as a full-time-ish (~32 hours per week) developer and have that extra time every week to work on your own software product. Plus while working with me, you’ll learn what it takes to build, launch, run, and grow a successful software product. You’re a developer. You want […]

The post I’ll give you a job and help you launch your first product appeared first on bradt.ca.

]]>
TL;DR – Work with me on my product business as a full-time-ish (~32 hours per week) developer and have that extra time every week to work on your own software product. Plus while working with me, you’ll learn what it takes to build, launch, run, and grow a successful software product.

7018257173_4630086084_oYou’re a developer. You want to start building and selling your own software products. But you’re working full-time. Well, more than full-time. You often work until 7 or 8 PM and when you get home there’s just no time to do more work. Besides, you’re tapped out. You’ve used up all your creative energy at work. Sometimes you even have to work weekends, so the ones you do you have off, you spend with friends and family. Seems impossible to start that product business.

Sound familiar?

I’ve heard this story a lot. In fact, I was this story. Then I quit my job and went freelance. It afforded me more flexibility, but with the ebb and flow of freelance and the need to constantly be chasing new clients and dealing with existing clients, there was very little creative energy left to devote to building a product business. I mean, freelancing itself is a business, so trying to start a new business while you’re furiously running another one is very difficult. I’m certainly not saying it can’t be done, but even with a disciplined approach, it is very challenging.

I think an easier path is to find yourself a full-time job that is less demanding. Something where you’re at work 30-40 hours per week (no evenings or weekends) and expending little creative energy. Something as predictable and routine as possible.

I’ve had jobs like this in the past: a few co-op work terms with the government. The schedules were very relaxed and the job demanded little creativity compared to the jobs I had later in the private sector. Jobs that only require 30-40 hours per week and don’t zap your creative energy do exist but they are hard to come by.

John Turner is a great example of how this can work. He joined The Micropreneur Academy and with the help received there, he was able to build a successful WordPress plugin business while working a 9-5 government job. And I know of others who have followed a similar path, but they are few and far between. Again, it’s hard to get one of these ideal full-time jobs and even if you do, it’s still very hard to start a business at the same time.

But guess what? I’m offering exactly this opportunity right now. I’m looking for an experienced developer to work with me full-time, but I’m very flexible with the arrangement. For example, you could do a 4-day work week, around 32 hours per week, which would give you evenings and a 3-day weekend every week to work on your own product business and fit in some time for friends and family.

8555940298_591bedaa36_kYou will need to use up a good chunk of your creative energy while working with me though. In fact, I want it all on the days you work with me. But because you will be directing it at my product business it is very likely the things you spend your creative energy on will also apply to your own product business. For example, perhaps you think up a great idea to build virality into my product and it will also work for yours. And just learning how to run a product business during your work hours is certain to spark ideas about your own product business.

Basically, this is a well paid apprenticeship opportunity, and if you listen to Dan and Ian every week like I do, you know that an apprenticeship is the best way to get started on your path to building a business.

Check out the job posting and apply now

The post I’ll give you a job and help you launch your first product appeared first on bradt.ca.

]]>
https://bradt.ca/blog/job-plus-apprenticeship/feed/ 1
We used Gmail for product support for our first year and it was great https://bradt.ca/blog/used-gmail-product-support/ https://bradt.ca/blog/used-gmail-product-support/#comments Fri, 06 Jun 2014 17:31:32 +0000 http://bradt.ca/?p=17587 Just this week we switched from using Gmail to Help Scout for product support. I was really hesitant to make the switch. Gmail has worked exceptionally well for us throughout the past year. The only significant reason for us to switch was the growth of the support team. We had only been two people up to […]

The post We used Gmail for product support for our first year and it was great appeared first on bradt.ca.

]]>
gmail-support

Just this week we switched from using Gmail to Help Scout for product support. I was really hesitant to make the switch. Gmail has worked exceptionally well for us throughout the past year.

The only significant reason for us to switch was the growth of the support team. We had only been two people up to this point and we’ve added a third. Sharing a Gmail account between two people is very easy to manage but add a third and I suspect things get a little dicey.

If you’re just starting out with email support, I do recommend using Gmail. Any support system is probably going to be overkill in the early days and will probably just get in your way. So how did we use Gmail and stay organized?

One Inbox

All our email ended up in a single inbox. We had different email addresses but they were just aliases.

Labels

We had Gmail filters set up to identify and label incoming messages based on the email alias. For example, some of our licenses come with priority support and those customers send support requests to a specific email address. Anytime we receive one of those emails, it automatically gets labelled “Priority” in yellow.

We did experiment with manually labelling things but it didn’t prove useful enough and we ended up abandoning it. For example, we tried labelling messages with our names as we replied but ultimately didn’t find it very useful. It was enough to tell who had replied by looking at the signature.

Canned ResponsesCanned Responses

Tucked away in the Labs tab of the Gmail settings is a feature called Canned Responses. We made heavy use of this instead of rewriting the same emails over and over again.

Workflow

When we would answer an email we would archive it immediately afterward. The request was considered dealt with until we received a reply and it ended up back in the inbox again. This is the same workflow that Help Scout is setup for as well.

And that’s pretty much it. It seems very simple because it is.

Although Help Scout has been pretty good so far and the reporting is nice, I am already missing Gmail’s superior keyboard shortcuts and message threading.

The post We used Gmail for product support for our first year and it was great appeared first on bradt.ca.

]]>
https://bradt.ca/blog/used-gmail-product-support/feed/ 6
I Sold WP App Store https://bradt.ca/blog/i-sold-wp-app-store/ https://bradt.ca/blog/i-sold-wp-app-store/#comments Tue, 29 Apr 2014 15:09:28 +0000 http://bradt.ca/?p=17423 About a month ago I posted WP App Store for sale on Flippa. And today I’m very happy to announce that Iain Poulson (aka @polevaultweb) will be taking over the project. Iain is a great WordPress developer with some excellent design skills. If you don’t already know Iain, just take a look at his website […]

The post I Sold WP App Store appeared first on bradt.ca.

]]>
sold-signAbout a month ago I posted WP App Store for sale on Flippa. And today I’m very happy to announce that Iain Poulson (aka @polevaultweb) will be taking over the project.

Ian Poulson

Iain is a great WordPress developer with some excellent design skills. If you don’t already know Iain, just take a look at his website and dig into his Instagrate project and I’m sure you’ll agree.

Iain is planning to keep running the mailing list as it is now, sending out great deals on quality WordPress products. He is also planning to put more effort into marketing and growing the mailing list. Check out his blog post for the details in his own words.

When I rebooted WP App Store as a mailing list 7 months ago, I made it clear that it was an experiment. I wouldn’t call the experiment a raging success, but it certainly hasn’t been a failure either. I simply lost my passion for the project and it became a chore I didn’t have time for. I decided it needed someone new that was excited about the opportunity to push it forward.

I’m really looking forward to following along as Iain takes over the experiment and makes it his own. If you haven’t already, I highly recommend signing up for the WP App Store mailing list and following along with me.

The post I Sold WP App Store appeared first on bradt.ca.

]]>
https://bradt.ca/blog/i-sold-wp-app-store/feed/ 2
Stop commenting your code just to say you did https://bradt.ca/blog/useless-code-comments/ https://bradt.ca/blog/useless-code-comments/#comments Tue, 01 Apr 2014 15:51:29 +0000 http://bradt.ca/?p=17137 Summary – Code comments that point out the obvious make the important comments harder to spot. Developers are better off when there are only a few comments for the code that deserves an explanation. You open up an electrical box and see a few hundred wires. Lots of different colours that don’t mean a heck […]

The post Stop commenting your code just to say you did appeared first on bradt.ca.

]]>
Summary – Code comments that point out the obvious make the important comments harder to spot. Developers are better off when there are only a few comments for the code that deserves an explanation.

5799338412_70bd536ff1_bYou open up an electrical box and see a few hundred wires. Lots of different colours that don’t mean a heck of a lot. But someone has put a neat little label on every wire. Awesome!

Or so it seemed until you actually start looking at the labels. Almost all of them are blank!

So you spend an hour digging through every label. In the end, you find a total of 12 actually written with an important message. Hopefully you didn’t miss any in all the chaos.

This is how I feel when I dig into code with useless comments everywhere. It’s hard to identify useful comments in the sea of useless ones. Needles in a stack of needles.

Here’s a great example that shows up everywhere in a very popular open source project:

/**
 * __construct function.
 *
 * @access public
 * @return void
 */
public function __construct() {
    ...
}

And another one…

/**
 * Constructor
 */
 public function __construct() {
    ...
}

And here’s another gem…

// Convert float to string
$value = float_to_string( $value );

These comments are similar to the blank labels in the electrical box. They point out the obvious, add noise, and diminish the overall usefulness of commenting. After reading a few of these comments, I wouldn’t blame any developer for ignoring the rest.

6839927041_419efba7b6_bI’m sure the electrician that took the time to put blank labels on each wire thought he was doing a great service to those who would come after him. After all, the label is already there, they just have to write the note now. Or maybe he had intended to fill in all the labels, but never got around to it. Regardless of his good intentions, the result is a much worse situation than if he had only labelled the 12 wires.

In the coding world, developers are told they should always comment their code, but rarely are they told how to do so. And so comments are often written because developers feel an obligation to do so, not because a comment is needed. They feel they are doing their job well if they add lots of comments, regardless of their quality.

I can’t accept this. I would much rather see a few comments explaining why some code is needed than a comment on every few lines that say nothing. Comments shouldn’t be written purely to show we’re “good little programmers.” We should use comments sparingly and mainly to “document the why”.

// We need to account for product price changes,
// so we get the price of the product when each order occurred
$order_prices = $this->get_order_prices();

When deciding if I should write a comment or not, I ask myself a simple question: if I come back to this bit of code, will it be obvious why it’s been written this particular way? If my future self will be very thankful for an explanation, then it’s a no brainer, I write the comment. Otherwise, I let the code speak for itself.

Further Reading

The post Stop commenting your code just to say you did appeared first on bradt.ca.

]]>
https://bradt.ca/blog/useless-code-comments/feed/ 21
A Better Writing Process for Perfectionists https://bradt.ca/blog/better-writing-process-perfectionists/ https://bradt.ca/blog/better-writing-process-perfectionists/#comments Thu, 06 Mar 2014 14:58:22 +0000 http://bradt.ca/?p=17201 I’m terrible at writing. I write a paragraph or two, then rewrite those paragraphs, write a couple more paragraphs, rewrite those paragraphs, rewrite, rewrite, rewrite. It takes hours to get the first draft out. By the time I finally publish, I feel awful about how much time I’ve spent writing. And the feeling persists, discouraging me […]

The post A Better Writing Process for Perfectionists appeared first on bradt.ca.

]]>
I’m terrible at writing. I write a paragraph or two, then rewrite those paragraphs, write a couple more paragraphs, rewrite those paragraphs, rewrite, rewrite, rewrite. It takes hours to get the first draft out. By the time I finally publish, I feel awful about how much time I’ve spent writing. And the feeling persists, discouraging me from writing again any time soon.

Last year I published a total of 10 articles on this blog. This is my 5th post already this year and we’re only 2 months in! If I keep up this pace, I should end up with around 30 posts by year-end. So what am I doing differently?

Dictation MachineMy wife and I were watching Mad Men one night and I noticed Don had a dictation machine. He’d record what he wanted to say and his secretary would type it up later. Of course this was mostly out of necessity because he hadn’t learned to type, but it got me thinking that maybe I could use dictation to improve my writing.

And so I started to experiment with the dictation feature on my phone. It turns out Google (I’m on Android) is very good at turning voice into words. And so when I want to write a new article, I just open up a note taking app, tap the little microphone on the keyboard, and start talking. Wordsmithing is a lot harder on a phone keyboard, so I’m not really tempted to go back and rewrite things. It allows me to push forward and get my first draft out lickidy split. Then later when I’m on my laptop, I can proof read it, make a few edits, add some links, add some images, and fight the urge to rewrite everything. Essentially, it has allowed me to separate the writing and editing processes.

But I think it also helps my writing. They say the best writers write like they’re speaking to a single person. And since I’m literally speaking into a phone, imagining that there’s someone on the other end of the line is a lot easier than if I was sitting at a keyboard typing.

Another nice bonus is that I can pace the room while dictating, which gets me out of my chair and moving around. For some reason I find I think better while pacing. I’m looking forward to trying this outside once the summer finally rolls around.

This new writing process has made for a much faster and more pleasant writing experience for me and I get to share more stuff with you. Win win.

The post A Better Writing Process for Perfectionists appeared first on bradt.ca.

]]>
https://bradt.ca/blog/better-writing-process-perfectionists/feed/ 6