Matthew Lang avatar

Matthew Lang

Web developer with a preference for Ruby on Rails

Career Advice

I was recently asked by a close friend for some career advice. They're in a good job with a good salary and good long-term prospects, but that's it really. It's just good. When I asked them about what they really wanted to do as a career they simply had no idea. All my friend knew was they didn't want to do the job they're doing at the moment.

If I was asked the same question about what I wanted to do in the future I know what my answer would be and it's not building web applications. It's not my strength though, which is why I continue to do what I do today. I haven't completely discounted the idea of doing my ideal job, but then things change so fast now. Next year's dream job could change over time and evolve into something else.

It's part of the world we live in now. Everything moves at such a fast pace and things are changing constantly. There's is no job for life anymore. And yet there's plenty of opportunities for people with even the remotest idea of a new business. There's so much that people can do from their own homes, that the dream job that they have now is within reach. How long would that career last though?

I've no idea if my dream job will still be around in 10 or 20 years but it would be great if it was. Jobs for life are very few and far between now, but in their place are more opportunities for individuals than ever before.

Back to my friend who I give this advice.

If you want to make a career and living that plays to your strengths, then look beyond what you do at the moment, and try and apply your strengths to other roles and positions out with your comfort zone.

Identifying what you really want to do is key too. Without knowing what direction you want to head in, there's no way of making the first step in the right direction.

I'm not a career advisor, but it's was the best advice I could come up with for them. If you were in a similar position, what advice would you give to someone looking to change their career but not knowing what they truly wanted to do?

Unproductive Day

Today hasn't been a good day. It started going wrong before lunch-time with crossed wires with a client and then after that the plan for the day had to be drastically altered to include work for a deadline. From there on in it was a downward spiral.

These days happen. They don't happen very often but when they do, they can suck the life out of you. It's like having a little Dementor over your shoulder that strips away all the good plans that had been made for the day.

Tomorrow is another day though, and while I also had plans for tomorrow it looks like they will need to be re-shuffled to take into account this pressing work. At least now though I know what to expect from tomorrow and I can adjust accordingly.

Marked 2 - An Essential Markdown Viewer

Markdown. It's become so engrained in my workflow that I barely think about the syntax now. This post is being written in Markdown, as does most other things I write. To support this markup I need tools that are not just Markdown compatible, but champions of Markdown. Marked 2 is one such tool.

Marked 2 is an OS X markdown viewer. If it sounds like Marked 2 only does one thing, you're wrong. There's more to this app than simply viewing a file.

Many Markdown viewers and editors give just the basics of viewing Markdown. The markup formatted as HTML with your choice of theme to make it all pretty to look at it. Marked 2 does this too, but it also does so much more.

More Statistics

We've all the seen the word count feature on lots of editors. In fact I would say that almost all editors have this feature included in them. Marked 2 includes a word count for your document, but it also other statistics:

  • Character count
  • Paragraph count
  • Sentence count
  • Reading time
  • Average words per sentence
  • Average syllables per work
  • Reading ease

That's not all of them as well, there's more, but you get the idea. The great thing about the statistics is that on Marked 2 you can leave this pane on the app open and it will update the statistics as you type.

Probably not a good idea to be continually looking at this as you type, but periodically I like to see how much progress I've made and whether my editing has improved my document.

Excellent Keyword Analysis

You can highlight repeated keywords from your writing, which will highlight those keywords in pink. Once you have done this you can also click those keywords to darken the rest of the document so that you can see only the keyword you clicked and where it is repeated in your document.

During this view you can also zoom out from your document and get an overall view of your document with those keywords still highlighted.

I've been using this to replace poor choices of words and replace them with better choices. The keyword analysis can also be customised so that you can include words that you want to avoid when writing.

Lots of Preferences

My blog is a static website that is regenerated each time I deploy it. However before I publish a post, I use Marked 2 to preview my post to check everything is where it should be and that it reads well enough.

Octopress posts are markdown files themselves, but they contain a section of YAML at the start that contains details like the title of the post, the published date and any categories I want the post to be assigned to. Marked 2 has a preference for striping YAML from your document before it converts it for you so that you can view the content of your post without the messy distraction of YAML.

There are tons of other peferences as well covering window behaviour, choice of Markdown library, style settings and even settings to adjust how the document will print.

Use Your Favourite Editor

