Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

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 am building a software system for my masters project and was looking for advice on particular methodologies that would suit a "one man team"...

share|improve this question

migrated from 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 am glad you asked this question, I am in such a situation at this moment. I have taken over for a two man team with no process and instilled source control, continuous integration, test driven development, and various others. I myself wonder about what i can do to improve efficiency and how to be best prepared when eventually I am allowed to hire people under me. – maple_shaft Jun 13 '11 at 0:09

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:

  • As Denis says, source control is vital - but SVN isn't the only option. I mostly use Perforce, and git is a good alternative. I like a "mainline" development model; that lets me do experiments in code branches, merge them into the mainline when they work, and junk them if they don't.
  • I use a notebook for notes and a program for tracking tasks. Currently I use Redmine for the latter; before that, I used Fogbugz. I also like Redmine because it has a really good built-in wiki, which I can use for persistent notes and links to important sites.
  • It's also vital to track what I'm getting done, and set myself some kind of reasonable limits so I get enough done without burning out - see below.

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:

  • One of my current clients tends to drop big features on me to implement, and doesn't bug me until they're done. So I find working on those in Scrum sprints is great. My guess is that may work for a master's project unless your research adviser is a control freak.
  • My other current client tends to have more emergencies of a "stop working on this and fix that" type. I tried doing that with Scrum and gave up after one sprint. So I'm doing that using Kanban, and it works a lot better.

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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer

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.

share|improve this answer
The thing is that most of the research has been put toward working with teams. To the best of my knowledge, only the PSP has been designed for use by a single engineer. And even within that, the PSP is focused on specifying how to track data to identify areas for improvement and provides only a few high level tasks that might help improve software quality, with no specifics on how to carry out those tasks. – Thomas Owens Jun 13 '11 at 18:53

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