Innovation in Software

Vagueware

Archive for the ‘work’ tag

You are reading a blog - Innovation in Software - no longer under active maintenance. These pages are kept here for archive purposes. If you wish to find out more about Vagueware please read our current website which will include links to the new blogs when live.

Overcoming Developer’s Block – 10 Tips

with 3 comments

Development is a creative pursuit. Whilst many think of it as a purely technical challenge, it requires a level of lateral thinking about the World that is a cross between doing a crossword puzzle, composing a symphony and having an argument with people who don’t exist. It’s not surprising some of us are a little eccentric.

It reminds me of the writing process a lot. You sit down at a blank screen after having conducted your research and you have to just dig in and find some way of making progress. Many a developer struggles with a blank IDE screen much in the same way many a writer struggles to find influence. When I was learning how to write properly, I was told that “a professional writer can not be like the poet who spends a morning taking out a comma, and the afternoon putting it back in”. We need to work hard. Same with code. A block then is a real problem.

Slashdot this weekend asked How to Get Out of Developer’s Block?, or rather a user asked:

I have spent the past six months working on a software project, and while I can come up with ideas, I just can’t seem to sit down in front of the computer to code. I sit there and I just can’t concentrate. I don’t know whether this is akin to writer’s block, but it feels like it. Have any other Slashdotters run into this and if so how did you get out of it? It is bothering me since the project has ground to a halt and I really want to get started again. I am the sole developer on the project, if that makes a difference.

The comments that follow in the thread that range from the sensible to the bizarre. I have a bunch of tricks I use when I’m struggling, so thought I’d put them together

  1. Get enough sleep – you have no idea how sleep deprivation can mess you up when you’re trying to concentrate. When I’m working on code, I take a minimum of 10 hours sleep a night. Anything less, and I’m not going to be able to think in purely abstract terms for 8 hours straight during the day.
  2. Exercise – and whilst those of you who know me might laugh, it’s important. I actually do get regular exercise when I’m coding full-time. Just a long walk at the start or end of the day can be enough. Something that gets the hear rate up helps though (perhaps explaining why I always code better the day after… errr… private stuff that gets my heart rate up!).
  3. Don’t drink alcohol – this was something I got when I was trying to sort out my pilot’s license. When you’re going flying, I don’t drink for 24 hours before getting into the plane. I found my workload was easier, my writing got more fluid and my code went up a gear. On big client projects I don’t drink at all on school nights. If I’m drinking in the evenings whilst on a project, it’s because the project isn’t challenging me and I’m bored.
  4. Clear your environment out – I’m currently sat at a desk with perhaps 150 items of paperwork on it. In this environment, I can not focus on code. My mental processes are cluttered because my physical processes are. Tidying up might seem like a stupid way to get out of a block, but I genuinely find that a clear working environment leads to much clearer mental processes. I don’t know how or why, it fascinates me, but just get your physical environment fixed up and suddenly your mental environment starts to fire a little better than before.
  5. Write a trivial test – this is the code version of “free-writing” that I sometimes use to unblock on writing an article. Basically write a small test (or spec if you’re BDD) for something almost trivial and then get it to pass. Repeat. Now you’re back in the game.
  6. Work on the design – it’s amazing how bad we collectively are at really thinking through a problem. Go and work on some wireframes or develop some sketches of the underlying schemas and try and simplify them. Reduce things down, and suddenly you’ll see areas you can work on right away outside of the problem you’re blocked on. If you’re not able to delve into design or architecture because of the nature of the project, quite frankly you need another bunch of guys to work with.
  7. Try and find it done already – I once spent a lot of time trying to work out how to solve a particular problem. The answer was non-trivial to implement in my mind. I kept putting it off. I was scared of how bad I could end up making my solution. In a fit of procrastination I spent an hour digging around the problem area and eventually found an open-source tool that did exactly what I needed, out of the box. Well, that solves that problem…
  8. Are you scared of success? It might sound like a stupid question because success is good, right? But when we succeed at something, we conquer some barrier we have worked to overcome for a period, things change. Suddenly people might look at you differently. Perhaps you end up having to work on a less interesting project. You might want your current project to be a success for other reasons. Ask yourself whether you really want this project to succeed. And then realise there’s no getting out of it: failing, or staying where you are is just as bad an outcome and harms you, your self-confidence and your reputation.
  9. Find a SCRUM meeting somewhere – one of the very best things about daily stand-up meetings in SCRUM projects is that the meeting only has three topics of conversation: outcomes from stuff you agreed to do in the last meeting; what you plan to do today to further the project, if anything; and obstacles in your way. Not everybody has a team (and sole development is the hardest form there is, trust me), so find a SCRUM somewhere else. Use Twitter, your blog, a group of friends down the pub, anything. Just talk about what’s stopping you and see if anybody can help you in any way, or offer suggestions. Obviously asking a friend about a tricky problem relating to class inheritance isn’t going to yield results if they don’t know what you’re on about, but ask around more liberally than you have done to date.
  10. Work on something else – we all have other projects on the go. If the above isn’t working, just go and get on with something else. Your subconscious is dealing with the problem and will come up with a solution. Just make sure you hit your deliverables schedule if you have one!

