One of my goals for this year was to get back into playing bass and making music, and I have been doing just that – it’s like the music-making part of my brain that fell asleep sometime around 2003 has woken up again. I’ve started another blog to document it all:-
I love having this blog to remind me where I was at and what I was thinking a few years back. Just under four years ago I announced I was going freelance, and I checked in again about a month later, and then a year later, but haven’t spoken much about it on this blog since. It’s been an interesting ride to say the least so I thought it might be time to write down a few words about the highs and lows.
To put you firmly in the picture of the freelance web developer mindset i’m writing this while I should be working – this causes me anxiety for two reasons: firstly, a task I am supposed to be working on, already overdue, will become more overdue. Secondly, any time spent on this blog post is time spent not earning money. Another way of looking at it is that while i’m blogging i’m working on marketing, so maybe that negates the second point somewhat, but not the first.
- The satisfaction of working for yourself – I’ve got the skills to pay the bills! Whatever doubts and problems i’ve had along the way, i’m making a living using skills i’ve built up over the years, and I can’t dispute the sense of satisfaction you get from that.
- Flexibility and Freedom – I enjoy not having to ask permission if I need to leave early or start late, especially as I have a child.
- The Money – Freelance work has the potential to pay well.
- Work / Life Balance – when I can make it work
- The loneliness of working by yourself – Not so much in a social sense, but more the responsibility of playing every role in a one-man band – being the account handler, the book keeper, new business development manager, customer services, and not to mention occasionally writing some code.
- Flexibility and Freedom – sure I don’t have to ask permission if I want to start early, leave late or take some time off, but websites don’t build themselves and when work stacks up, (which it does constantly) I end up working very long hours.
- The Money – Not always as lucrative as you’d imagine – I’ll expand on this.
- Work / Life balance – when it goes wrong
The things I miss about permanent
Some of these points will vary depending on the employer, but one of the things I miss is the investment and support that an employer can bring – paying for me to attend conferences and time to learn new skills, the camaraderie with co-workers and the skills you pick up from co-workers. Then there’s the regular pay-cheque, which brings me to..
The other big consideration with freelance is the regularity of pay – you might be set to receive a big payment, but what if it doesn’t turn up for six months? Another consideration is how much you expect to earn. People are always shy to talk about what they earn, and that includes me. Whenever a client asks me to quote day rates I can picture the cogs turning in their minds as they come up with an ad-hoc calculation of what they think I am earning. The truth is that it doesn’t always work out like you would imagine.
Much of the time I put in way more time than was originally quoted for, and natural gaps between productive work, meetings, holiday, illness, pitching for projects, unpaid maintenance, support, bookkeeping, procrastination etc. all conspire to even out what could be lucrative earnings into very average earnings. I never really know what i’m earning until after the year has passed and I do the calculations for tax returns. The carrot on the stick for a freelancer is always those potential earnings though – whereas with a permanent job your salary is capped (but guaranteed), there is always potential to earn more with freelance. However, my goal with freelance was always to earn a modest salary but take more time off. I’m still working on the second bit.
So would I ever consider a permanent role?
I’ve thought about this and have come to the conclusion that i’m probably unemployable. That last sentence isn’t going to sound too good on a CV is it! The reason I say this is that what I strive for in my freelance life I would also be looking for in a permanent role, and when I summarise what i’m looking for it sounds like a list of demands from a petulant celebrity:-
- Flexibility/ Freedom with work hours/ days/ location
- Good Salary – at least on par with a reasonable freelance year, when holiday etc. accounted for.
- Some profit related incentive to keep working when the going gets tough (shares/ profit share/ bonus)
- Training/ Conference budget
I think one thing that would clinch it though is the opportunity to work somewhere exciting, maybe abroad in the future – (mountain view sounds fun!), or working as part of a specialist team that would allow me to take things to the next level professionally.
The other thing that would possibly convince me to go permanent would be the opportunity to get my foot in the door of a company or organisation that would lead me back to my first choice of career in environmental science/ renewable energy – that’s another blog post though!
It would be rubbish to stop a tradition after only two years, so following on from my posts in 2009 and 2010, here is a retrospective for 2010 and my plans for 2011. I’m changing the format this time, by dividing into “achieved”, “carried over”, “ditched” and “new”.
- Attend at least one web conference – I had an extremely busy year, so didn’t get to any of the generic web conferences, but couldn’t turn down the international Plone conference, as it was happening in my own city. Although it was specific to a particular open source web content management system, the talks contained enough generic web technology goodness to keep me geeked up to overflowing.
- Get further than “hello world” with Django – Having collaborated on a django project, i’ve got further than this now, and i’m also using it for some tools used for managing data and assets for Kudos/ Lightplanet
- Use and understand some technologies that i’ve been ignoring – I’m going to claim that as achieved, on the basis of the points above – i’ve learned plenty about Django, and python in general. This bullet point will always be carried over though, as there is always something new to learn.
- More on-site freelancing for agencies – It’s always tricky finding a balance with this – I did a fair amount of on-site work, but it often got tricky trying to balance my ongoing client work, with the requirement to be on-site somewhere. I’m still open to this, but the other project work needs to take priority, and as such i’ve started renting a desk in a shared office again.
- Keep Trading and survive the recession – No shortage of work again, so thanks to everyone who gave me work, but i’ll keep my fingers crossed and carry this one over again..
- Launch a web app – so close on this one, but the manic run up to xmas and self-enforced work-free xmas holidays stopped me releasing my pet project, working title: Eat Static CMS. The name, some may have guessed is a tribute to a 90’s techno outfit, but also refers to the fact that the app uses text files rather than a database. It’s a basic blogging engine with niche appeal, I will make it available as a beta ASAP this year, as soon as i’ve tidied it up.
- Relaunch Too Old To Skate – The site is still in limbo, and still reflects how little i’ve skated again, which once again I intend to change
- Attend at least one BarCamp – the Bathcamp BarCamp clashed with Plone conference this year, so I didn’t go, but want to get to more grass-roots events this year.
- Better Customer Service (By saying “No” sometimes) – I wanted to put this on the achieved list, but looking back I took on too much again towards the end of the year, and customer service suffered as a result, so once again i’ll try to find the balance in 2011
- Get to grips with Plone 3 skinning – Plone has moved on and so have I, but this doesn’t mean i’ve given up on Plone, but I don’t plan to do any Plone 3 work. Plone 4 skinning/ theming is still on my list, but that’s a whole new technology, and a technology that can be used independently of Plone.
- Put up a proper portfolio – I just can’t imagine having the time to do this – I think potential clients can find out whether I have the skills and experience they need by looking at this blog and my linked in profile. As i’m more of a programmer than a designer, a visual portfolio is less important to me. Maybe if I run out of work i’ll rethink this one?
- Fix on a PHP framework – until someone (me?) builds a PHP framework that is basically identical to Django, with it’s production-ready admin forms and API as standard, i’ll just use whatever seems right at the time, or no framework at all.
- Buy a new Bass Guitar and play the hell out of it – I horrified some of my older friends by selling my one remaining bass last year. I sold it as I had completely stopped playing, and having it hanging on the wall just seemed a waste. Most people i’ve befriended in the last 10 years don’t know I ever played. Playing bass in bands used to be an important part of my life – I’ve actually been playing bass for over 20 years and was once pretty good (if I say so myself!). I sense a mid-life crisis coming on in the next couple of years, so I need to get back in practice for when I inevitably decide to form another band!
- More “work from anywhere” adventures – I spent 6 weeks touring in Europe with my wife and son this summer, working from my laptop to earn money as I went. It was brilliant, so hopefully more of these adventures, the same or different in 2011
- More blogging! – including some personal blogging. I think i’ll need to divide this site into “babble” and “techobabble” – not everyone who reads this site looking for a CSS hack will want to read my self-indulgent drivel and not everyone who reads the site wanting to know how I really feel about the experimental bass playing style of jaco pastorious wants to read about the new python module i’ve started using, so i’ll provide the opportunity to follow from both a techie and non-techie viewpoint, although it will all still be one blog. Looking back through the archives of this blog, i’ve been doing this over the years anyway, going through phases of techie and non-techie content.
If you ask any of my family or friends what it is that I do for a living, you will most likely get, at worst, a blank look, or, at best, maybe “web designer?”, “computer programmer?”, or maybe just “something to do with computers?”. It doesn’t help that my linked in profile has me claiming to be doing at least three different jobs at a time, and that I seemed to be involved with a number of different companies. I think possibly even those that work with me aren’t entirely sure what it is that I do most of the time! I thought i’d clarify what i’m up to at the moment, and how things have evolved over the last few years.
I am a freelance web developer
Primarily I make my living as a freelance web developer. This means that I spend most of my time building websites. By “building” a website I mean taking it from an idea to a finished website – planning, designing, templating, coding and uploading to a web server so that it is live on the internet. As well as web “sites”, I build web “applications”. These are computer programs that people interact with through a web browser. A web browser is the computer program that you use to look at websites e.g. internet explorer (the blue E), firefox (the fox wrapped around the world) or maybe safari (the compass). As well as looking at websites on the internet, you may be using a web browser to use web applications in your workplace.
But am I a designer?
I occasionally design websites, but it isn’t my specialism. If budget allows I prefer to hire a really good designer to come up with the design concepts. I know lots of good designers. I take their design concepts and run with it to put all the technical stuff in place to take it from an idea to an actual website. When I work for a design agency, I am hired always for my technical skills, never for my design skills – let’s face facts, I think there’s a reason for that! Most of the work on my “portfolio” wasn’t designed by me – I usually just did the technical bits.
Do I do any computer programming that isn’t related to web sites or web applications?
Increasingly more. I seem to be doing more and more data crunching these days, involving writing scripts that move files around on servers and extracting data from different places and putting things in databases. I would call that programming. Most of this type of programming is actually using skills I learned while building web sites and web applications, but some of the things i’ve built aren’t web sites or web applications at all.
So am I actually freelance, or do I work for a company?
By freelance, I mean that I work for myself, but companies and organisations employ me on a freelance basis. Therefore sometimes I may appear to be working for several companies at once. Sometimes I work directly for my own clients, other times transparently as an additional resource for a design or digital media agency. Either way, I invoice for the work I do on either a fixed price or a “time and materials” basis, and this is how I make a living.
What is Olivewood then?
In 2007 I co-formed a company called Olivewood Data Technologies Ltd, and all my freelance work is invoiced through Olivewood. Olivewood is co-owned by a client and friend, and we set it up primarily as a vehicle for consulting and development services, but also as a legal entity to own the IP for a number of niche eCommerce web applications that we plan to sell to other companies. At one point we thought Olivewood might be a digital media agency, but now we are pretty sure it is a software consultancy. [Update 2014 – Olivewood is now a supplier of high power LED lighting specialising in lighting for cold storage warehouses – how things change!]
And what about Foundry?
In May 2010 I sat on the watershed balcony with fellow freelancers Dan Fairs and Dan Hilton and talked about teaming up to be able to take on and pitch for projects bigger than we could handle as individual freelancers. We came up with the name Foundry, and shortly after collaborated on a successful project together. We all still work as freelancers, but hope to spend more time working together under the Foundry banner in 2011 and beyond. The challenge is moving the focus from looking after our own interests and incomes to working together, and to do that we need a big project that would keep us all too busy to take on other freelance work.
Will I fix your computer?
No I flippin’ wont! Have you tried switching it off and on again?
A couple of years ago I created a website for Kudos Business technologies. The site has been fairly dormant for a few years, but as I am now “involved” with Kudos (more on that at a later date), recently I decided to redesign it and rebuild with wordpress 3, as the bespoke CMS I put in place before using using cake PHP wasn’t nearly as user friendly as the tried and tested wordpress. I’m really pleased with the result, both from a technical and aesthetic point of view.
I’m looking forward to expanding this site – the products database on the Kudos site is now quite out of date, and there is a much larger range of (mostly LED lighting) products over at the Kudos retail site. The Lightplanet store is hosted on a 3rd Party system which doesn’t have a decent product export api, so I’ve actually written a screen scraper to extract data from the lightplanet site to use in our own database. This will allow us to collate more technical data for the products, which can be used on the kudos site. Phase II is to create a comprehensive Products information site from this data, including an API to allow us to integrate with 3rd parties.
[update 2014 – links removed as these sites no longer exist]
Some notes and thoughts from day of plone conference 2010. These are mostly in note form, but wanted to get these online anyway, while they are fresh in my mind.
fixing the ungoogleable by Elizabeth Leddy
What happens when something breaks, and a simple google search doesn’t offer any results?
First, warn people (so they don’t bother you while you fix it, and they don’t panic).
Work out how quickly can you access your backups? I think this is very important – personally for smaller sites i’m doing individual site backups as packages mainly to make it convenient to restore them in a local dev environment, but I know some people are relying on whole server backups on tape. This would be laborious to restore in an emergency.
Isolation by elimination -> network, hardware, software, data
map out your system!
Eliminate things by switching them off – write your code so that it can handle dependencies being switched off.
Set up a system so that you have an isolated instance (so you can look at logs of only your own activity, rather than mixed with everyone elses)
Create a dashboard (maintenance page)
Write Test case’s to diagnose faults
Start writing a “help” email, but don’t send it. This is apparently known as “rubber ducking”. I do this all the time, I often spot my mistake when I past in a traceback to an email message to send to someone!
“horizon of intervention” – At what point do you need external help?
Get to know people with specialisms and buy them a beer! Participate in the plone community (I really need to do more of that).
Create tickets and close them as you go
Document your processes.
The state of plone caching by Ricardo Newbery
cachefu – useful tool, but as far as “internet time” goes, this is a little long in the tooth now (started 2006). End of life – critical bugfixes only
plone.app.caching – will be in future plone releases, but available now
load testing with funkload (not accurate regarding CSS/ image discovery)
load testing with multi-mechanize
BrowserMob – not free
Building a custom app with plone with minimal development by Eric BREHAULT
This was extremely interesting – Eric is the project manage for Plomino – a plone add-on that provides application development toolkit for creating database applications within plone – i.e. the types of database applications that non-technical people might create on there own machines with Lotus Domino, Filemaker or Access. The data is still stored in the ZODB, but models and forms can views can be created through the web. Formulas are done in python.
I can see this being really useful – all too often I end up building custom applications based on complex access database or excel spreadsheets i’ve been provided, but if I can persuade clients to use Plomino, then not only will it help get that data in a format suiteble for building a web application, but data can be collaborated on across teams, rather then emailing around (and inevitably forking spreadsheets and databases). There were some nice examples of data visualisation – a great quote “almost useless, but very nice”” – you need these to impress your boss.
Themeing with XDV (Diazo) Laurence Rowe
I wrote some notes on this yesterday, connected to Nates Deliverance talk, so won’t go into this here, other than to quote Laurence: “we write XSLT, so you don’t have to”
collective.amberjack: chapter one. The interactive age. Massimo Azzolini
An example was given using the windmill testing framework (windmill in itself looks nice alternative to selenium).
The Art of Integrating Plone with Webservices with David Glick
Most of this was over my head, but one important note I made from this is about urlib (which I use in a django screen scraper app i’m developing) can have two possible error responses – URLError and HTTPError – two possible error responses.
external ecommerce and plone playing along with Sasha Vincic
There seems to be a bit of a theme going here – an acknowledgement that Plone works out best long term if you use it as a “black box” CMS, and don’t try to do everything with it. The upgrade path is easier if you don’t add on your own customisations – “clean plone”. The current plone ecommerce offerings are not as good as external systems, so it is better to integrate with an external system, which is also then kept clean to allow easier upgrades.
In the python world there are some Django Ecommerce stores LFS and Satchmo, but the store doesn’t have to be Python – other proven systems such as magento can also be integrated with Plone.
To integrate with plone you need to integrate search, linking, thumbnailing. Valentine achieved search compatibility by creating objects in plone via an RSS import – see valentine.rssobjects. A latecomer to the talk asked “but which plone ecommerce product would you use if you had to?”. Answer “we wouldn’t”.
collective.transcode.star (lightning talk)
manage online transcoding
http://plone.org/products/collective.transcode.star – looks interesting, and may bring plone back into the picture for a project i’m doing.
osx style finder widget for navigating/ organising content in plone – looks great!
Just back home after day one of Plone Conference 2010, with my mind buzzing so thought it would be a good time to write up some of my thoughts and notes. It was really difficult to choose between the talks on offer on the three different different tracks, but here are some thoughts on the ones I attended.
Keynote by Alexander Limi and Alan Runyan
Two main themes here – ubiquity/availaibility and designer friendliness.
To make Plone more mainstream it needs to be available to non-technical end users through the same means that other systems are already available – namely being able to deploy easily on cheap hosting, specifically the one-click installers on shared hosting in cPanel and similar. This would allow users to easily evaluate Plone for their needs in the same ay that they can already with wordpress, drupal and joomla – apparently there is a new joomla instance created about every two minutes. I must stop Alan Runyan and see if he has thought about microsoft web platform installer – nowadays this includes the option to install wordpress, drupal, modX, and load of other systems, including downloading and installing dependencies. It would be great if Plone was in that list.
One of the aims of Plone 5 is to make it more designer friendly. I think this is really important – even though since the release of plone 4 i’ve started using plone again for intranets and extranets (mainly straight out of the box with a few minor cosmetic tweaks), I currently still use something like wordpress, or a home-rolled CMS for website builds. That is now going to change – the theming story is being completely re-written by the introduction of Deliverance/XDV/Diazo (already available – more on that later), and Deco (TTW layout and content editing). The aim is to make Plone appeal to designers as something that helps, not hinders them.
Quote of the talk has to be from Limi – “Plone doesn’t suck, because the developers don’t hate the core technology” (or something like that) – in reference to the revelation that many drupal/wordpress/joomla developers admit they actually hate PHP, whereas Plone developers love python.
Deco: new editing interface for plone 5
The next talk I attended was Rob Gietema’s demo of Deco. This is looking really good, although i’m a little bit skeptical of drag and drop and in-place editing (I like front-end based editing, but prefer lightboxed modal editing to in-place), mainly because i’ve seem layouts explode and page elements disappear, or refuse to drop in the correct place on similar systems in the past. However, I haven’t actually tried this one yet, maybe i’m just clumsy! I think in general designers and content editors are going to love it.
LDAP and Active Directory integration
I attended Clayton Parker’s talk on LDAP and active directory integration – can’t say I absorbed much, but i’m sure i’ll be asked to do this one day, so it’s good to know that this is tried and tested and the tools are already there.
Easier and faster Plone theming with Deliverance and xdv
Nate Aune gave us an overview of Deliverance. I’ve known about Deliverance for ages, but the penny dropped for me today about how useful this is. The basic principle is this – deliverance acts as a proxy to transparently take HTML output from a website and merge it with HTML from a theme, according to a simple set of rules. In the case of plone, this means you can create a theme in static HTML and have content from a default theme Plone site displayed wrapped up in the static HTML. Simple rules can be applied e.g. “take the news portlet from the plone site, drop the header and footer and all the images and display in the element with and id of “recent-news” from my HTML theme. magic!
Nate quoted one example where the HTML theme is stored in a dropbox folder which the client has access to to make tweaks and changes. I can see front end developers and designers loving this.
There was much discussion at the end over which technology should be used for this – XDV is a fork of an earlier version of Deliverance, which has slightly different functionality. XDV, which is to be renamed Diazo, will be the theming engine for Plone 5. With that in mind, i’ll concentrate my efforts on Diazo. I’m excited by this for non-plone reasons – a majority of my works seems to involve integrating technologies that don’t belong together – this will really help.
Design and development with Dexterity and convention-over-configuration
Martin Aspelli gave a talk on dexterity – the (eventual) replacement for archetypes. This is already available, but not mature yet. The talk was mainly conceptual rather than code-led, focussing on best practice for designing your site or application – when it is suitable to create a content type, and when you might be better off creating a form, or using a relational database. Best quote “code is like a plastic bag” (reduce, reuse, recycle). Write less code.
Laying Pipe with Transmogrifier
Another talk from Clayton Parker – transmogrifier is a system to package up migrations of content from other systems. My thoughts on this were that it looked like hard work for a one off import (usually i’d write a one-off python script for something like this), but creating packages would benefit the plone community e.g. if there were packages available covering migrations from a standard wordpress, drupal or joomla, this would benefit plone. I suppose this could also be used to import content from older instances of Plone, where the upgrade path is broken.
Multilingual sites – caveats and tips
Sasha Vincic talkd about strategies and gotchas for multilingual site builds. Even though Plone has tools for this, there are common scenarios, such as the “missing page” scenario where a translation of a site may not have the same number of pages as the base translation. He also covered common issues such as escaped HTML being translated by third parties and being delivered content where HTML attributes have been translated, therefore breaking the HTML.
Guest Keynote: Challenging Business
This was an inspirational treat for the end of day one – Richard Noble is a fantastic speaker, and after a day of CMS talk it was great to hear his story of the challenges of his past world land speed record record achievements, and the current one – the Bloodhound SSC project. As well as building insane rocket powered cars (the current one has an F1 engine onboard just to drive the fuel pump!), his goal is to inspire children and young people to become engineers, as there is an impending massive shortage of engineers in training. I was also interest to hear that there will be no patents on the technology developed for the new car – the advancements will be made avaiolable for anyone in the engineering industry to build on – sound familiar?
Earlier on this year I was fortunate enough to be asked to help the Aardman Digital team out on the companion website for the Tate Movie Project . This was one of the most fun and technically challenging website builds i’ve worked on. Working as part of the team, along with several other Bristol freelancers, I helped integrate the cakePHP site with wordpress and vanilla Forums. This was also one of the largest site builds i’ve worked on – multiple flash developers, PHP developers, designers, animators, front end developers and producers, all coordinated by subversion, unfuddle and the biggest wall of printed out screen grabs i’ve ever seen!
Firstly, I want to clear up any obvious misconceptions that the title of this blog post may have caused. I do not hate Apple (ok, maybe a bit), iPhones, iPads or iPhone/iPad developers. I have an iPhone, and I love it. I also use mostly apple mac computers and love those too. I’m writing this on an old macbook. This post is more about my reluctance to invest my time in closed platforms.
I felt inspired to write this having been contacted several times recently out of the blue by people searching for freelance iPhone developers. The presumption seems to be that if you are a web developer, particularly someone who specialises in being a multi-skilled jack-of-all-trades like myself, you will inevitably be learning to code native iPhone applications.
I’ve also been contacted by at least one person looking for someone who can code for both iPhone and android. That sums it up nicely for me – front end web developers are expected to be able to build stuff that works across different browsers, a job that is becoming increasingly straightforward, thanks to the hard work of the web standards movement over the past decade. However, mobile app development is moving in the opposite direction. A native mobile applications developer will need to invest their time learning multiple languages. As the other phone manufacturers catch up with Apple and Google, this requirement will keep forking.
While i’m excited about the developments in HTML5, you currently can’t use it to build the equivalent of an advanced native iPhone app, especially those that have a heavy requirement for offline functionality. Of course you can build mobile web apps that work via the mobile device web browser, and with software such as phonegap, these can be wrapped up as downloadable apps, and give you a route to access device functions that you may not have had in a purely browser based app. This I may look at, but always with the slight trepidation that Apple will change their app store T&C’s for the umpteenth time and suddenly my (imaginary) retirement-funding mobile app is blown out of the water.
The rules imposed by Apple and their app store are what bothers me most. I’ve managed to avoid the over-used term “walled garden” so far, but if anything defines it for me, the app store does. It flies in the face of everything I love about the web, and the way i’ve managed to forge a career as a web developer. I often say to people that I feel grateful for the timing of the internet’s development. It started to explode at just the time I was scratching my head in my early twenties wondering how on earth I was going to make a living. That first step of creating an HTML web page (my CV) and uploading it to some free personal web space, taking me from invisible job hunter, to suddenly visible anywhere in the world, was a massive game-changer for me, not because anyone actually found or looked at my CV, but because suddenly the possibilities were endless. The open web enabled me to just start building and publishing stuff, without needing anyone else’s permission. A few months later, I started getting paid to do it.
If you started reading this because you are looking to start a career or change a career and are interested in becoming an iPhone/iPad developer, I say go for it – there’s a massive demand, so if you get the skills quickly enough, you’ll almost certainly find a job (or freelance contract). I’m not trying to dissuade anybody else from becoming an iPhone developer, I guess what i’m saying is that I aspire to continue to pursue the path of being able to work within the rules and guidelines that I adhere to, not the ones set by Apple, Google or whoever the next monopoly turns out to be (remember microsoft?). Hopefully down the line this will include rich mobile apps, but hopefully i’ll never be seeking the approval of Apple or anyone else to publish them.