I'm a Sublime Text user for both writing code and blog posts. I've tried a few other editors, but with shortcut keys that I have memorised, it's hard to use anything else but Sublime Text. Marked 2 is great in that if I am viewing a file, it has a shortcut key that you can change to switch to your preferred text editor, where it will open up your document, ready for you to edit it.

On the flip side there is also a plugin for Sublime Text that will preview your document in Marked 2.

Easy Publishing

Marked 2 also supports a number of file types that you can export too. These are the most common document formats like PDF, DOC and ODT. As nice as Markdown is to write with, sending a Markdown document to someone who isn't familiar with the markup might struggle a bit. So it's nice to have the choice to export your document to a more friendly file type for everyone.

I've yet to try this myself but Marked 2 also includes support for the Leanpub publishing platform. lets you publish your document to Leanpub. This is great as it makes the journey to self-publication that little bit easier.

A Power Tool

Marked 2 isn't just a Markdown viewer, it's a Markdown viewer on steroids. A power tool. This is why I have Marked 2 running all day long on my second screen.

I've been continually tweaking the preferences as I go along to get the right environment for me to write in. It also doubles up as a document viewer for some lookup documents that I use on a daily basis.

Marked 2 offers so much more than just being a viewer and for me it's been money well spent on a product that gets used on a daily basis.

How to Run Cheaters with Pow

Brett Terpstra released a new version of his Cheaters cheat sheet system. Brett recommends two options to get this running. The first is using the Automator application in OSX and the second is using the Fluid app.

The one change I wanted to make was to make Cheaters run as a local Rack web application with Pow rather than from the already installed Apache instance. It's easy to do.

1. Create a Gemfile

Create a Gemfile within the root of the Cheaters source and include the Rack gem:

gem 'rack'

Jump back to the command line and run the bundle command to install this gem.

2. Create the Rack App

Next create the Rack file that will serve all the pages and assets from the Cheaters source. I've used this same code for lots of Rack applications.

require 'rack'

$stdout.sync = true

use Rack::Static, :urls => ["/css", "/js", "/images", "/cheatsheets"], :root => "."

run lambda { |env| [ 200, { ‘Content-Type’ => ‘text/html’, ‘Cache-Control’ => ‘public, max-age=86400’ }, File.open(‘index.html’, File::RDONLY) ]}

Put this in the root of the Cheaters source.

3. Symlink Cheaters

Now I'm assuming that you have Pow installed already. With Pow installed, change to the pow directory and symlink your Cheaters directory:

cd ~/.pow && ln -s /path/to/cheaters

I also use an app called Anvil that gives me access to my running web applications in Pow from the menubar. This can also create the symlink for you if the terminal is too scary.

Done!

That's it. Now if you visit [cheaters.dev](http://cheaters.dev), you'll find the Cheaters page. The reason I prefer this is that I already have a number of application running locally that I like to use, so running it from the browser is fine with me.

Solutions with Code

As a freelance developer working for a client, I don't have the luxury of daily stand ups to get the outline for a new feature I have to work on. I also don't have the benefit of having another programmer sitting beside me or even in a remote location to talk about the feature further in a pair programming session. When you're on your own, you need to find other ways to kickstart the development process of envisioning a feature of a system.

I generally have a rough idea of the feature, but sometimes even getting a rough idea can be difficult. It pays to talk to the customer or even the product owner to get all the details you need, but sometimes even after that you might still be unsure. Where I usually falter is that I understand the feature but seeing it in code or as a set of objects can be difficult.

One technique I've been using is writing the sample code of how I would eventually interact with the feature once it is shipped. This isn't production code or code that's even going to be run. It's just me hammering out sample code on text file. The benefit of this technique is that I can identify simple objects such as classes and properties without too much code. It also lets me see if I'm starting to build dependencies on other objects. It might not be viewed as TDD friendly, but when you're working on your own, anything that helps should be considered.

The code itself consists of creating a couple of instance objects and setting the attributes needed for each one until I've satisfied the need to have a set of objects that could be read from a database. There's no fancy Rails code here, it's just plain old Ruby. I don't even bother to refactor it at all as I'm just looking to get an initial design from the code. Then I can start TDD'ing the feature with the my new found understanding.

I've no idea if this technique has a name or not, but it works well for me when I have problems envisioning the design for a feature.

Time to Grow?