Now comments are back up, I look forward to hearing of any other tips people might have.

Written by Paul Robinson

June 29th, 2009 at 9:30 am

A Readjustment of Time

without comments

“Time is an illusion. Lunchtime doubly so.” – Douglas Adams

Thanks to Twitter, Facebook and blogs, it’s no secret within the local geek scene that I had a mild health scare around this time last week.

Note, for somebody who has never been to hospital other than as a visitor, a “mild health scare” feels like the scariest thing in the World.

The short version is, something odd happened, it could have been a lot worse but the diagnosis is ultimately positive in that it is not the very worst it could have been.

However…

It scared me. I’ll be honest: I work harder than most, I enjoy my social life more than most, and I have found it hard over the last three years to say “no” to anybody. I want to be involved in everything, if not organising it. I have the kind of lifestyle that worries mothers and makes fathers yearn for their own youth.

To find myself in the position I did made me realise I was risking everything

Between the scare and the diagnosis I had a lot of time to think about how that strategy was failing me, my family and my clients. I have started to evaluate what it is I want to continue to do that I did before, and what I am happy to consider left behind, dead.

There are lots of impacts that have emerged, wide-ranging in their scope. However, I shall limit myself to a discussion of the professional impacts here:

Basically, If I work 60 hours per week (as I have done), I get ill. We all do. You can perhaps do this for a short period of time or doing menial work, but if you’re doing abstract thinking to deadlines at that load for three years, you will break. Therefore including travel, I’m not prepared in future to go above 45 hours per week.

Going to geek events, reading mailing lists and RSS, etc. I now have to consider work.

Given my clients and other business need me for about 40 hours a week, I therefore have to be selective about the other things I do. Whilst I will remain a champion of Fly The Coop, NWDC, and remain a vociferous supporter of the local tech industry and help it when I can, I will be:

  • Unsubscribing from most mailing lists I’m on
  • Going to fewer geek events
  • Saying “no” to more requests (but please don’t let that stop you requesting)
  • Spending more time doing the things I think I do best

I don’t expect most people will notice or care, but I do note that people sometimes notice when I’m “quiet” for a while, so this is advance warning. I am no longer receiving mail for most groups I’ve been active with regarding email. I will show my face at about a quarter of the events I did before.

The flip side, is this blog is about to return to the regular, well-researched writing that highlighted its early days. For blog readers, this is excellent news.

Good luck to all of those in the community – I will be back, but only once a few other things are sorted out.

Written by Paul Robinson

January 16th, 2009 at 1:52 pm

Walking a mile in another man’s shoes

without comments

I never “got” code reviews. I never understood how sitting around talking about somebody else’s code would help them or you, beyond being able to weed out the obviously awful coders.

This week I’ve been doing some consultancy, in-sourced to help a firm evaluate what their developers have built for them. As part of that process I’ve had to review documentation, specifications and code. The process has been at times confusing and enlightening.

It’s one thing to be able to say “this is how it should be done” when you’re not a developer, but it’s another thing when you are a developer who hasn’t done some of those things yourself. This process has taught me as much about myself and my own code as it has about these guys’ code.

Interestingly, I now see things from a buyer’s perspective much more clearly, and I can see how frustrating this must be from the other side. I can see how things which we don’t consider important are to a buyer critical. I can see how clever solutions can sometimes be too clever. I can see how something simple you forget to do can make all the difference.

Written by Paul Robinson

December 14th, 2007 at 12:03 pm

When to Quit on an Idea

without comments

A friend just sent me a link to an article on 43folders asking the audience:

How do you know when it’s time to move on? What makes you make up your mind?

You have no idea how many shelved ideas I have right now: that’s why I built vagueware, so I could take my ideas and put them out there for others to work with. Right now, I’m not getting the time for that that I need, but will do shortly.

There are then the small number of ideas that I do want to work on but can’t afford to right now. Those ideas are ones I intend to hire people to help make reality for me as they’re just too big for one guy on his own. If they’re not rolling by January, I might shelve them too and concentrate on what I do to make a living (which incidentally, I enjoy).

The question I have is for the readers here: I know you all have ideas you’re not doing anything with. So what’s stopping you putting them on vagueware? Do you really think you’re going to work on it in the next 6 months? Don’t you want to be like Frank Schmitt who in answer to that question said:

Finally an oddball outlet I have is halfbakery.com. I have a lot of what seem like semi-decent ideas that I’ll never realistically have the time and/or resources to pursue. If I post them there, I can at least claim bragging rights when someone else gets rich off the idea.

Halfbakery is a great site in all sorts of ways, but I always found it satirical. What about those software ideas that can really make it but we don’t have time for? What if vagueware helped teams of people come together and produce open-source versions of your ideas? Isn’t that something donating ideas you’re not working on to?

In other words, why are you not posting ideas to the site right now?

Written by Paul Robinson

November 13th, 2007 at 11:37 am

Getting in Zone Part II (the opposite)

with 2 comments

