mokacoding

unit and acceptance testing, automation, productivity

2015 Retrospective

I usually don't write about my day work in this blog, except when sharing lessons learnt in terms of testing, automation, or coding practices. 2015 is finishing though, and it is time for retrospectives, so I decided to share mine with you here.

In this post I want to reflect on my year as software developer, looking at what went well and how to make it better, and what went not so well and how to change it.

What went well

I am very happy with how my 2015 went. First and foremost I had the chance to work with great teams, on interesting projects, and always learnt something new.

This has been my first full calendar year as an iOS freelancer. "iOS Testing and Automation Consultant" to be more specific, and we will see why this matters later.

When I moved to Melbourne, Australia in July 2014, finding a job turned out to be harder than I thought. In fact, due to the Working Holiday VISA I had at the time very few companies were interested in having a chat with me, and even fewer considering the sponsorship option. Doing contract work was the only option at the time, I wasn't very keen on it, but it turned out to be great for me.

I love consulting because it provides the variety and freedom that I thrived for when working with product startups as a permanent employee.

In particular a great thing about working with multiple teams during the course of one year is the amount of things that I learnt from every single one of them. Doesn't matter if more or less experienced than you, every teammate has something to teach, if you are willing to listen. Each and every one of us has a different mix of experiences and a different background, and we all have something enriching to bring to the table.

Through consulting I also had the chance to get exposure to a variety of project management tools and techniques, most of which I only had heard mentioned. This experience will make my onboarding time on new projects shorter, so that I can start delivering value earlier.

My clients pipeline has always been full, meaning that when one engagement was about to end I already had at least one possible option for the next one.

From what I heard by talking with peers and by reading online, finding work is one of the hardest tasks for freelancers and consultants. I have definitely been lucky for never having had to be struggling to find my next job, but I've also put a lot of work towards making luck finding me.

Looking back at 2015 and how I have been able to find client engagements I think working towards becoming a specialist is what contributed the most.

Becoming a specialist

Soon after realising I had to do contract work I started looking online for resources to help me with the challenges that come with freelancing.

I got, and still get, a lot of value out of The Freelancer's Show and the Freelance Transformation podcasts. A book that I read at the start of the year and really opened my eyes was "Stop Thinking Like a Freelancer" by Liam Veitch.

In the book the author shares his experience in failing at being a freelancer, and then trying again, evolving his freelance business into a self sustained agency. The core message of the book is simple: to be a successful freelancer you need to "niche down", focus your services on a narrow area, and invest time in developing your brand.

In my case I decided go from "Hi I'm Gio, I build iOS apps, but can also help you with your Rails backend" to "Hi I'm Gio I help teams developing continuous testing and delivery in place for iOS projects, from the infrastructure to the testing culture.".

This shift in focus has been incredibly rewarding for me. I have always been passionate about testing and automation, and by selling myself as a specialist in that field I get to work on what I love. Because this is something I love I am able to deliver great results to my clients, which makes them happy. On top of that, by focusing on a particular area of the iOS development landscape I've been able to do a lot of deep learning in terms of tools and practices. This increasing level of mastery makes the work more rewarding, and fuels my passion for the field.

Niching down, when done right, and with a bit of luck, can produce a virtuous circle that will make your job and your clients relationship better and better.

Making this shift from generalist to specialist would not have been enough by itself though, I had to make people know about it. And that's where branding came into play.

Branding

The concept of brand came up many times in "Stop Thinking Like a Freelancer", as well as in courses like Brennan Dunn's "Double Your Freelancing", and Philip Morgan's "Positioning Crash Course".

The first time I read about branding it sounded like a cheeky-sleazy marketing technique that I would never employ, I'm an engineer after all! But reading more about it I understood that branding doesn't have to be sleazy, and is also very important.

Your personal or company brand is what you are known for, what makes you stand out and recognizable.

I made it a priority to brand myself as the go to guy when it comes to testing and automation for iOS projects. There's nothing dodgy in it -and if you find there is please tell me, as that is not the impression I want to give-, I basically started telling people "I really like doing this kind of work, do you know someone that might need help with it?".

The corner stones of my branding strategy have been blogging and public speaking.

Blogging

I had been writing on mokacoding.com for 2 years already, about whatever technical topic I felt like, but in a very sporadic and unstructured way.

I decided to keep the blog, too much effort to build a new one, and I wrote down a list on Trello of all the testing and automation related topics I could write about, or wanted to look into. Each week I picked one topic from the list and wrote about it. As simple as that.

After the first couple of months the visits and comments on the blog started to grow, and more than once I received emails and have been in conversations along the lines of "we read about X on your blog, would you work for us and do it"?

Most of the research work I've done for my posts has been very valuable when working with my clients, making blogging an investment not only in my brand, but also in my education and capacity to deliver a better service. Win win!

Sticking to a weekly schedule and focusing on a narrow area of content have been very helpful in increasing the visibility of my blog, and mine as a consultant as a by product.

mokacoding sessions in 2015

mokacoding.com sessions by month in 2015, the spike in July is due to one of the articles being on the Hacker New's frontpage.

Public Speaking

I had always been attracted, and daunted, by public speaking. I had already given a talk at a meetup once in the past, and in 2015 I decided to do more.

