Although I won’t be using a formal, rigid development process, there are several clearly defined stages, but within each stage, the order of execution will be flexible. The following is subject to change. User feedback will take place at all stages, and there will be iterative changes throughout.
Requirement gathering
This stage is about defining what the application needs to do. This will be based on my own thoughts, existing solutions and user input. User input is crucial to the success of any project, as if you don’t create something which is needed by real users, it’s worthless, no matter how well it’s implemented. Despite this, it’s very important to avoid design by committee, which is where you add everything anyone wants, which results in a large, bloated product that is of use to no one.
I will then build up a basic feature list, divided by section. This will be a very high level overview, and will be expanded on as I begin each section. I just need to know enough at this point to figure out how everything will fit together when making the system architecture.
UI Design
This part will involve coming up with a design for all the common UI elements, such as header, navigation and footer. The exact design for the main content will vary with each section/page, and to a lesser extent, so will any secondary content, such as a sidebar, although they will be influenced by the overall style. This part could be done at any time, although it’s good to have it fairly early on, as it will be influence the design of each page.
This process will start with some hand drawn wireframes/computer generated wireframes, which will then lead to a more polished set of design elements. User feedback
Architecture overview
This stage involves coming up with a very high level overview of the implementation. It needs to think about how the data will be stored in the database, how these tables link together. What models, views and controllers I will need as well as additional libraries and helpers. At this stage, it will focus more on what the various classes need to do, instead of how they do it, which will happen in the next stage.
I will also plan some of the key use cases at this stage, which will be a starting point for the implementation.
Implementation
This is where the actual coding takes place. For each area of functionality, I will take the relevant use cases defined earlier and expand on them. I will then create the relevant database schema to accommodate this functionality
So by this point, I have an idea of the functionality required for the given section, and some of the key use cases. For each use case, I need to simultaneously tweak the use case and the UI, as they are both dependant on one another. The use case will specify what should happen, and the UI will be what dictates how it actually happens. Once this has been decided I can move onto the database schema. I already have a basic idea of how all the core object will interact with each other, but need to start thinking about all the attributes. I can then implement the required methods in the controllers, libraries, models etc and make the corresponding views.
Testing
This will cover both functional testing and user testing. User testing is the key point I want to focus on at this stage. This will involve getting real users to use the system, provide feedback on how to improve it, report any bugs etc. Although I will need to be confident most of the bugs have been resolved before launching the user testing, it is much more efficient to allow a large set of users to identify bugs in the system from real word usage then for me to find bugs in my own code. The user feedback process will involve some structured questions but will mostly be free form, so the users can use it as they want, and give back any information they want. All user feedback will then feed into the next development cycle.