I always keep my ear to the ground when it comes to local businesses starting and closing in my local town. You never when an opportunity might arise.

A couple of months ago I noticed that a hairsdessers, whom I used to be a customer of and got to know the owners well, had closed down. This morning I found out that the owners (a married couple) were still working locally, but had decided to rent chairs in another local hairdressers so that they could continue to serve the customers that they had built up in their own business.

Being a business owner with staff is a huge responsibility and one that isn't easy to depart from. Once your employing staff and delegating duties to them, it's your responsibility to steer the business in the best possible direction, whilst also ensuring that your staff contribute and are paid well for their duties.

I've been in enough small businesses over the years to see this first hand. Sometimes the business owner does a good job and sometimes they don't. The majority of the time though, I've seen the bad side of this. The business as an entity isn't doing well enough to support it's staff which usually results in the laying off of some or all of those staff.

For whatever reasons you have as a business owner for closing down your business, it can't be an easy decision to make when there is staff involved. If you've built up a loyal army of staff over the years that can be depended upon, how do explain that they no longer have a job when your business closes?

As much as I would love to expand my freelance business over the coming years into a registered company with staff, I keep having to remind myself that there's a huge responsibility to employing staff and ensuring that there is enough there for people to be paid. I've been on the receiving end of three redundancies. I'd rather not be the guy on the other side of the table giving them out.

For the moment I'm happy to plod on as a single freelance developer providing a service and value to my clients. I only have myself and my family to look after and that's enough for me.

Offering Value

One thing that I will need to focus on this year is increasing my client rosta for my freelancing business. With just a handful of clients at the moment, I definitely have enough work to keep me going for the foreseeable future, but what happens when the work for those clients dries up? At the moment I have enough savings to see me through a few months of absolutely zero work, but that's not the fallback plan I had in mind.

Before I actually find clients though, I need to determine what value I can offer these clients, and that's where I need to start work. Approaching clients is one thing, but unless I can sell something of value then I am definitely not going to appeal to anyone.

Technical Value

Looking back at the last year of work, it's clear that my strengths now lie in the following stack for web development:

  1. Heroku for application hosting.
  2. Ruby on Rails as my chosen web development framework.
  3. Cucumber and RSpec as a testing stack I'm well versed in but I would actually prefer to be digging more into MiniTest, the test library that is now included in Ruby.

Selling this as a value though could be done with testimonials from my current customers, as well as showcasing some of the web sites that I have worked on over the last year.

The other option for displaying my value on this topic would be to write a book on one aspect of my development stack. I am leaning towards Heroku as a favoured choice having seen very little books in the past on Heroku. However Heroku is such a well documented service, would I be simply duplicating the docs that Heroku have? I would need to provide something more than the basic docs. Tips and strategies on getting more from Heroku while being able to keep costs down would be a good place to begin.

Knowledge Value

As for the my specialised field, I've been building web applications in the healthcare sector for the last 12 months. It's a sector I'm very experienced in having previously worked in the NHS and also having worked for a software provider whose main customer was the NHS.

For a product idea, I am currently building a CMS targeted at GP surgeries in the UK. The proving ground for this product is going to be the GP surgery where my wife is the practice manager. While building the CMS for this practice, I'll be able to get invaluable feedback from my wife who will be the administrator for the site.

Having this knowledge of the health sector would allow me to focus my attention on chasing clients similar to this. While many developers might have the technical skills that match mine, I will be the more valuable option for having the knowledge of the sector to help these clients.

I'm definitely not setting this in stone as the only two options for the year, but it's a start. I'm putting an emphasis on these two forms of value, as I am trying to attract clients that are looking for either of these forms of value, but it would be ideal if they needed both.

Apps - Free Isn't Free Anymore

Well on the app stores at least.

It's been bugging me for a while now, but you may have noticed the number of games on Apple's App Store that are free. There's quite a lot of them actually, but some of them are not in fact free despite their price.

There's a growing trend now of games that are utilising the In-App Purchases (or IAPs from here on in) ability in apps to subsidise the fact that the game is free to install. It's a freemium model really. Give the game away and then charge for extras. I first noticed it on the game Kindgom Rush, but this game can easily be completed without the need to purchase any of the additional characters that the game offers.

