43

After working hard and saving money for a decade+, I "retired" to be a stay-at-home dad. I'm trying to live modestly, to make the money last, but it will run out. Returning to work full-time would be a shame, and I don't need that much money anyway.

I'd like to work part-time.

I've always found my productivity as a programmer scales with my immersion in the problem. I fill my brain with the software. I become the solution I am creating. I spend just about every waking minute thinking about it.

If I were to work part time, I'm worried that I wouldn't be able to work to my full potential: at 1/2 time I wouldn't be doing 1/2 as much work. Unless, of course, I spend all my non-working time thinking about the problem, and then I'm not really part-time.

Furthermore, in my experience, time to market matters a lot: taking twice as long to produce something doesn't do much for market success.

What's your advice? How can I maximize my productivity while programming part time?

33

The quickest way to have anything done that works for me:

  1. Plan plan plan. (even if you just write your tasks in paper.. no technology required here)

    If you are going to work with a particular technology you know you can find the answer to most if not all of the issues you will come across by googling your way out..avoid this like the plague, try to mock up your path prior to any implementation that might drive you into one of those google searches where you get the answer in seconds, but you remain online and distracted for another hour or more..

  2. Don't think with your fingers!

    Read above, timing yourself and restricting your own use of the computer/internet can save you hours and days, try to use the computer only when you know exactly what you are trying to do..

  3. Time yourself and avoid compensating.

    Say you planned to finish a task in 3 hours, but after those 3 hours you think you might squeeze all the work you should have done 3 hours before, in the coming 15 minutes..do not throw good time after bad..make a point to yourself that you failed to finish the task in those 3 hours and reschedule accordingly. Use those following 15 minutes to make a note to self of why you failed to achieve your goal for those lost 3 hours.

It seems counter productive to throw planning time into projects and work, but it gives you self metric capabilities that will seriously improve your ability to evaluate your self, your performance and will define how successful your time management will be.

Took me months and years to get this right, but just like any addict, when I fall back on the habit of not timing myself and not planning my future tasks well enough, time becomes this einsteinian thing which can stretch and shrink beyond human comprehension.

17

Apart from Ric's excellent answer, I can offer a few tips as I mix client projects from a wide range of disciplines with my own development projects, thus am effectively a part-timer in any given domain.

