Watford Consulting can help you build your next Bespoke Software Product.
There are several components considered critical for successful software product delivery and Watford Consulting can guide you every step of the way. By getting these components in place early you can be confident that changes made to your software will be accountable, buildable and testable – unleashing the return on your investment as soon as possible.
Building great software is our passion. Read on for an overview of how we get there.
Passion and Professional Pride
You need a software development team who are passionate about what they do, who get a kick out of producing elegant solutions for difficult problems, who are proud of what they produce. Of course we think that describes Watford Consulting perfectly!
A few traits to look for in your team:
- They are enthusiastic about getting software built to a professional standard. They want to stand by their software, not throw it over the wall so that it is someone else’s problem. Software is a matter of professional pride.
- They are continuously learning, engaging in the community, attending conferences, applying best practices.
- They want their software released to users. They crave feedback on their product’s effectiveness. They use that feedback to inform further development.
- They are pragmatic, recognising that the commercial concerns of the business must be satisfied. It is no use spending time building purist software if meanwhile the business has lost out to the competition and there is no one left to use it.
- They go out of their way to understand the problem fully, learn the terminology of the problem space. The more we know the luckier we get! The more we can understand about the problem space, the more the solution space grows and the greater the chances of finding an elegant solution.
Watford Consulting can guide you through development and help you ensure the components you need are in place.
Software Version Control Systems
Get all sources for your software products into a version control system on day one. This paves the way for multiple developers to work on the code base at the same time, and for your build systems to continuously detect changes and immediately test and rebuild your products.
Depending on your workflow you might favour a system that allows easy branching, such as the highly regarded Git version control system. Git is well supported by software development tools.
Network Repositories for version control systems such as Bitbucket Server (formally called Stash) are ideal for hosting on-premises. If you prefer something externally hosted look at the offerings from GitHub and Atlassian Bitbucket.
Once you have you Version Control System you can concentrate on a Continuous Build and Integration tool. These tools will detect every change committed against your code and trigger the rebuilding and testing of your software products.
Getting your build running fast is important to give developers fast feedback and to help the team notice when some changes have broken the build. Better still, if your workflow involves developers working on bugfix or feature branches, have the build automation system build those branches too. This should keep your main branch clear of any build failures.
Release builds should always come from your build automation system, never from a developers own environment. This keeps all builds consistent and means you won’t suffer issues when it turns out the developer’s environment was inconsistent with the build environment.
For Java development, scripting the build with Ant and Ivy is a mature choice when you need a lot of build customisation. If your build is a bit more mainstream then Maven, Gradle, or any of their derivative build systems will work well.
Once the build scripts are in place you’ll want a system to run the build when changes are detected in the version control system. Jenkins is a very popular automation server with integrations for many tools such as code style checking, static analysis tools and build artifact repositories.
When the builds have run you will need to store the resulting artifacts using a repository manager, such as Artifactory, ready for testing and deployment. Repository managers are also ideal for mirroring libraries normally downloaded from the internet during build.
Coding is where the developer’s heart is! This is where the abstract ideas are turned into something concrete – a very satisfying process.
With the build infrastructure in place it is a good idea to start by building a ‘Walking Skeleton’ where just enough of the software architecture is implemented to see how the software might hang together. External dependencies, such as databases or network authentication services, are stubbed out meaning the software can be built, deployed and tested against a very basic acceptance criteria.
Once the skeleton is in place start adding software meat to those bones! Use agile approaches to build slices of functionality through the system at a time. The aim here is to produce a focused piece of functionality that would provide some value to users right away.
In Agile environments we need to move quickly to implement features. Paying attention to Design Patterns and Best Practices helps produce software that will be more easily understood by others, aiding on-boarding of new developers and easing any future maintenance.
Software systems can be complex, but we can tackle the complexity by breaking systems down into small components which are easier to reason about and implement. Since these components become the foundation of the larger system it is imporant to ensure they are well defined and tested. Developers can create automated tests that are run as part of the build process which will exercise these smaller components in Unit Tests.
Those automated tests are only as good as the code they are made up of. A supportive code review is a great way to keep the code base
adhering to best practice. Use code reviews as the gate keeper to accepting code changes into your main branch.
Testing goes further than the developers’ automated testing. A variety of system and integration tests ensure the simple software components interact appropriately to fullfil the projects needs.
Watford Consulting can supplement your test teams, devising the functional and non-functional tests which exercise your products, ensuring the requirements have been met.