3

Single-programmer project. I'm constantly having to rewrite my own code on an on-going project. It's not buggy, but every time I expand my program (which previously-planned features), I keep having to expand previous classes, which cause me to re-write code that worked fine before.

I have unit-tests, so bugs aren't introduced but it still seems counter-productive and seems to be wasting time. I'm constantly adding features that weren't originally needed, but become needed as project grows in complexity.

Should I continue with this iterative development? It seems with every iteration I keep having to re-write more and more of old code as new features are added.

Is there a better way to manage my project? I know (approximately) what I want my program to do, and how to do it.
Also, what tools / development-philosophies should I use to manage one-man projects? I have a running to-do list (and that's all) has been doing a fine job so far. Maybe some kind of abstract class-outlining program?

AWF4vk
  • 143

3 Answers3

2

Since you know what you want your project to do (for the most part), and there's no constant interaction with a "customer", using an iterative approach may introduce unnecessary overhead. I feel that iterative approaches are best suited to small teams that can communicate frequently with a customer that may change requirements on the fly. Seems like you might benefit from planning everything out more in advance to enhance generalization and reduce repetition. Maybe do a search for some plan based approaches? Of course, the strategies of generating formal documentation and all that should not be followed (very informal should suffice...consider Doxygen if possible).

If you want to model everything (which seems like a good idea given your issues), you could use something formal like UML diagrams. That does seem a little excessive for a one-man project but it will help you keep track of everything at a high level of abstraction.

Casey Patton
  • 5,241
1

Should I continue with this iterative development?

Yes

Most likely you are rewriting/expanding previously written code because you have to support new features which you couldn't anticipate before. Taking the time (especially when you are allowed to) to do this will greatly benefit you in the long run.

However, when you find yourself constantly having to implement new unexpected behavior, this might be an indication you should take some more time nailing down your features. Deciding on the correct abstractions is mainly done by assessing required features.

Being a programmer is more than just 'writing code', it is also finding the right balance in the design of your system between 'getting things done', and 'support for extensibility'.

0

it still seems counter-productive and seems to be wasting time. I'm constantly adding features that weren't originally needed, but become needed as project grows in complexity.

So?

How else can software grow?

Are you expecting that you could somehow be a genius and foresee the future?

Should I continue with this iterative development?

What choice is there? Other than perfect foresight?

Is there a better way to manage my project?

Yes. Perfect foresight.

I have a running to-do list (and that's all) has been doing a fine job so far. Maybe some kind of abstract class-outlining program?

That's what we call "design". It's quite difficult and nothing makes it easier.

It seems with every iteration I keep having to re-write more and more of old code as new features are added.

Welcome to software development.

S.Lott
  • 45,522
  • 6
  • 93
  • 155