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:
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.