Methodology

Following are the methodologies and processes used at Cipher's software development center:


Agile Development

Agile Development is a software development model that includes a variety of development methodologies that can be followed to create adaptable software i.e. software that can easily meet changing customer requirements.

In agile development the entire project is broken down into a number of iterations. For each iteration, that typically lasts for not more than three weeks, the complete development process (i.e. planning, designing, coding and testing) is followed thereby minimizing the risk. On completion of each iteration, the software is released to the customer. The feedback received from the customer is then incorporated in the software.

Agile software development and Ruby on Rails application development methods are ideally suited in cases where the requirements are constantly changing and where the project size is not large. Agile methods are best suited for projects that have small teams.

Principles
The principles of Agile Development as per the Agile Manifesto are as follows:
  1. Customer satisfaction through continuous delivery of valuable software.
  2. Delivery of software in short iterations ranging upto six weeks.
  3. Daily communication and collaboration between all concerned project members.
  4. Providing for continuous changes in requirements.
  5. Creation of a proper work environment and delegating work to specific project members.
  6. Face to face communication is preferred over documentation.
  7. A good design and attention to detail ensures the creation of adaptable or agile software.
  8. Simplicity in design and coding should be maintained.
  9. Self-organizing project teams work best.
  10. Regular meetings to identify means to improve productivity.
Agile Methods
A wide variety of agile software development methods are followed. Some of them are as follows :
  1. Extreme Programming
  2. Agile Modeling
  3. Scrum
  4. Adaptive Software Development
  5. Crystal Clear
  6. Agile Unified Process

Rational Unified Process

Rational Unified Process (RUP) is a software product that defines a set of development methodologies that, if followed ensures the creation of quality products. The RUP product provides help on every aspect of the software development activity and process, in the form of guidelines, descriptions, HTML and documentation templates. RUP can be adapted and customized according to the requirements and scope of the project.

RUP is based on UML (Unified Modeling language) – a modeling language that enables the creation of models/views to provide better understanding of the project being developed.

Phases
RUP defines four phases for a development cycle. These include the following: Inception Phase : In the inception phase stage a project feasibility study is conducted. The business case and project plan are created.
Elaboration Phase : The elaboration phase involves the designing of the system architecture. The development plan for the entire project is also drawn up in the elaboration phase.
Construction Phase : The actual coding of the various modules of the application is done in the construction phase. At the end of the phase the product is ready for release.
Transition Phase : In the transition phase, the software application is handed over to the end user for testing.
Principles
The following principles form the basis of the Rational Unified Process methodology: Process Adaptation : The RUP process must be adapted as per the needs of the project.
Balance stakeholder needs: According to this principle there should exist a balance between the business goals and stakeholder needs. This involves identifying the business processes and linking them to software capabilities, prioritization of the requirements, creating business use cases etc.
Collaboration across teams : This principle states that there should be proper collaboration and communication between team members in order to improve productivity and development.
Demonstrate value iteratively : The delivery of the project happens in multiple iterations. In order to reduce risk for each iteration proper analysis and prioritization is required. Feedback from stakeholders after every iteration can help in improving the development of the project.
Elevate the level of abstraction : This principle states that the level of complexity should be reduced in order to improve productivity. According to this principle reusable components should be used while coding.
Focus on quality : Quality checks should be performed on a continuous basis thereby leading to higher quality of products.

Model View Controller

Model View Controller or MVC is a programming pattern that allows for the separation of data and user interface (presentation) aspects of an application. MVC web application development helps in the structuring of the code in order to ensure that the changes made in the way the data is handled and organized does not effect the user interface and vice versa.
Components
The architecture is made up of three components. These include the following:
Model

The Model component contains the data and the business logic of the application. In MVC, the Model is independent of the View and Controller. In order to be independent, the Model cannot directly refer to the View and Controller.

Models can be of the following types: Active: In an Active Model changes made in the model are immediately notified to the Controller and View.
Passive: In a Passive Model changes are not notified to the Controller or View. In case the Controller processes a request that changes the Model and affects the View, the Controller sends a notification of the same to the View. The View can then obtain the updated data from the Model.
View
This is user interface of the application. It renders the information obtained from data model. The View can access the Model only to read the data, it cannot make any changes to the Model.
Controller
The Controller is the component that receives and processes inputs sent by a user. Based on the type of requests sent, the Controller will send requests to the Model and View. The Controller can change the state of the Model.
Benefits of MVC
The MVC Architecture offers the following benefits:
  1. The data and presentation are separate.
  2. Program codes can be re-used.
  3. Multiple versions of the User Interface can be created.
  4. Developers can focus on a specific area (i.e. user interface / business logic) without having to worry about the other.

Project Management

The project management methodology followed at Cipher ensures that the goals and objectives of the solution are fully met. Transparent communication, strong planning and clear understanding of the requirements help in making a project a success.

At Cipher we follow an iterative method to project management that allows for client feedback during every stage of the project.

The key stages of our implementation process include:
Requirement Analysis :
In the requirement analysis phase we conduct an in-depth study and a gap analysis of the client’s requirements. Based on the requirements gathered, we create the requirements specifications document (RSD) that records in detail every feature and functionality to be included in the solution. The RSD is sent to the client for verification and approval.
Architecture & Design:
After the RSD has been approved, the solution architecture i.e. the database and system design, GUI prototype. The architecture and design are based on the requirements contained in the functional specification document.
Implementation & Integration:
Once the architecture and design are in place, the process of coding the solution begins. Regular review of the code is carried out to verify that the code conforms to the standards. The individual code modules written by the developers are integrated to form a whole.
Deployment & Testing:
The solution is deployed on a testing server wherein our team of testers run various tests such as unit testing, functional testing, compatibility testing, regression testing etc. Bugs/errors identified in the testing process are duly recorded. The developers work to remove the bugs/errors identified. The testing cycle is repeated till there are no bugs/errors. After a successful verification of the bugs/errors a final version of the software is released to the client.

At every stage of the project management our team of QA professionals conducts audits and reviews to ensure that the activities and processes followed are in compliance with the defined standards and conventions.


Coding Standards

At Cipher, we have set of coding standards and practices as well as software development methodologies in place. The standards define the conventions, techniques and styles to be followed during every aspect of project development from design to coding. All projects that we undertake follow the set guidelines. Our team of Quality Assurance professionals monitors and periodically reviews the entire development process to prevent deviations and ensure compliance.