One of the classic gotchas is the time taken to regain your immersion (flow) state:

  • Choose your language and IDE so you take little effort to get going again (I recommend REALbasic very highly on this basis).
  • Use an issue tracker at a very fine level of granularity. I've used Mantis for many things in the past but personally now use OnTime with its (free personal license) - it's trivial to enter things, link documentation and search.
  • write stuff down - I like wikis and, again, recommend OnTime because that gives me the wiki along with other infrastructure in one product.
  • keep a daily diary and make sure you write a quick brain dump of where you're intending to go next - you don't know how long it will be until you return to that activity (recording this in a wiki is another choice, whatever's fastest)

Other tips:

  • have a voice recorder handy at all times for quick thoughts - either in your phone or buy a separate digital recorder but make it something from which you can grab recordings and archive them, to save transcription time, and they are digital in a form you can skim through
  • relax about forgetting stuff - document stupid amounts of detail and tips in your own FAQ - you're not trying to impress anyone with how much you know, anymore, just reducing your own startup time for any given task.
  • argue with yourself in print - don't stew over decisions in your head but write them down - I've been practicising Diary-driven Development for years.
14 accepted

Here are some things that work for me to maximize productivity, although full disclosure I work full-time:

  • Read "4 Hour Work Week" by Tim Ferriss if you haven't already. Entertaining and not focused at specifically software developers, but I believe directly applies to maximizing your time and productivity regardless of profession. For example only check email once per day at most -- while this may seem unreasonable, minimizing information noise and the associated busywork can be done and once you set expectations with others it becomes a non-issue (and a stress relief).
  • In terms of general software development lifecycle, my approach is as much planning, specification, designing, prototyping, unit testing, and refactoring as possible up front. If done consistently and avoiding temptation to just write the production code before requirements, functional specification, design, and project plan have been fleshed out it pays off in terms of finishing on time and high quality.
  • Buy a Pulse Pen by LiveScribe. While marketed towards college students, I've found this invaluable at my job. It records both what you write and optionally the audio while you are writing, and links the audio to the writing. It has to be seen to really understand the value, but many people in my company have started using them. Great way to capture design diagrams or notes from a meeting and then immediately have them in electronic form (even though you write in ink on paper).
  • If you can record how you are spending your time -- easy if you are contracting on 15 minute granularity for example -- try to occasionally analyze to see where most of your time is being spent. Write down all the items that are busy work that take up time and ask yourself what the worst case would be if you stop doing them or at least marginalized them. Try to get to the point where 80-90% of your time is truly getting your job done and not dealing with busy work and distractions such as email and meetings.
  • Write down your TODO list at the beginning of every day on paper. Cross off what you finish, and at the beginning of the next day write a new list that starts with anything not finished on the previous day's list. Seems simple and trivial, but I find it very helpful.

With regard to your other question about how to not get sucked back into working full-time due to your natural inclination to spend most waking hours thinking or working on the software issues at hand, I can only make suggestions. I too spend much of my 'non-work' time thinking about work issues because I enjoy software development and problem solving, like most people here. I would suggest:

  • Charge an hourly rate. I contracted earlier in my career and found that when you are required to clock each hour that you work, or increments therein, you manage your time well and don't spend too much time beyond the maximum number of hours in your contract. And as an added bonus you typically get paid well this way, and if you do work outside the 4-hours per day you get paid for them (assuming your contract allows for more than 4-hours per day).
  • As someone else suggested, consider working on projects you are not particularly fascinated with. I personally would have a hard time doing this, but if you truly do not want to spend more than a few hours a day working this might be effective.
  • Keep as clean of a separation between your work and personal life as possible. So when working, don't let family or friends disturb you. Don't do anything other than work. Dress up and work in an office -- if you don't have one in your house consider a shared office space if you're in a city that has those (such as Citizen Space in San Francisco). Basically try to use classical conditioning so that work is associated with doing all those things, and does not become coupled with sitting on the couch in sweatpants and hanging out with family with laptop in hand.
  • Find other hobbies that are more interesting to you than the programming assignments you take. Whether video games, books, sports, cooking, or your own programming endeavors, something that naturally occupies your brain cycles when you are not on the clock. Ones you can share with your family might be best for you if that's what's most important.

Hope you find some of this useful, good luck!

5

Not sure this answers your specific question, but I'd look into consulting (vs permanent placement). Consulting usually allows you the freedom and flexibility to set your own hours. So if you can't or don't want to do the 9-5 thing, consulting will most likely give you the option of working weekends/nights and doing the dad thing during the weekdays.

4

Take on smaller, short-term projects. Or break up larger projects into a series of small ones, and try to limit the scope of each deliverable. Solve the hard problems one at a time, rather than building up a lot of parallel, ongoing work.

Some years ago, I was doing part-time software development as a consultant, and I found it very satisfying as long as I kept the task queue short and expectations manageable. By pacing my work (plus a little over-estimation on delivery time) and not worrying too much about the ?big picture? (left that for the full-time people), I kept myself sane and productive. I had more balanced time for hobbies and home life as a result.

4

I tried doing the "part time" thing at interviews a few years ago. It didn't fly. I did eventually find an employer who agreed that my philosophy was good and he was looking for part-time and full time developers.

That has worked out ok, but the biggest challenge you are going to find is getting the work. (unless you have your own company/product(s)/consulting

I am now working full-time and have a few after-hours projects.

Be very diligent about wasted time. Focus on the tasks you need to get done. be ruthless with everything else.

When I was doing part-time work I found that I worked a lot some days and not at all on others. Working "2 hours a day" sounded nice, but didn't work for me. I needed more time than that.

You might be able to start full time, establish yourself and then suggest moving to part-time. If I had to do it over again that is the way I would approach it rather than trying to get hired and go for the part-time thing all at once. It turns people off.

3

There is a great chapter in the book Micro-ISV:From Vision to Reality by Bob Walsh about using Getting Things Done (GTD) with Programming. It's a great intro and very quickly applicable.

The GTD method has five stages: collecting, processing, organizing, reviewing, and doing. Each of these stages is governed by these key insights:

"Control your attention: The more tasks you have on your mind and the more tasks, projects, and obligations that have your attention, the less attention you can bring to what you?re trying to get done right now. A big part of GTD is clearing your mental desktop so you have somewhere to work. Nothing beats having lots of RAM to use. Build a comprehensive process: A leaky process is a bad process. If your commitments are scattered over multiple bits of paper, hundreds of emails in your Microsoft Outlook Inbox, and piles all over your office, that?s not a process. You?re building a process here, and everything that goes in has to go somewhere. Trust your process: Once you?ve got the GTD process working without any memory or commitment leaks, you can start to trust it and devote your full attention to what you?re doing at the moment. Keeping your GTD process trustworthy means keeping it up to date."

Hope that helps.. There is about 10-15 pages in the book on specifically using it for programming.

2

Apart from the great tips above my number one is seclude yourself! I've been working part time on a hobby project for quite a while now and this is what I always try to do.

Decide how much time you want to work on your thing and when you do, make sure you disconnect from everything. Let the mom take the kid, don't bring the phone, unplug the internet, go into a room and close the door around you telling everyone not to disturb you short of a fire or disaster occuring. This way you easily get into the flow and stay in there and a few hours later you get out having actually gotten quite a few things done.

This is universally good I think. Other things I do that might not be your cup of tea are:

Keep things in your head until you implement them, that way you can change them very quickly and you don't spend time on writing detailed things down and going over notes. If something pops up when it's not work time, think about it a little and then push it back into the back of your head, it'll come up again when it's time to work. Do keep a list of what you plan however, but just as keywords, no details. Checking things off a list is a great feeling.

Never mind time to market. It might be important, but it most likely isn't. Do what you believe in and do it well, no one likes a bad and rushed product. The second comer may very well take the lion part of the market if he has the better thing, there are numerous examples out there.

Avoid spending too much time on things only you care about. You're just one guy and have only so much (part) time. Get together with some people and have them test the thing you're building, listen carefully to what they say so you don't build something only you will ever want to use.

2

Excellent answers. I'm a part time dad as well and here is what works for me:

  • Concentrate on one project at at time.
  • Break tasks up into pieces that can be completed in one session.
  • Finish a task before beginning another.
  • Save the fun tasks for when they're needed. When I lose motivation, I need a fun task or I'll end up here on SO.
  • Use a project management application. Having all project material (code, documents, correspondence, and ideas) in a central place is an incredible time saver and keeps me focused. I love Unfuddle.
2

Work half time but do full days if it's possible. Two days of 10 hours is 1/2 time, but you will have two full days to remain immersed in your problem rather than having to give up after a few hours each day.

2

I am actually working part-time on a project now and I think the fact that my time is limited has helped me. When you have too much time on your hands, it's easy to either procrastinate or do unnecessary work. With less time, you focus on what is essential, the core of your product and there is less likelihood of feature-creeping.

Have a notepad with your and write down a short, achievable to-do list for the day. It could be just one single feature. You will find that over the course of a month or two that you were actually quite productive despite the lack of time.

1

Two short and simple tips:-

1) Separate your work from your private life. When you leave the office you leave the work there. So don't make anything from your work situation available from your home. If working from home, have a separate working space that you do not visit "after hours". I think this is easier to do when having a child to fill your non-working time. That should occupy your every minute of your non-working hours now. ;-)

2) Do something that doesn't engage you. Somthing you find dull and boring. Find a job using some techniques you aren't too keen on. Find a project that are outside your interest zone. Try to get into the mind set that it is only a job. IT's amazing what you can get used to in no time at all!

