For software provider a well-defined software development process is key to success. The solutions need to be both, easy to adapt and to accommodate changing user requirements within a short time period as well as easy to integrate into customer environment, reliable according to SLAs, easy to maintain and to handover to the client.
Our team utilizes a combination of agile and classic methodologies providing adequate control of the delivery and quality assurance processes. In the management layer it is carried out traditionally through PRINCE2 processes, such as strategic project management or stage controlling. In addition, we exploit PRINCE2 advantages including the role of Project Manager (dedicated on the side of the client and supplier), Project Board composed of the Executive, Senior User and Senior Supplier. Regular check-ups of the project are conducted, featuring the Project Board, where delivered programming products are presented. In the process of team management, agile methodologies such as SCRUM are being used.
In Scrum, like other Agile product development methodologies, product development consists of recurring iterations of the complete software development life cycle, meaning instead of one huge life cycle, we define and/or refine our requirements and implement them in one or two-weeks-long iterations, also known as Sprints. Sprint duration depends on project and work organization at specified teams.
We follow the release-based planning, where every release cycle starts with release planning – a one-day meeting, where gathered are all team members along with the clients’ representatives, with the aim of determining the goal of the release, producing the high-level plan divided by sprints, evaluating dependencies and relations among produced software components and pinning down points critical to the project.
In the above-mentioned approach, the role of Product Owner, who represents the client and takes part in every day's team routine is needed. An important aspect of our development methodology is to ensure quality. That’s why we utilize the Test Driven Development. We start each sprint by determining the usage cases, then preparing the test scenarios, after which we write testing scripts. As a result, we begin to create a software, when given usage case has been followed up by unit, smoke or integration tests, and the functional range of the software doesn’t exceed over the tests’ range. We consider a functionality as delivered, when it has passed the black-box tests, has been regressively received by the client and then deployed in production using the smoke tests. As a code repository, we take advantage of dispersed GitLab or Bitbucket environment. During such complicated projects we utilize the process of continuous software development and integration, which provides quick feedback about how respective components/modules cooperate in the aim of delivering the final product. Every independent service has a documented API. In the software development process, we utilize the SOLID rule.
We pay attention to every functionality (each one has a defined acceptance criteria, both business and technical ones) and the quality of produced software, but also to non-functional parameters, consisting of security, accessibility, capacity, consistency. Likewise, we attach a complete set of documentation to our software, forged on the basis of client’s requirements and delivered code.