Team Agile ProcessTM

The values and principles of agile software development have been at the core of CCIS' approach to designing and developing IT solutions since the company was founded. CCIS has introduced the Team Agile Process as its own methodology for agile software development.

This process blends elements of leading adaptive and plan-driven approaches to solutions development, ranging from Extreme Programming, Scrum, and MSF for Agile DevelopmentTM to the Unified Process, with the individual and collective experience of the company's multi-disciplinary team to provide a process framework and practices to deliver high-quality, user-focused IT solutions on schedule and on budget.

Team Model

One of the key features of the Team Agile Process is its team model, shown in the following figure:

Team Agile Process Team Model

Under this team model, the CCIS project team works under three key leaders:

  • The Client Partner is the liaison between the end-user community and the project. The Client Partner is responsible for gathering and documenting the requirements for the solution. He or she works closely with the end-users and other stakeholders throughout the life of the project. Through this close collaboration with the end-user community, the Client Partner can effectively represent their needs and priorities to the project team. The Client Partner also works closely with the client's program manager and other stakeholders to establish the business case or operational need for the solution and evangelize the solution to a variety of audiences, ranging from executive-level sponsors to the end-user community, to ensure that the solution achieves its business or operational goals. During the Transition and Production phases of the project, the Client Partner manages the deployment, day-to-day operations, and support of the solution in the production environment through an Operations Manager and a team of Field Engineers.
  • The Project Manager focuses on planning, monitoring, and controlling the project. During the early phases of the project, the Project Manager works with the technical team to estimate the time, effort, and cost of the project, determine the resource requirements, identify risks and risk management strategies, and develop a project schedule including milestones, deliverables, and dependencies. Once the project is fully underway, the Project Manager's most important responsibility is to monitor each team member's progress on a daily basis and implement corrective strategies as soon as issues are identified. The Project Manager is also responsible for accurately reporting the status of the project to the client and other stakeholders and for maintaining and updating the project schedule and budget throughout the life of the project. The development, testing, configuration management, and user experience teams all report to the Project Manager through a matrix organizational structure.
  • The Solutions Architect is responsible for establishing an architecture and high-level design for the solution that most effectively satisfies the goals and requirements of the project. The architecture and high-level design is expressed both through documentation artifacts such as models, patterns, and guidelines and an end-to-end working architectural foundation for the solution. As one of the company's most senior developers, the Solutions Architect also works hands-on to incorporate new technologies into the solution and to resolve other areas of technical risk. Finally, the Solutions Architect consults with and advises the Client Partner, Project Manager, and the client on technical issues throughout the project. Depending on the size and complexity of the project, the Solutions Architect may be assisted by other architects specializing in various technical areas, such as database management, geospatial information systems, or security and information assurance.

Mindsets

The following mindsets are at the core of the Team Agile Process:

  • Be a Partner: Our value to our clients comes from both strategic thought and tactical execution. Strategic thought involves truly understanding the client's organization, the environment in which they work, the challenges that they face, and the needs that they have and then proactively anticipating and addressing their needs. Tactical execution focuses on delivering quality products and solutions in a timely and cost-effective manner. By consistently providing both strategic thought and tactical execution, CCIS strives to be a valued partner to our clients and establish stable, long-term business relationships that are beneficial to our clients, our employees, and the company.
  • Achieve Something Every Day: Each team member should have an achievable goal each and every working day. They should produce a tangible product, be it a new feature, some bug fixes, or part of a design document. Distractions and interruptions, including meetings, are inevitable but they cannot be allowed to consume the work day.
  • Design for Agility: In most of the projects that CCIS undertakes for its clients, agility is one of the most important design goals. Object-oriented design and programming practices, code reuse, refactoring, patterns, and other techniques of modern software development make it easier to add new features to a solution or extend existing features. Investing time and effort to solve problems in a general, reusable way can have substantial benefits when the up-front cost in time and effort is properly weighed against its benefits.
  • "Speed is Life. Friction Kills.": While teamwork is important, it also has a cost in time and effort spent communicating and coordinating among members of the team. Each point of communication and coordination represents a friction point that can slow the project down and introduce the risk of misunderstandings. Our project teams strive to minimize those friction points and assign responsibility for each feature or other element of a solution to a single individual as much as possible, coordinating and communicating just enough to deliver a consistent, quality solution.
  • "Do the Right Thing": We are not merely programmers. We are software craftsmen. We build solutions that we can be proud of and that we would want to use ourselves. We recognize that our end-users, even for enterprise solutions, often have a choice as to whether they will use our solution or choose another solution. Attention to detail is one of the things that distinguishes a great product or solution from a mediocre one. We are in the business of creating great products and solutions for our clients and end-users.
  • Make Smart Reuse/Buy/Build Decisions: Developing new code from scratch is time-consuming, can require unpredictable levels of time and effort, and always carries technical and quality risk. When addressing a requirement, we consider re-using existing code or components or buying an off-the-shelf tool or component that satisfies the requirement. Only if these options cannot satisfy the requirements and constraints of the project should new code be written. Even if new code is written, existing code should be re-used (by extension or refactoring, not by copying-and-pasting) as much as practical.