I gave some talks to the Melbourne CocoaHeads iOS meetup, and at two developer conferences, /dev/world and YOW! Connceted.

The feedback has been positive, and once again the work put into building the talks resulted in more knowledge to use with my clients. But gosh, preparing a talk takes a lot of time.

me giving a talk at YOW! Connected

Me giving a talk about functors and mondas at YOW! Connected in September 2015. Photo courtesy of Matt Kelsh

Networking

Something else I think I did right in 2015 has been networking. When at meetups and conferences I tried to talk with as many new people as possible, and I set periodic coffee chats with past clients and prospects.

What went not so well

While the "what went well" part of this retrospective has been structured and organised, I'm afraid this one might be more of a continuous stream of words. Bear with me. 2015 has been great and I feel I did a lot of things right, but that doesn't mean that I haven't done a lot of things wrong either. There are a number of areas in which I could have done better. These are the main, with some ideas on how to improve.

Daily Rates

I think the biggest thing that I regret from 2015 is that I have always been "exchanging my time for my client's money", and I am afraid this will continue at least on the first part of 2016.

What I would like is to charge based on the value delivered by my services, in order to escape the prison of wrong estimations, unmet deadlines, finger pointing on deliverables, and to be able to manage my time better. And also scale the income in a different way, let's be honest.

This interview with Jonathan Stark is a good summary of the concept of value based pricing, and how to put that in place.

I think I might be on the right way for this goal, but I haven't found the right client or project, and mainly haven't had the courage to do it yet.

Not Enough Focus

I wrote about my blogging and public speaking experiences above, they've been great and rewarding, but looking back at the stats what got the highest interest have been posts and talks related to functional programming in Swift. "Swift Functors, Applicatives, and Monads in Pictures" and "Swift Optionals, Functional Programming, and You" in particular. Yes, I learnt a lot, met great people, and overall got more visits on my blog, but "the guy that explained flatMap using pizza examples" is not the branding I was trying to build.

In 2016 I will need to bring back my public speaking focus on testing and automation, and either stop writing about topics outside this area, or more likely find another outlet for those, blogs are cheap to build after all.

Side Projects

The elephant in the room when I talk about spending time in things unrelated with my consulting career is The iOS Times. This project has nothing to do with testing and automation, but is doing well and collecting positive feedbacks. I cannot say I regret working on it, as I love every minute of it, mostly. But at the same time I cannot justify the time investment right now.

Let me rephrase, I cannot justify the time investment right now when wearing my consulting hat. When looking at my time as an individual in the community I think The iOS Times is doing a good job.

Speaking of the community, I think in 2015 I haven't spent enough time given back to the many open source projects I use.

One reason for that, which relates with The iOS Times and my functional programming in Swift posts and talks, is the insane amount of posts and side projects ideas that I have and sometimes pursue. In 2016 I will need to work harder on my decision framework regarding those, or I will end up biting off more than I can chew, as it happened with The iOS Advent Calendar.

Always On Site

Something else that I am very keen on, but that I haven't been able to achieve yet, is to work in a location independent way. All my engagement so far has been on client site, sometimes I've been able to work one or two days a week from home, but that's it.

Working in an office with people is great, I love the interaction, the "water cooler" conversations, and the fast pace at which you can discuss and idea. My plan for the long run though would be to move away from the city to a more peaceful lifestyle, and working from home would be the key of that. I am not sure how to achieve that yet.

Time Tracking

Finally something else that didn't work well in 2015 is time tracking. I started using Toggl for time tracking and RescueTime for monitoring where I spend time on my computer. In the second half of the year though I got lazy and stopped tracking time, and never really looked at the RescueTime reports.

The only thing I can say about this is that I need to get back into the habit of time tracking. I might look into using an Alfred integration for Toggl, to lower the time tracking effort, but it mainly comes down to me being more disciplined.

Some numbers

I like numbers, and even more comparisons. This being my first full year as a consultant there is no comparison yet, but I still have some numbers to share.

public GitHub activity private GitHub activity

Towards 2016

A good retrospective should always end with ideas on how to leverage what worked and how to improve what didn't.

In 2016 I will try to focus my consulting business even more towards testing and automation. I shall try to find more focused projects, attempt pricing based on value. I might explore areas outside iOS development, Rails and Android would be good candidates as I have a bit of experience building apps with them.

I mentioned that my long term goal is to work from home in a peaceful location. I have never worked from home on a project start to end, nor dealt with the time zone issues that one has when living in Australia, though, so I am not so sure this option is feasible. I shall try to find contracts that will allow me to validate this assumption.

Another useful thing towards the location independence goal would be having products generating passive income. The iOS Times is an experiment in that regard, although is not generating any money right now. I shall grow The iOS Times, and evaluate if any of my ideas can be turned into a self sustained small passive income generator.

In 2015 I invested a lot of my spare time into the development of my brand, in 2016 I shall keep that work up, but also find time for my own personal development, and for the community in general.

I feel very positive for what 2016 has in store, and I am determined to make it my best year yet.


Thank you all for reading mokacoding.com in 2015 and for the great feedback you've given me. I have a lot of things I want to write about. I'll see you in 2016.

Have a wonderful end of the year!

Vote on Hacker News