In other games though, the list of IAPs is there as an assist to players to finish a level or the game. Candy Crush Saga and Bad Piggies are two such examples of games in the App Store that employ this model. The purchases are enough to make think they're a one off, but I suspect that this is not the case with many people. Considering that King's (creators of Candy Crush Saga) monthly revenue was allegedly once reported to be half a million dollars a day, it's easy to see how those little purchases can add up given how popular the game is.

Here's the problem I have with IAPs.

I have two sons, a one year old who is too young to talk, never mind understand the value of money, and one seven year old, whose life revolves around technology.

I limit my oldest to the number of games he can have on his iPad and the amount of time he spends playing them. Nothing wrong with that. What's troubling though is the amount of times he has asked for IAPs for games from me. I'll let him make IAPs for the games he really likes but not on a frequent basis. Also, all his IAPs come out his own pocket money. It seems that a growing number of games are adopting an IAP purchase to unlock new features or get new addons. To an adult it's easy to say no. To a kid it's not so easy.

Like all trends though, today's hot new game is always going to end up the next day's old news. Which means that the money you can spend on IAPs for games, can be wasted if that game is no longer played with. It's not a major problem in our house now, as our oldest is extremely limited to the IAPs he can make. How annoying would it be though to spend so much money on a game for it to be deleted and never played again?

Mobile game developers have no obligation to only producing one-cost games, but it would be nice to see some of these game developers move away from the IAP model.

I grew up in an era where the computer game was a one off cost. You paid for the game and then you played it as often as you like. Console games are getting more and more expensive, but they are getting better and better, and most games offer hours of entertainment for that one off cost. It's an investment, but one that I think works very well, especially when you have kids that love gaming.

Thankfully companies producing games for the Microsoft and Sony games consoles are still following this model for the next generation of console games, but how long before we start seeing even these games adopting an IAP model?

I'm not sure that will happen to the level it's happening in mobile gaming, but I know one thing. I'm more wary now of those 'free' games that are topping the charts and proving to be hits with the kids. Even though they're listed as free, I know that for most of them, they're not really free.

Budgeting Your Apps & Subscriptions

As part of my smarter budgeting theme for the year, one area I'll be looking to budget better for is the amount of money I spend on apps and services on the Internet.

It's no secret that I like to pay for the services I use. It just makes sense to support the products that you love to use. That's what keeps them in business. We all have preferences for the tools we use and how we work, but I thought I would share some of my thoughts on keeping your apps and subscriptions in check.

Keep A Budget

Common sense really, but things can get out of hand if you keep on subscribing to multiple services or subscriptions on the Internet. Set yourself a monthly budget and make sure you keep within that budget.

App stores and easier ways of paying online make instant purchases too easy to do now. You can quickly spend $20 or more in a few minutes on apps and services. Review your budget each month and be ruthless with making cuts to your monthly subscriptions.

Ensure you're leave yourself a little room in your budget for experimenting with apps. You can't trial an app before buying it, so leaving yourself a little room for trialling a couple of apps a month.

Find Value

I pay for things that give me value. The same goes for apps and subscriptions as well. I subscribe to a number of email newsletters, but they all offer some form of value. It's easy to subscribe to a newsletter thinking that it's $5 per month, but are you getting value from spending that money each month?

I think it's hard to quantify value, but the way I see it is that if I use that app or service on a daily basis then I'm getting value from it.

Don't Double Up On One Device

Having multiple apps on one device that do the same thing is a waste of money and time. At one point I had three apps on my iPhone for writing. Each was used for a different form of writing, but I've learned now that I can use one app more effectively for all my writing on my iPhone.

Doubling up on apps means that you also need to spend more time learning how to use those apps. Why spend the time learning about two apps when you can really master the one app.

Apps Can Vary Across Different Devices

So I mentioned there that I had three apps on one device, but what if you have a phone and tablet? Well in this case, you can use the same app for both devices if you can. If the app can work for you well enough on both devices then use it.

However, with devices having different form factors, it makes sense to use different apps that play to the strengths of each device. Yes you'll end up with multiple apps that do the same thing, but the money spent is justified in getting a tool that makes the interaction you need easier.

These are just some of my thoughts on the budgeting of apps and subscriptions. They're basically the guidelines I use to keep myself from throwing away money each month and drowning myself in unnecessary apps and subscriptions. I hope they can help you too.

Time for a Reboot

