I'm thinking LittleBugz will support multiple modes of operation. It could have a wizard interface to ask the user questions about how they are going to use LittleBugz, and then it will select a mode of operation based on that.
Modes will cover different combinations of features:
Single user versus multi user
user authentication versus no auth
user roles versus no user roles
XML file versus database store
Here's how I expect them to be used:
Single User, no auth, no roles, XML file store:
An organized todo list for an hobbyist working on personal projects
Multi user, authenticated, no roles, XML file store:
A small team (3-5) of hobbyists, probably close friends, working on a project together. They already have source control, probably something like SVN, and the XML store file will be in that source control. Everyone has full control over the bug list. Authentication is merely for accounting, not security.
Multi user, authenticated, roles, database store:
A medium sized team (10 - 20) of hobbyist developers (probably OSS), with a designated project lead.
At this point, I really don't have much interest in being useful for anything larger than a small team of hobbyists who are also friends and thusly trust each other. There are plenty of bug tracking solutions for medium sized OSS teams (in particular, Bugzilla comes to mind). The scope of this project is specifically to be a simple bug tracking system. A medium sized team will need more bug tracking features than I intend to include in this project. For that reason, I doubt few medium sized teams will use LittleBugz, even if I provide the User authentication, roles, and database support that they would need.
Up to this point, I had been building LittleBugz on top of SQL Server 2005. I think that's too much of an obfuscation now. I don't expect beginners to be able to handle setting up SQL Server 2005 Express Edition with the proper security settings. As far as databases go, it's not that difficult to do, but as far as beginners go, it's really a chore. For a single-man team, it offers nothing, and for a small team it doesn't offer anything that could not be achieved in other ways. By elliminating support for a database store, I will simplify the project significantly.
Project and Bug definitions will be stored in an XML file. The developers will be free to figure out their own strategy for sharing that XML file. The suggested method will be to add the XML file to source control and to use file merging to stay up to date on bugs created by individual developers. Bugs and projects will be ID'd with GUIDs to ensure there are no collisions between new bugs during file merges.
Roles have no use to a single-man team. I don't think a small team of friends are going to worry about project roles. Of all the small teams I've been involved in, control over work items hasn't been an issue. The only time a concept of "project role" came in to play was during decisions involving project features and project scope. That's merely a political distinction at that point, and up to being handled by the team itself.
Authentication has no use to a single-man team. Because of the trust level between a small team, authorization has no use in a smal team. Authentication, however, is desirable, to keep a record of changes. The project can then assume that authorization is handled de facto by the source control system. If a user has access to the source code, why not give them access to the bug list, too? At this point in time, LittleBugz has full authentication with hashed passwords. Passwords are going to be removed, they just aren't necessary.
Okay, there we go. This will greatly simplify the use of the project. I can elliminate any need for a "use mode" wizard now. When the application starts for the first time, the user will enter their name. This name will then be automatically added to every bug that that user creates. Since the multi-user aspect is essentially handled by external tools, their really is no need to even track users at all -- it just becomes an extra field on the Bug itself.
Should have done this from the start.