And of course you have to find your own balance here, so the job is boring enough for you to not engage in it during your non-working time, but interesting enough for you to actually do the job once there.

1

Get off StackOverflow ;-) (I figure everything else was already mentioned)

1

Jay, I assume that your job is solution oriented which means that you are paid for the solution you produce.

There are required resources to develop a solution and I think I should also assume the amount of resources are fixed for you, that means you have certain amount of hours you will dedicate to your work. And you would like to go offline from your work outside that time.

With fixed resources, improvements of efficiency and effectiveness can only be improved by the reallocation of them. I think if you research on ways on reallocating resources will help you out.

Here are something for you in my mind:

1) Knowledge management

Solution is developed heavily based on your knowledge. So knowledge management is probably a good starting point. One focus is on storing knowledge. If you have good amount of knowledge in your solution domain, you are readily prepared for that task and you can spend less time thinking about it.

Another focus can be on knowledge sharing. If you know more people who are willing to share knowledge with you, then you can get more of the required knowledge for your project with their help.

2) Solution reuse

It can be done either reusing your own solutions or open source solutions out there. It is related to KM again because you need to organize your information on solutions in order to retrieve them in a timely manner. :-)

3) Delegate tasks that are not in your strength

Focus on your strength and delegate when it can be done just as good by someone else. This way, you can maximize your productivity because you are really focusing on the things that will bring you highest return. Making connection is quite important. :-)

