Compositional IT's Managed Development Package provides you with a complete end-to-end software development package that is designed to deliver a bespoke, tested software system that is ready to be put into production. This includes domain modelling, architecture, development, testing and project management. This package is ideal when you have internal domain expertise, but either a lack of internal technical capabilities or the desire to outsource a specific deliverable as a completely managed end-to-end deliverable. Our experienced team will liaise with your internal domain experts to understand the area of opportunity as well as understand the effort and challenges involved, before working with your team in an iterative process to deliver a fully working, high-value bespoke software product that works first time.
Our managed development package is simple: a single package that provides a number of consultant days, an architect and project manager. The consultant will manage roles of capturing requirements and liaising with your team, as well as implementing the solution. Our team write automated tests as a non-negotiable part of our standard implementation cycle (see the section on delivery below to learn more).
Each development pack contains the following:
- 40 days of consultant time to be split across analysis and development as required
- 6 days split across architectural and project management as needed
- Fully tested and deployable application with user documentation where necessary
- Weekly progress reports, with demonstration of working software
- Daily "stand-ups"
It is our experience that the basic package represents a minimal amount of time that is required to deliver a high-quality working bespoke software product from scratch that can be put into production. If you have specific requirements that may be significantly less time intensive, please contact us directly.
Working with larger commitments
Larger systems that require more time and effort can be easily developed by creating multiples of this e.g. 80 days of development etc. In such a case, CIT will work with you to create a set of milestones or modules that can be used to track progress at a more granular level than a simple high-level figure. In addition, we'll ensure that software can be deployed on a regular basis so that you can continually benefit from developed software. For quotes that will exceed two packages worth of effort, we will discuss how best to design a larger team to ensure delivery in a timely fashion.
As a managed package, we strongly recommend adhering to remaining within the confines of the above design. Nevertheless, where required, CIT are happy to discuss customisation of the package on a case-by-case basis where required e.g. manual software tester to augment our automated test suite, or multiple consultants working in parallel to improve velocity.
How are Compositional IT different?
At Compositional IT, we provide a product to you that works first time, every time, in a highly efficient manner that provides rapid time to market for your solutions. The combination of our choice of tools and online services, programming langages and process means that we're often able to significantly deliver more than might be thought possible.
We focus on using F#, a functional programming language that runs on Microsoft's .NET platform. F# is a safe, powerful and efficient programming language designed to solve even difficult problems with simple code. F# enables our team to deliver software to customers with drastically fewer bugs, in less time, and with lower total cost of maintenance, than other popular languages. Meanwhile, running on top of Microsoft's mature .NET platform means a reliable environment with a huge number of pre-built libraries that enable everything from database-driven websites to machine learning.
Compositional IT are advocates of using the cloud, and particularly Microsoft's Azure platform, to aid delivery of applications at a much reduced cost, and enabling features in products that normally would not be possible. Azure provides teams with the ability to develop applications that have unparallelled reliability, flexibility and ease-of-use - which results in hugely reduced time-to-market, risk, and investment for our customers.
We use automated tools and systems to provide huge increases in efficiency. All our deliveries have automated build systems which means that the typical turnaround from development to deployment can be measured in minutes rather than days or hours. We also use a variety of testing tools which catch issues in code at the earliest opportunities, that can create thousands of test cases against specifications that can be proved in seconds. For systems that we develop for our customers, this process happens continuously - every time we change our code, systems automatically run thousands of tests, checking for different edge cases and exceptions.
CIT have a unique development process this covers the steps from the moment one of our consultants begins work on delivery of a feature to the moment it is delivered to you to test. You can find out more about this process later in this document.
As a Microsoft Silver Partner and based on our deep software delivery experience, we have evolved and refined a bespoke agile delivery process that encourages rapid delivery, high quality outputs that puts the product owner in control of shaping the most important deliverables. We operate a collaborative approach in our development teams, sharing knowledge where possible and using automated tools and technologies to maximise value and increase time to market.
CIT favour an agile approach to bespoke software delivery. This means in practice that we avoid fixed deadlines for fixed requirements, and favour responding positively to changes in the requirements of a project during delivery by acknowledging them, and address them by re-proritising existing requirements as needed. This is especially important with green-field projects that have fluid requirements, or at least those which are currently nascent.
In such a delivery, CIT will always deliver the simplest solution to fulfil customer requirements; this means that you, as the customer, can provide guidance on iterating upon deliverables to ensure the optimal solution. This helps to avoid wastage of development effort on features that are not required or have a lower priority than others.
Our projects will typically include a number of meetings the following:
- Project Initiation workshop: A 1-2 day workshop in which we set the project up for a successful delivery. We'll cover:
- Setting key goals, so that everyone remains focused throughout
- Setting roles for the project
- Agile at CIT
- Discovering key milestones
- Formulation of an initial product backlog
- Architectural design session: Review of proposed architecture for initial delivery of the system
- Backlog refinement: On a regular basis, we'll perform backlog "refinement" exercises, where we step back as a team, take stock of our progress and re-focus on the next set of key deliverables.
Unlike many consultancies, CIT favour regular feedback sessions with input from stakeholders and product owners. This includes regular demos where live software is shown, which builds confidence as well as identifying new requirements - as often as once a week, as well as planning sessions that ensuring that we work on the most important features.
In addition, CIT focus on building a pragmatic delivery schedule with a focus on prioritising "vertical" features that allow the most rapid time to market for bespoke products, as opposed to delivering a system in horizontal "tiers" which run the risk of overruns or incorrect prioritisation of budget.
CIT do not typically engage in an up-front "analysis" phase to create a detailed requirements catalogue. Instead, we believe that more can be gained from delivering actual tangible software in the same time, and that learnings from this can be more useful than a static requirements document which can rapidly go out of date.
For these reasons, CIT do not typically provide estimates for granular features or stories at the proposal stage. Instead, if requested by the customer, CIT provide relatively high-level estimates that reflects the understanding of CIT at this moment in time, without committing to deliver the entire backlog.
We will work with you, as the product owner, to find a commonly-agreed set of features that work within the budget that you have allocated.
CIT's Five Step Development Process
Based on our years of experience of software delivery, CIT have evolved a tried and tested five-step development process for successful delivery that is designed to avoid risk, empower the development team and maintain low overhead, whilst keeping the product owner in control throughout to ensure that the most important features are developed first - saving time and effort whilst maximising value.
To manage work, CIT use powerful and sophisticated Application Lifecycle Management (ALM) tools that provides full traceability of work, from requirements gathering through to development, testing and release.
1. Paired Design
Before anyone starts cutting code, no less than two developers work on the design and implementation strategy for a feature. This ensures common understanding and helps share knowledge throughout the team.
The developer will then break down the feature into tangible, measurable tasks that can be reviewed on a daily basis to easily measure progress.
CIT specialise in the use of F# as our primary development language. Running on Microsoft .NET Core, F# provides developers with a powerful, flexible and reliable development experience that allows low-cost and rapid creating of features with low maintenance overhead and a high level of reliability.
We also maintain a large set of coding standards and best practices that our development team adhere to that are continually refined. This combinations enables our development team to rapidly create high quality, highly maintainable code artifacts.
Our team also use the latest versions of the most popular and effective IDEs, such as Microsoft Visual Studio, Microsoft Visual Studio Code and JetBrains Rider.
It's well known that finding bugs and issues as early as possible in the development life cycle massively reduces cost.
CIT use a number of different automated testing tools, technologies and strategies that can provide thousands of automated tests against specific areas of code, designed to highlight many possible exceptional cases as early as possible.
4. Code Review
CIT have a formal process using tools and technologies such as branches and pull requests to ensure that code must be reviewed and validated by another team member before being accepted as "code complete".
Code is then "merged" with the current "last known good" version of code and re-integrated back into the repository for other developers to start working with.
5. Continuous Integration and Deployment
CIT avoid "big bang" deliveries as much as possible, and try to get feedback from product owners as rapidly as possible - this leads to a better final output. Therefore, we operate both continuous integration and deployment practices where feasible.
This means that when our developers work on a feature and commit it back to our centralised code repository, CIT automatically run through a centralised suite of automated tests, and know within a few seconds if there's an issue - with automated alerting and tracability. If the code successfully integrates into the repository, code will typically be deployed onto an number of test environments that the team can immediately test against to see new features as they are worked on.