ios

Swift Framework - TableData v1

As mentioned in my Year in Review post from back in December, one of my aims of 2018 is to open source more code.

I’ve built a few private libraries over the years that I use in most of my projects. I figured releasing these would be a good place to start. The first one is the rather bland named; Table Data.

Table Data is a simple framework for building out UITableViews. I use it a lot when building preferences or settings screens.

Symple 1.1 - AutoPay

Last week we launched Symple 1.1! This release bring the ability to set your payments on autopilot with “AutoPay”. Just turn it on and choose the payment terms. Now when a partner sends an invoice you no longer need to manually manage paying them.

Bug Report Template

The author of the book Deep Work talks about The Principle of Least Resistance.

> The Principle of Least Resistance: In a business setting, without clear feedback on the impact of various behaviors to the bottom line, we will tend toward behaviors that are easiest in the moment.
— Cal Newport - Deep Work
Shitty internal bug reports are an example of this. Over the years I've seen so much time and money wasted from badly written bug reports. The amount of back and forth between developer and reporter can really rack up.
> The text is wrong colour
— CEO's bug report
> I can’t create X
— Developer Y bug report
 

How To Encourage Good Bug Reporting

Provide Real Examples

Choose a real bug report that someone or yourself filed and go through it, looking at it's good and bad points.

Write Good Bug Reports Yourself

If you're writing bug reports for others, write really well detailed ones. It won't take long before they realise how useful it is.

Introduce a Template

Below is the bug report template I've used for the last few years. I usually customise it slightly depending on the project (iOS or macOS? Is there a dev server? etc). In the past I've also created a bookmarklet that automatically fills the text area of whatever tool we're using.


## iOSVersion## BuildVersion## Device## Server## LoginDetails## Isitreproducible? Yes / Occasionally / One Time / No ## StepstoProduce/Reproduce1. ...2. ...3. ...## ExpectedResults## ActualResults## Workarounds## OtherInformation

iOS Freelancer Diaries #4 - Year In Review

Blimey, what a year!

It’s been a long time since I last wrote a Freelance Diary entry (I know, I know. I said that last time too), so I figured I’d just write about the whole year.

Shameless self promotion - A lot of the numbers below are taken straight from Forecast.

Workload

The points below give a rough feel for my workload over the year. I feel things really started to change from September when I started booking in much larger projects and have managed to pretty much fill my schedule up until March 2018 🎉.

  • January - Mid Feb: Nothing
  • Feb - March: Semi booked
  • April: Fully booked
  • May - September: Semi booked
  • October - December: Fully booked

Clients

I’ve been very lucky this year and have worked with some great clients with projects ranging from an internal app for airport parking staff to the rather crazy world of cryptocurrency.

Over the year I’ve worked with 8 clients. The largest client contributed 35% to my turnover and the smallest; 3%.

Client A

  • 35% of turnover
  • Always paid on time

Client B

  • 24% of turnover
  • Paid on average 8 days late

Client C

  • 16% of turnover
  • Always paid on time

Client D

  • 9% of turnover
  • Paid on average 2 days late

Client E

  • 4% of turnover
  • Paid roughly 22 days late

Client F

  • 4% of turnover
  • Paid roughly 1 day late

Client G

  • 4% of turnover
  • Paid roughly 13 days late

Client H

  • 3% of turnover
  • Paid roughly 2 days late

Note: I realise the above doesn’t add up to 100%. I removed referral income from Gorilla and also a deposit for a project starting next year.

Notable Side Project

Forecast

Forecast is cash flow forecasting software for freelancers. It’s something I’ve personally wanted for a while so I teamed up with Nick to turn it into a reality.

Four Pints In

Towards the end of the year I started a Podcast called Four Pints In with two friends; Tom and Nick. In it’s simplest form; it’s 3 friends chatting over a beer or four. First episode was a bit nerve-racking but it’s been great fun to record and Tom has done a great job on the editing (Nick has also done a great job at turning up).

GFIB 7

Hector and I teamed up with a couple of friends who own a local gym called GFIB and put together our take on the “7 minute workout”.

Investments

It goes without saying, but I’m no expert…

Monzo

Monzo ran another crowdfunding and because I was involved in the first round I got to invest a % of my previous investment (£134.33).

Balance

