Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm working on starting my own software development business, but I've noticed that I have major issues getting projects out by their deadlines, and in general getting them out of the "almost-done" stage.

I feel my problem is that I like complex programming too much, and I end up rewriting code to make it cleaner/more efficient/less error prone as a means of putting off more "boring" development. I end up with polished applications at the end, but I spend twice as long on the project as I should have. If I ever want my company to succeed, I need to work on staying focused on what actually needs to be done, so the question is:

What techniques do you use to keep yourself focused and motivated on a project, in your career?

share|improve this question

closed as primarily opinion-based by MichaelT, durron597, Snowman, GlenH7, ratchet freak Jul 17 '15 at 22:04

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

Perhaps only marginally useful comment, but shipping is a feature. – R0MANARMY May 10 '11 at 5:34
Set daily goals and achieve them by end of the day, also if possible learn time management. – Ranger May 10 '11 at 5:51
Spend more time planning. Write clean code that works the first time (it's actually very possible, especially when there is one developer, there is really no excuse for having bug-prone or messy code). Work in smaller iterations. – Tom Dignan Nov 22 '11 at 20:37
up vote 6 down vote accepted

Uh, you said it yourself:

but I spend twice as long as I should have on the project

When all's said and done, that should be enough to keep you moving forward rather than in a refactoring cycle.

Document your system prior to starting. Maintain a feature checklist checking them off as you go. Prior to to starting, estimate tasks and keep yourself to a solid delivery schedule. Obviously sometimes things can go awry (otherwise known as "oh sh%*s"), but you should at least be close to your original estimates.

I find that something on paper (printed or written) helps far more than something on your PC. Keep it visible near your workspace (in the form of a poster if your project is large enough perhaps?). Having something visible will help you stay focused.

Keep your "fun" projects to on your own time and make sure that you keep that separation. Get involved with some OS projects to work on optimizations, etc. There's no timeline (really) on those.

At the end of the day, if a checklist and your own knowledge that if you go off on a tangent you'll sacrifice your own business, I'm not sure what will. There's always a clear distinction between what's work and what one does for fun and nobody can help you stick to a project completion schedule other than yourself.

share|improve this answer

Please just begin, not as a software company, but as an individual contract software engineer and stick with that until you can sharpen your focus on why it's tough for you to get from the five-yard line into the end zone. It's crucial that you find this out before starting something as ambitious (and demanding; and tedious; and and and) as a software company.

share|improve this answer

If you've got your own software development business you need to realise that delivering to your customers is the most important thing. I think you need to shift your focus from yourself to them a little... Rewrite code in subsequent releases and try new things in the following projects. Your customers won't care what's under the hood as long as it does what it's supposed to, looks good and doesn't cost too much.

share|improve this answer

When you start your own business, you'll get to explain to your customers why you failed to deliver on time. Disappointing others may not bother you enough at the moment, but you're going to lose business and struggle to get referals for new customers.

Nobody likes anything boring. Get excited about telling you customers it's done - now please pay me.

share|improve this answer

Use a stopwatch. I find I'm more likely to deal with the business in hand if I am running a stopwatch against my time.

share|improve this answer

It's not just focus and motivation, it's common for people to underestimate how long software projects will take, and as a result deadlines to be missed. The last 10% never takes 10% of the work, it's often timeconsuming and you should include this in your original plan.

If you are having trouble staying focussed, you could try publicising your deadlines, e.g. put on the web page when features will be ready, or telling your friends/partner what you are doing and get them to ask when the deadline is there.

Finally, maybe you're a perfectionist, you should ship when things are working and customers can successfully use. It's your call what is "better", "good enough but on time", or "perfect but late".

share|improve this answer

Do the boring stuff first.

Help files, release management and so on is probably more appreciated by your paying customers than nice internals.

share|improve this answer

re: "putting off more "boring" development" - programmers like to solve problems, no re-invent the wheel. The parts of the project that require no creativity for you sound like the hardest parts to get done. I have the same problem. Something that helps me is scheduling, to some degree, exactly when I will do each boring thing. So rather than, "some day I need to do x, y, and z..." if I tell myself, "today I will do x and I'll stick to it until I finish it, next week I'll tackle y, and the week after I'll do z". (Then stick to it, short of real honest emergencies)

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.