Our Methodologies / How do we work
We make use of proven methodologies and processes focused on meeting our clients needs.
Our experience proved that adhering to the AGILE processes frameworks help us to achieve a successful solution in our projects, and to be more efficient delivering the product expected by our clients in time.
By appliying Agile methologies, we focus on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. Providing rapid and flexible response to changes.
We believe in the following (stated by the Agile manifesto), we value:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
That is, while there is value in the items on the right, we value the items on the left more.
However we are flexible, and there are no rules written in stone for us, and we also believe that each project and each client is unique. And we are allways open to new methodologies and processes to satistify the specific needs of our clients.
We promote the development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.
One aspect that we believe is a key part in our projects is the feedback and the constant interaction between us and the client, to report the current status of the project and to receive feedback from the client and to foresee and plan the changes if needed.
Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames (timeboxes) that typically last from one to four weeks. Each iteration involves a team working through a full software development cycle, including planning, requirements analysis, design, coding, unit testing, and acceptance testing when a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. Stakeholders produce documentation as required. An iteration might not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration. Multiple iterations might be required to release a product or new features.
Team composition in an agile project is usually cross-functional and self-organizing, without consideration for any existing corporate hierarchy or the corporate roles of team members. Team members normally take responsibility for tasks that deliver the functionality an iteration requires. They decide individually how to meet an iteration's requirements.
Agile methods emphasize face-to-face communication over written documents when the team is all in the same location. Most agile teams work in a single open office, which facilitates such communication. Team size is typically small (5-9 people) to simplify team communication and team collaboration. Larger development efforts can be delivered by multiple teams working toward a common goal or on different parts of an effort. This might require a coordination of priorities across teams. When a team works in different locations, they maintain daily contact through videoconferencing, voice, e-mail, etc.
No matter what development disciplines are required, each agile team will contain a customer representative. This person is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration problem-domain questions. At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (ROI) and ensuring alignment with customer needs and company goals.
Most agile implementations use a routine and formal daily face-to-face communication among team members. This specifically includes the customer representative and any interested stakeholders as observers. In a brief session, team members report to each other what they did the previous day, what they intend to do today, and what their roadblocks are. This face-to-face communication exposes problems as they arise.
Agile development emphasizes working software as the primary measure of progress. This, combined with the preference for face-to-face communication, produces less written documentation than other methods. The agile method encourages stakeholders to prioritize "wants" with other iteration outcomes, based exclusively on business value perceived at the beginning of the iteration (also known as value-driven).
Specific tools and techniques, such as continuous integration, automated or xUnit test, pair programming, test-driven development, design patterns, domain-driven design, code refactoring and other techniques are often used to improve quality and enhance project agility.
The main phases of a project are Planning, Project Incremental Development, Incremental Deployment and Project Closing. The Incremental Development stage is organized into consecutive Sprints or iterations where different tasks are carried out to implement a set of requirements.
Traditional Software Development
Some projects (and some clients) doesn't fit with the Agile methodologies. In some cases, we choose different methodologies, like the traditional waterfall model of software design.
This methodology contains four distinct phases:
- Business requirements. The first step in the traditional software development process is to identify business requirements as well as the scope of the release. It encompasses those tasks that go into determining the needs or conditions to meet for a new or altered product, taking account of the possibly conflicting requirements of the various stakeholders, such as beneficiaries or users.
- Architecture and design. The goal of the architecture and design phase is to try to identify an architecture that has a good chance of working. The architecture is often defined using free-form diagrams which explore the technical infrastructure, and the major business entities and their relationships. The design is derived in a modeling session, in which issues are explored, until the team is satisfied that they understand what needs to be delivered.
- Development. The development phase produces code in an environment that is specific to the culture of the development team and the skills of the individuals. In large projects the tasks are structured and distributed to teams. In small projects, or within smaller teams, the tasks are distributed according to team culture and skills. Development continues until goals or milestones are reached.
- Testing, delivery, and feedback. Testing is ongoing at the local level and becomes more structured on larger scales and as the project approaches delivery. In large projects, the testing is formalized. The customer is engaged in testing and feedback cycles when the development teams are relatively convinced that the software meets the requirements.
One of the similarities of the agile and traditional methods is to conduct the testing of the software as it is being developed. The unit testing is performed from the developer’s perspective and the acceptance testing is conducted from the customer’s perspective. The key difference is that in the agile method, the customer and developers are in close communication, whereas in the traditional method, the customer is initially represented by the requirement and design documents.
Our way for Succesful Development Software
Despite of the facts of the different methodologies, most of the times we don't follow strictly one paradigm or the other. We believe in mixing different approaches to fullfil the requirements, provide quality products, and deliver on time. That's actually our methodology: focus on our clients needs.