In the last 24 hours, I have probably written more code than I have in the previous week. It’s tested, solid, and ready to roll out. I now know how to get into this zone more easily in future. Even with Fresher’s Flu having an effect on my performance this last week, I’m surprised by my findings.

I’m typing this sat in a coffee shop overlooking Albert Square in Manchester. The sun is just about to dip below the buildings to the West, and the cobbles have that weird liquid gold colour they get in late Autumn evening light. It’s irresistible to sit here and stare and watch Mancunians go about their business. People all around me are talking, laughing, joking, arguing. A couple across the road just married at the Town Hall are having their photos taken, and the crowd is making a little noise.

Meanwhile I’m writing code (and this article), and it’s just struck me that right now, right here is when I am at my most productive.

I always thought my method was the exact opposite of this. Around a year ago, I wrote an article on “The Zone” and at the time observed:

‘Getting into the zone is not always easy. Different people have different techniques, nearly all of which involve a bit of peace and quiet and no interruptions.

Once you’re there, the worst thing that can happen is to be interrupted – I frequently shut down mail and IM clients when I want to make progress. When I used to work in shared offices, I would find a quiet corner. I shouted at people who interrupted me with trivial problems and put signs on my desk saying “Please don’t disturb unless building is on fire”.’

The key to my mind has always been to avoid interruptions. Peace. Quiet. That’s all you need, right? Well, not quite.

You see, I am not in a peaceful situation right now. It certainly isn’t very quiet. It’s actually quite a bit of a racket going on around me – coffee machines, frappes being mixed with ice, a dozen conversations, now I notice a kid is being a bit brattish in the corner. Yet here I am, working in perfect flow.

In the last year and a half I’ve mostly been working from home, and I’ve found it harder to get into the flow, the zone has been alluding me. My usual practice is to make sure absolutely nothing can disturb me and then try and work in complete silence. Except that’s really, really hard.

I think the important thing is, I need trivial noise in the background as that forces me to focus and try and block things out. Complete silence leaves a big empty noise in my head that needs to be filled with thought and it’s too easy to lose focus. A mild noise I need to work very slightly at blocking out forces me to really lock into the task in front of me. Hours could pass, and I wouldn’t notice, but for the cobbles dimming outside the window.

I still can’t get into zone thought if even one single phone call or IM message calls me away in the middle of something. Having a direct interruption is as dangerous as ever. So I’ve revised my thinking: “trivial distraction = good, direct interruption = bad”. I am starting to get into the habit of setting my status to “Away” when I’m working so I only get distracted by urgent/important issues.

It really has caught me by surprise though, just how solid the work I produce is when I’m sat in a coffee shop full of students. A year ago when I wrote the first article I would have laughed at anybody suggest anything like it. Now I know better, and will seek out coffee shops and places of mild, indirect distraction as often as possible.

Written by Paul Robinson

September 29th, 2007 at 3:45 pm

The Wonders of Telecommute

without comments

I never really wanted to do what I call ‘bespoke’ development when I started Vagueware. I have ideas for my own sites, my own products and services, and I wanted to do those things. But they take time and money to get started, and as a result I’ve been taking on the odd project to help pay the bills as I get on with my plans.

Now, I tried taking on freelance work a few years back and it was a difficult gig. Mainly because a lot of the work was on the other side of the planet, and I wasn’t. It doesn’t matter that I specialised in Internet technologies, I had to go on-site. Sometimes this worked remarkably well in terms of new experiences for me – I can heartily reccomend visiting the Falkland Islands if you ever have the chance – but more often than not it just meant I didn’t get a lot of work.

The time around, things are different. The presence of Skype, cheap collaboration tools, people trusting in ssh and RDC to get things done, means I can now be anywhere where there is broadband and get on with a day’s work. Today for example, I will:

  • Be deploying a new build of Mephisto to a server somewhere ‘down South’ for this blog
  • I’ll be RDC’ing into a Windows machine from my Mac to update some code I’ve developed to help a charity understand some outcomes surveys
  • I’ll be putting together a 1-page summary specification for a new software tool for a recycling charity
  • I’ll be updating a set of security tools on a server in Germany, making sure it can’t be attacked
  • I’ll be getting a Rails application working on a server in… I’m not sure where…
  • I’ll be reading documentation produced by people all over the World and maybe even updating it
  • I’ll be talking to a friend in the States about a project that may be coming on-line next month
  • I’ll be talking to another friend about 5 miles away about a bunch of other projects
  • Meeting over Skype with a business partner to talk about roll-out of another venture

And what do I need to live this jet-set lifestyle? My laptop (a G4 iBook in need of a RAM upgrade, I admit), my broadband connection, and…. well, somewhere comfy to sit – I’m typing this whilst in bed. No office, no fax machine, no secretary, no car, nothing but my laptop and an internet connection.

Thing is, if I can be anywhere comfortable with an internet connection and do this, why do I need to be in Mancehster at all? Oh, that’s right – it’s the coolest place to live in the World. :-) However, I think next Spring a road-trip might be in order.

Written by Paul Robinson

September 12th, 2006 at 8:22 am