4) Measuring and planning your project

I assume that your work is achievable in the time given to you, so that you need to measure and plan on how you are going to deliver your solution. The big three elements of project management are time, resource and quality. I think if you manage them well, you should have no problem working only in the work hours. If my assumption is invalid, then you need to work on how much you want to get paid. :-)

Hope they are helpful. All the best to your work and life. :-)

1

I am in somewhat the same boat as you are, being a Full time student and a part time developer. Apart for money issues I took the job for work experience.

I found that working part time helped me more than as if I was working full time. Mostly because the tasks given to me sometimes have some kind of time limit therefore not giving me enough time to properly research new solutions(although I tend to get most out of the given timelimit). Therefore I emulate the same tasks at home but trying out new technologies to solve them (usually for a school assignment or a pet project).

I come to this conclusion since I share what I learned to the full time developers (who I personally find quite intelligent) in the company, they seem amased that such technologies existed etc since they didnt have time to research themselves.

A good example is that I have a school assignment (sort of a mini thesis) were I have to develop a program with 30 functionalities using a .NET technology. I took the liberty to develope said assignment in Silverlight , a language I never touched before and now learning quite deal about. Now my employers are finding the knowledge I am aquireing to be quite usefull.

It all boils down to how much you enjoy doing pet projects in your free time.

1

I've found that you don't have to always sit down and code to make progress. Use your available part-time at the keyboard and let your mind wander some while doing your more important task of raising your kids. I find that time away of the problem clears my thoughts for solving the problems. I think you'll find the same to be true.

1

I'm not really working part-time, but work 2 days a week as a Java programmer and 3 days a week as a Smalltalker for a different customer. So I have to deal with a context/paradigm switch each week.

The hardest part is the java part, but it helps to work in iterations with Scrum like sprints.

Every 2 to 3 weeks I sit down with the customer and we plan the tasks for the next release. Most tasks can be done within one or two days, so I try to finish a task within the same week. Does not always work however.

What really helps to pickup my work after a week is the Trac timeline feature. I make several small atomic commits a day to subversion with a decent commit message. When I look back at the timeline from last week, I can easily see what I was doing, thinking and why. I have a look at each change at get into the zone again.

You can easily give this approach it a try by working on a pet project and use a system like google code or github. It might even help getting you a job later on as it easy for an employer to have a look at your code and progress.

0

Not that I have any experience with this subject, but you could consider trying to work from home. You could do as much work as you wanted or felt was necessary, but feel less like you were working. Plus, when you get frustrated you could take time off to spend with your children. And you wouldn't have working hours - anytime you wanted you could decide it was time to switch from work to play, or vice versa.

0

You could always try some kind of top-coders competition to make money... or create something you know a little niche needs and go saas?

0

Follow your team!!, discuss, plan, even code when you need/want!