Alan Francis wrote a really great article at the start of December about how he wanted to get back to his Extreme Programming roots and start programming deliberately. If it's too much for some of you then here's a non-programmer translation.

Programming by coincidence is where programmers make assumptions on the code that they are writing. These assumptions lead to code that isn't completely tested and could lead to problems in the application the code was written for. It's like acting on automatic pilot.

I looked back at the last year of programming I did. I opened the project I had been working on for the most of last year and did a code review on it. In general the code was okay, there were tests to cover the core requirements, and I had refactored when I could, gradually trying to improve the code with each iteration. However there was still gaping holes in the code that I should have investigated further. These parts of the code are tested but they are not tested extensively for edge cases, and that's where the bugs can happen.

When I was first introduced to agile methodologies in software development, I read the Extreme Programming website and another book, The Pragmatic Programmer. Both were excellent sources of information and let me taking my first steps in the agile world. Since then I've tried to improve my agile skills with every project I do.

After reviewing the code of the project in question, I couldn't see evidence of an improvement from my time working on the codebase. I seen lots of features that I implemented, but not much else in terms of improvements in the making the code better. When I thought back, I was aware of the features I was implementing but I didn't take the time to really think through the features and their impact on the code. It hasn't cost me any late nights in terms of application crashes, but it's not a road I want to go down.

So this year I'm focusing on a little bit of a reboot for my software development skills. Out goes the new programming languages, the new project ideas and the rest of the programming books I promised myself to read. Back in comes a collection of programming books that I haven't read in over 10 years, but books that I know will get me back on the right path again.

The good habits and practices of great programmers haven't changed much over the years and they probably won't for the next few years. Programming languages and frameworks will come and go, but the ideals and skills that many programmers pursue are still the same as they were 10 years ago. Sometimes it just needs a little time to remember them and go over them again.

Book Reviews #2

Just a few books I read towards the end of the 2013. I've still got some on my list but a few I've started and given up on.

  • The Broken Blade by Kelly McCullough - First book in a series about a washed out assassin and his shadowy companion. Very unique for a fantasy book in that it's more like detective noir. A great read and definitely not like anything I've ever read in the fantasy genre.
  • War of the Roses - Stormbird by Conn Iggulden - This is the first book by Conn Iggulden in a series that will cover the people and events during the War of the Roses. Mostly factually correct, but again the story is great to read just like Conn's Emperor and Conqueror series.
  • You, Only Better by Nicholas Bate - I've read the book a handful of times now, just because it's easy and quick to read, and each time I take a couple of extra notes from it. If you're looking for a book to reboot yourself this year, then get this one. No nonsense and easy to digest.
  • Crafting Rails 4 Applications by Jose Valim - I was expecting more of a reference book when I first heard of this but I was surprise when I read it to find it was more of a recipe book. Once I started to actually read it though, the recipes are simply there to explain techniques that you can use in your own Rails 4 applications. A must for Rails developers.
  • The NOW Year by Mike Vardy - A very short ebook, but a great reminder of tools and techniques you can use to make working with your calendar a lot easier.

I'm done with bookmarking apps

Last year I dropped Pinboard as a bookmarking manager and instead rolled my own bookmarking application. Initially it worked well for me as all bookmarking apps have done, I was able to save bookmarks quickly and easily and move on. But there was still one problem, my bookmarks are in a seperate box from the rest of my day to day data, e.g. my journal and notebooks. It's been a problem with each bookmarking application I have used. How do consolidate them with the rest of my data?

Most of the bookmarks I have fall into one of two categories:

  1. Long term value - Something that I will need to reference on a daily basis until I have it engrained into my workflow, so I will save it and frequently look it up until I have it engrained in my head or workflow.
  2. Short term interest - A post or article on a new programming method, technology or framework. I will read the post and possibly take notes, but chances are I won't re-visit unless I am absolutely need to.

The second category comprises of the bulk of my current bookmarks. I've saved hundreds of bookmarks that I have rarely re-visited since I first saved them. So what's the point in even having them? Just in case? It's a waste to simply save them and not return to them. Why even save them at all?

In the last two weeks though, I've started a new strategy that involves three buckets for saving bookmarks.

The first bucket is a static page on my website. It's simply a collection of programming and development articles that I have found useful after I have read them. I'll also include a quote of the article and my own thoughts with it if needed. These type of articles tend to expire after a period of time just because programming languages are always changing, so I don't need to search back too far on them if needed.

