I am building a software system for my masters project and was looking for advice on particular methodologies that would suit a "one man team"...
- Anybody can ask a question
- Anybody can answer
- The best answers are voted up and rise to the top
migrated from stackoverflow.com Jun 12 '11 at 22:17
This question came from our site for professional and enthusiast programmers.
closed as not constructive by Mark Trapp Oct 2 '11 at 22:01
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.
I make my living as a one-man "software gun for hire" who works mostly from home, so I'm dying to hear what other people have to say about this.
Here are a few things I've found important:
My other techniques have evolved over the years, and I tweak them depending on the project and the client. People pay me for working code, not fooling around with process, so I try to keep the process lightweight, and out of my clients' faces. But I find some Agile techniques work really well for me:
The other gotcha of working on your own is you don't have anybody to tell you what to do or when, or if you're getting enough done, or when to quit work because you've done enough - so you have to do that for yourself. I personally prefer Scrum because I can keep track of how I'm doing vis-a-vis my sprint goals. For Kanban projects, I can just track how much time I'm putting in, but I don't like that as well as something more goal-based.
Some friends of mine swear by Pomodoro as a way to keep them focused on tasks and track personal efficiency, and I'm thinking of trying it out.
I also have a formal process for releasing code to my clients to make sure what they're getting is "right", but that's probably outside the scope of what you're asking about.
Use SVN above else, version everything. For tracking, notebook will do for simpler projects, if needed you have many free task / bug tracking applications (Redmine is cool). Agile / XP / Continuous Integration / others would be a little overkill in my opinion.
Aside from the Personal Software Process, I haven't found that much about formal process models designed for use by a single developer. The PSP is pretty heavy on documentation and paperwork (in its raw form, anyway), without much to be said for particular techniques on performing work (instead, the PSP focuses on data collection to find areas for improvement), but it is a starting point for developing a personal process that you can use on small-to-medium projects.
I think the best course of action would be to simply follow some appropriately chosen (based on your needs and the project) widely accepted best practices from a number of process models. Take a look at methods for tracking work done/work remaining, managing requirements, version control, testing (particularly unit and acceptance testing), continuous integration, coding standards, You Ain't Gonna Need It, and so on. If you haven't, I suggest reading Code Complete and The Pragmatic Programmer and practicing their tips.
The biggest thing about working individually is that, aside from any restrictions placed on you by outside forces, it's all up to you. You don't need to accommodate anyone else working along side you, so it's easier to pick techniques that enable you to work in the most efficient manner possible. Over the years, you've probably figured out how you work best, so that would be a good starting point. Then apply known "best practices" on top of that to enhance your abilities and techniques.
The guy is asking about specific methodologies and people is answering "use X/Y software". Is NOT a matter of tools, actually there are many methodologies and it seems there is no validation report for them yet: Agile, Iterative, Spiral, Waterfall, XP, V-Model, TDD.