Balance were actually a client of mine, but I also invested $1,000 in their crowdfunding. I think they have great potential to bring cryptocurrency to the mass market.

Pension

I had a private pension before but then paused contributions once I started freelancing. Once my runway improved I started £500/month contributions. I hope to raise this as my runway improves.

My pension is managed through St. James’s Place (I have a friend who works there). I have also heard good things about Nutmeg Pensions (though it has a £5k minimum deposit).

It’s also worth noting that since I have a limited company, the contributions are paid through that.

Stocks & Shares ISA

I also started a personal stocks & shares ISA with Nutmeg.

Financials

My aim at the start of the year was to turnover £60,000. This was my old salary so figured this was a good starting point.

By the end of the year turnover should have reached £65,000 🎉.

What’s crazy is that that just over half of that was created in the last 3 months.

Day Rate

I started freelancing with a day rate of £500. I’m a big believer in playing around with your day rate and over the year I have raised by rate by £25 every 2 clients (currently £600).

I also introduced a retainer rate at 20% discount.

Working For Equity

Though I have yet to officially do this, I get asked enough that I updated my contact page outlining my requirements.

The key points are:

  • Equity amount is based on the discount. For example, if I give a discount of £10,000, then in exchange I receive £10,000 in equity.
  • Provide any financial and business details I require
  • Pay all costs (e.g. legal)

The idea behind it came from the Sandwich Fund.

What Went Wrong

Too Much Work

As mentioned previously, I made just over half of my years turnover in 3 months. Yes, that sounds cool, but in reality it was too much. The summer had been relatively slow and I felt obliged to take on as much work as I could get my hands on. I’m now happy I did as it has given me a very solid foundation for 2018, but I don’t plan on doing that again, unless necessary.

Fixed Price Project

I’m generally totally against fixed price projects, it’s just not how building (good) software works. Unfortunately I didn’t listen to myself and took on a fixed price project. The scope was pretty well defined and payment was milestone based. The problem was that I hadn’t taken into account any dependancies that I needed from the client. These dependancies took a while to be ready and by that time I was due to start new projects, so I had to let the project go.

2018 Goals

Freelancing

  • £75,000 turnover
  • Experiment with 4 day work week
  • Sign with another client that is focussed on crytocurrency
  • Open source some of my libraries that I use everyday

Forecast

  • 100 paying customers

Four Pints In

Being able to land our first sponsorship would be awesome. We’d love to be able to outsource the editing of the episodes.

The iOS Simulator Scroller

TLDR; GIVE IT TO ME NOW!

Just over a week ago I decided to play around with Accessibility on macOS. I've always wanted the iOS Simulator to scroll when I scrolled with my mouse so figured this would be a good project to get started on.

Later on that day I had this:

Playing around with the accessibility framework. Put together an app that lets me use my mouse scroll in the iOS simulator 🎉 pic.twitter.com/qS4XteB5fN

— Red Davis (@reddavis) March 13, 2017

A few people asked for me to release it and I figured why not? Would also give me a chance to try out Paddle which we have been thinking of using for Quids.

You can try out the iOS Simulator Scroller by visiting here.

Pact Coffee ASAP Button

I'm a long time subscriber to Pact Coffee (referral link), it's awesome and very reasonably priced.

It has a great feature where you estimate the number of coffees you drink per week so that they can send you your next bag just in time before your previous bag runs out.

Though, some weeks can be tougher than others and you suddenly find yourself quickly running out! 😵

No problem, you can just login to their website and click a button that says "Ship today", but by the time you have made you coffee, ate a biscuit, read an email and got back to your desk, you forget 😰 At least, this is what happens to me.

This week has been all about writing proposals, so I thought I'd take a break and write a simple one button iOS app that would change my order to "Ship today".

Pact do not have an API so I figured I'd have to just scrape their site. I threw together a small Rails app that would act as the API for the client. At first, I tried to use Mechanize though I then realised the Pact site is written in React (at least I think). Mechanize doesn't work with Javascript. To get around this I ended up using Capybara and PhantomJS. I built two endpoints: "auth" and "ship today".

The iOS app is super simple. It just implements the two API endpoints, stores the email and password in the keychain and I threw 1Password in there because every app should have 1Password integration.

Since I've built this hacked together API, it would be great to connect some sort of IOT button to it.