The second bucket is a collection of files I am collecting together on different topics with really useful resources on them. Let's call them cheatsheets. I'm building these as pages on my website as well so that I can access on the go. Each page is a particular topic and listed on it are just a small collection of links. I'm trying to keep each one down to a maximum number of links but I haven't got to the stage where any of them are too big.

The last bucket is my journal. Anything else I find interesting gets saved in my Journalong journal. This process is made easier due to the fact that I can compose journal entries from Alfred and have them open in the Journalong new entry page so that I can just double check the entry and hit the submit button to save it. I am hoping to make this even easier to do in the future but it works for the moment.

This works a lot better for me as I have three files open on my desktop at all times.

  1. This month's current journal file from Journalong
  2. My programming and development notes file
  3. A cheatsheet relating to the type of work I'm currently doing whether it admin work, a weekly review, programming or writing

As all of these files are markdown files, I use the Marked 2 app to preview them as nicely formatted HTML pages that make them much easier to read and interact with.

In the last week I've really noticed a change in how I think about the bookmarks that I save to these buckets. It has given me a chance to assess each bookmark now. Where as before I might have saved all the interesting stuff I found in my reading list and made an empty promise to look at them later, now I critique each page I read to see if it fits in one of the three buckets I mentioned above. If it doesn't fit in a bucket, I can discard it.

Now that I have specific places for bookmarks I want to keep, I don't need to bother about apps on my phone and iPad and bookmarklets or extensions for saving them. The biggest benefit though is that I'm done maintaining a database of bookmarks. Databases work well for lots of things, but I found it an increasing pain having a database of bookmarks that I never re-visited.

I'm done with bookmarking applications now.

Accountable Intentions

I've probably read close to a dozen posts over the last week on setting resolutions. Half of the posts I read were "how to" posts, offering advice on setting resolutions and following them through. The other half were not so much about resolutions but more about actual people's plans for 2014. Two posts really stuck out for me though.

Curtis McHale is a Wordpress developer from British Columbia and is currently self employed. I read his blog for the whole of last year. What's impressive about Curtis is that he is one of the few people I know who set their intentions down for 2013 publically on his blog and also followed it up with a detailed review at the end of the year. That's real and honest accountability.

That's where many people fail in their resolutions for the year. Lots of people make resolutions for the year but most people keep them to themselves. If you truly want to succeed at your intentions this year then let someone know about them. You don't have to write a blog post about it, you can simply let some family or friends know. The key thing is to let someone know who will not accept your excuses for giving up on your plans.

You've probably noticed the use of the word intentions in that last paragraph. This leads me onto my second recommended post about resolutions and that is Patrick Rhone's post about his plans for 2014. Patrick dismisses the word resolutions and uses the word intentions instead to describe what he plans to do this year. It might be enough of a change if you name them intentions that it will increase your chances of seeing them through.

Seeing the success that others have had with their intentions has opened my eyes a bit to perhaps setting my own for this year. Even though it's well past the start of January, it's never to let to lay down some intentions for the next year, month or even day. Just make sure you let someone know that you're doing it so they can follow you up on it after a while.

This year's theme: Smarter Budgeting

I mentioned in a previous post about this year's theme being smarter budgeting. After a sort of successful year in 2013, I asked myself where I could improve and one area was very clear to me, budgeting.

Many of you might be thinking that this is something to do with just finances. It isn't. This budgeting for money and time.

When it came to my freelance work, my own projects and family time, I spent far too much time working on things and not making any real progress.

Let's take my new App.net newsletter for example. The idea for Netterpress started in October, however it's taken until now to get the first edition of it released. All in I've probably spent way more time on this project than necessary. Spending extra time on something isn't the only problem though.

Last year I didn't go out on my mountain bike at all. Shocking. I love mountain biking, I really do. Last year though I didn't even give myself the time to go for a quick ride at the weekend or even a night ride during the long summer nights. What a waste.

Last year's theme of being independent isn't quite complete, but I'm getting there. After focusing on this year for a year, I'm now at a point where it's part of my end game to be independent. To help this along though I need to budget my money and time so that I am getting things done and working towards independence.

I've already started allocating myself a fixed number of hours each week for client work and products, as well as blocking off the weekend from all work and using the weekend for reading, cycling and family time. It will be interesting to see how this pans out over the year.