H&Cs roots are in software engineering
Technically we do this by using languages with an algebraic type system. What this means in simple terms is that we can transfer what's written on the post into computer code which will form part of the system without making it any less readable to the key stakeholders.
It’s not magic, but it is like music
Writing software is like making music, the quality of software is as dependent on the skill of the engineers as music is upon the level of the musicians. Quality in software is measured in speed to market, number of bugs, how well it solves the target problem, and how easy it is to change as the problem and surrounding context evolves. These problems are best solved by a small team of highly talented and trained engineers working with maximum autonomy. The job of management is to assemble the team, choose a destination, and then get out of the way.
Scale with design not labour
Our technology choices reflect this mindset. We don’t choose technologies that are designed to give the impression that you can scale up a big team of average people because they will be following design patterns and prescribed structures. The Object Oriented world with its well established and elegant design patterns often leads to team bloat and unmaintainable software in which under qualified developers can create the illusion of short term progress but cutting and pasting existing code around. AT H&C we use many techniques from OO but also use many patterns from functional patterns which tend to be more expressive and maintainable in much less code that then doesn’t have to be maintained by a large team of error prone junior developers.
Demystify all the things
The job of the software engineers is not to translate requirements into code. They must enrich and deepen the specification by writing it in a more precise medium.
One piece flow
H&C believe in making many small and frequent updates so that complexity does not build up
This also creates a virtuous feedback loop with the end users of the system. In Lean terminology this is called One-Piece Flow and it's incredibly powerful when applied to development of the complex technology. This approach allows our teams to iterate towards the optimal solution and then continuously evolve with the changing business context and user needs.
We use many techniques from lean manufacturing to help us make scalable systems whilst avoiding premature optimisation. This form of optimisation makines system needlessly complicated for the foreseeable use case and is especially counter productive if those changes can be made later if and when scalability demands it. This approach leads us to identify waste in the system architecture and remove it. System should be as simple as possible but not simpler. Is this regard we use microservices architecture with queues between.
Distributed by default
To follow our philosophy of small teams of exceptional people we need to cast a wide net. As a result we decided back in 2014 to allow everyone to work from home. We found that this made our people more productive as each of them now had a closed door office and the number of interruptions was greatly reduced. We have been influenced by research that shows that developers working in open plan environments write more bugs that their colleagues who work from home. GThis way of working enables us to rapidly scale with talent as our hiring criteria rather than proximity to one of our offices.
Proven technology within the H&C Cloud
As software engineers we love automation and hate repetitive work. This is why we have built a wide range of tools, technologies, and libraries which we reuse across our projects. This reuse enables us to ramp up very quickly on new projects and reduces technology risk in the 4 key solution areas in which we work. We have gathered these tools together in the H&C ToolKit which runs on the H&C Cloud within an ISO certified environment running on Azure. The H&C toolkit also runs on GPO and AWS. Our solutions are normally deployed using kubernetes and docker. Containerisation giving us rapidly scalability and ability to clearly demarcate the dependencies of our solution particularly if they interoperate with the clients legacy technology.
Specification and Implementation are the same activity
Traditional approaches view engineering as having two distinct and linear phases. First projects go through a specification phase and, once that specification was signed off, the implementation phase would begin. This false separation between specification and implementation causes most IT project failures. It was also the catalyst for the creation of the Agile movement. There is a lot that can be said about the benefits of functional programming over the more common Object Oriented approach and there is further information on the technology page. Its key feature in solution design is that it separates data modelling from system behaviour. It is the mingling of data structures with behaviour which makes some code unreadable to everyone except an expert engineer.
Constriants are insights
Most problems are solved through iterations rather than
The important thing is to start iterating.