Building the Development Team
Sometimes a team is one person. Even in this case, all of the jobs described below need to get done. Other times a team is a lot of people. The more people you have on a project the more time and energy you need to spend on communications and management. One way of keeping the communications under control on a larger project is to break it up into smaller projects, which I usually refer to as modules.
There are two levels of architecture, system architecture and project architecture.
System architects create a conceptual model of the overall structure of a software system. This model is the top-down view of an entire project which may have multiple sub projects. This model does not include any implementation details.
Project architects create the overall conceptual model of a single project or sub project. At this level some implementation details, including the development environment are usually included.
The Project Manager is in charge of the day-today operations of the project staff. On small projects the job usually falls to the most senior developer in addition to other duties.
The Project Manager’s major job is managing communications among the stake holders. Without the Project Manager keeping communications active, there is a tendency for developers and end users to communicate mostly within their own groups. Communications is also the responsibility of the person(s) gathering requirements and the designers, so the Project Manager needs to coordinate with them to keep the communications consistent and efficient. In this context, efficient means reducing redundancy and not holding unnecessary meetings.
The Project Manager is also usually responsible for the schedule and the budget. Managing the schedule includes assigning tasks to the person(s) best able to complete them. Managing the budget includes suggesting or approving project expenses, such as development tools, external hosting, and supplies. The Project Manager may even be able to suggest or approve training.
A savvy manager involves the development team in as many decisions as possible, including who gets training and who gets which task.
In larger organizations, Project Managers usually do not have hiring authority, but they may be on the hiring committee.
Requirements Analyst is an interesting position. It requires someone(s) who has enough technical background to know what is feasible and/or practical, who also has the people skills to take the end users through the process of defining and refining their needs. It is also challenging because normally the requirements are constantly changing, and this stresses the developers as well as the budget.
User Interface Designer and Graphic Designer
The UI Designer is responsible for creating a user interface that is easy to use and attractive. The Graphic Designer chooses colors and images, designs logos, and does other visual tasks. Sometimes these two jobs are given to two different people. Both of these jobs require a deep understanding of the project requirements and the target user populations.
The Database Designer needs to work closely with the UI Designer, since both are guided by the same requirements. The Database Designer is responsible for documenting the design and the decisions that went into creating it.
The Database Designer also needs to work closely with the developers. A database design can work with or against the programmers. A poor design can slow development and increase the chance of bugs. A good (appropriate) database design can simplify and speed development, reducing costs and bugs.
Large databases should be designed to be modular. Each area of functionality should stand alone so that it can be designed, built, and tested quickly and effectively.
The Database Developer creates the scripts that build the database and import data from older databases. This is often the same person as the Database Designer.
The Database Designer has the primary responsibility for documenting the database, but the Database Developer is the one who implements documentation for database objects within the database.
Good documentation and communications is critical at every step of database design and construction. Deliver early and often. Deliver database modules one at a time, so that developers can get to work before the entire database is finished. Before delivering to the developers, be sure to get sign-off from the designers and from the Requirements Analysts, if they are still involved in the project.
Database Administrator (DBA)
The Database Administrator installs and maintains the database servers. This includes setting up authentication and authorization for developers and their applications. The DBA sometimes helps with database code and SSIS packages. The DBA is often the only one with direct access to the production databases. Database problems can be difficult for application developers to troubleshoot. So developers, stay on good terms with your DBA(s).
The Database Developer or Application Developer supplies the scripts that the DBA uses to build and modify the databases.
Front End Developer
The Front End Developer and the Back End Developer should be in constant communication, but they can mostly work independently.
Back End Developer
The Back End Developer writes the bulk of the code. It runs on the server and it ties the User Interface to the database. Succeeding at this role requires a lot more than coding, it requires being able to communicate successfully both with the User Interface (Front End) Developers and the Database folk.
At every stage the Requirements rule. If the user interface properly reflects the business needs of the organization, and the database properly reflects the business needs, the back end requirements are already defined. This sounds pretty straight forward, but not so fast! Remember, this is the part of the project with the most code, a range of possible solutions, and the greatest chance for bugs.
Developing working code in a reasonable time requires careful planning and accepting uniform standards across all of the developers in the project. Coders like to be creative. Creativity is the fun part of coding. Doing the same thing over and over can get to be really boring. Unfortunately, boring is good on a programming project, so coders need a lot of encouragement and love so they feel the sacrifices they are making are worthwhile.
The Deployment Developer sets up the deployment process and might be tasked with tracking deployments during development. This task is usually a part time job for one of the team.
Documentation should begin as soon as the project is a gleam in someone’s eye. The entire research, requirements gathering, and evaluation process should be recorded, at least briefly.
Professional Requirements Analysts and Designers can usually do their own documentation, but it is up to the Project Manager to set documentation goals and standards, and manage the process.
The Documentation Specialist often manages document storage and document version control.
The Documentation Specialist usually develops the help screens and training material. On small teams this work can be given to the best writers on the design/development team, but the reality is, most developers do not want to do documentation.
Every time a module or other self-contained section of an application is functional, functional testing starts. I often use end users for testing, but professional testers usually find more problems, so they can be fixed early in the process. If you don’t have testers on staff, try to get other developers or the publication people to try it before you show it to the end users.
Larger organizations have training departments. If you have trainers available, they will probably work with the Documentation Specialist.
If you are creating an internal application, some of the users will already know the application from helping to design it, and from testing it. It is reasonable to let these “Super Users” train their coworkers.
My (Conrad Muller's) work on this page is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License.