Introduction
With the rapid pace of growth in the tech industry, it is easy for software development companies to become overwhelmed by the volume of new technologies and frameworks. Here at Enable, we use a dedicated research process to ensure that new opportunities to improve both our clients' products and our own standards aren't missed. Let's take a look at the benefits of performing research with some real-world examples.
Performance
We strive to create the best solutions, achieving excellent performance is key to this endeavour. There are already many measures we take to get the best possible performance out of our applications, with research tasks being our primary means of finding new and improved approaches. These may boil down to small-scale solutions to improve a feature or researching a new technology to improve our wider technology stack. For example, we have significantly upgraded our core technologies over the past few years, which has had a large positive impact on the performance of our sites.
We have modernised our core technologies such as Angular, .NET Core and Entity Framework Core, which form the base for all of our new solutions. For these technologies and many others we have introduced to our systems, extensive research is carried out before we introduce them.
Security
An important subject of our research is maintaining and improving the security of our solutions. In a fast-moving industry, it is pivotal to remain up to date with the latest practices to ensure that none of our solutions have any security vulnerabilities.
Regular security reviews of all solutions are conducted by the development team, which may reveal flaws exposed by recent technological developments. In this case, research can be a useful tool to uncover effective counter-measures for us to implement.
One example of this in action is HTML sanitisation. Whenever a user can enter formatted text into a solution, it is important to implement preventative measures to ensure that a user cannot enter malicious content. It came to the attention of the development team that the original techniques implemented to address this issue in some solutions were becoming outdated. To respond, a research task was carried out to investigate a more modern approach to HTML sanitisation. This resulted in a new library being introduced to our solutions, which resolved the immediate issue and presented a new tool to improve security across the board.
Cost efficiency
In order to provide the best service for our clients, we always look to deliver solutions that excel at meeting all our client's needs whilst keeping unnecessary costs to a minimum. Research can be used to cut costs without compromising the quality of our solutions.
One potentially substantial cost in supporting a site is server hosting costs -- we researched Azure AutoScale as a method of dynamically scaling server resources based on demand. This means the server always has enough power to be responsive to users while never having too many resources and wasting money.
Another example of cost and time efficiency being achieved through research is our automatic certificate renewal system. This system was built after research into Let's Encrypt noted that, due to the 3-month certificate expiry, there was a significant overhead of certificate management.
The types of research we do
Solving clients' challenges
Occasionally our clients present us with challenging or novel requirements which require our development team to tackle a problem they have not faced before. During requirements analysis, challenges like these are identified so that the development team can spend time before starting the project investigating the best way to solve the problem for our clients.
This type of research involves analysing potential approaches to a problem, of which there may be several. The team will look into whether this problem has been solved elsewhere and invest time in learning the common industry practices to make sure we're considering the most up-to-date and relevant solutions.
This type of research may involve the development of bespoke prototypes before the project which can be later used by the development team on the project as a starting point to implement higher fidelity production-ready solutions. It is at this stage of the research process that any issues with the chosen approach will be flagged so there are no nasty surprises when building the solution.
Having this dedicated research time before the project begins allows our development team to provide better estimates and higher quality software solutions to meet our client's requirements.
Team members' suggestions on new technology
We encourage and support our developers in keeping up to date with the latest software industry news and trends, so often our team will suggest new research topics from what they've recently learned about. Sometimes this encouragement is more active; for example we send groups of developers to national conferences where they can hear from big names in the industry and bring back ideas to be researched further.
Technologies suggested may be code libraries, frameworks or new hosting and database infrastructure. These ideas enter a structured process to ensure the most information and benefit is gained from the research performed. This process is managed by experienced developers, who assess the current state of the research item and decide what the next course of action is.
Our research process
1 -- Forming the requirements
For an idea to become an actionable research task, the requirements need to be outlined. We use a consistent structure to ensure that it is clear what should be researched and what the task should achieve;
Summary: A general description and background of the topic.
Goals: The expected outcomes of the research and what questions need to be answered. When researching new technologies, there are often common questions that cover the viability of using the technology in the future, such as: How active is the community? Is there regular support for the technology? Is there a lot of documentation with examples? How permissive is the licensing? -- we don't want to introduce technology for which we don't have permission; Will it integrate well with our current technology and tooling?
Justification: Why the topic should be researched and the benefits the technology could bring. For example, it could help improve the security, performance or cost-efficiency of our clients' products, or it could enhance our development workflow.
Guidance: Some initial sources of information to help the researcher get started.
Having the information clearly laid out in this format helps our developers to determine the priority of researching the topic and estimate how long a research task should take. Having a consistent structure across all research requirements also means that the researcher knows exactly where to find the information they need to perform the task, regardless of what they are investigating.
2 -- Performing the research
When a research item has been approved and is ready to be tackled, a developer is assigned a chunk of time in which to carry out the investigation. Their work will involve collating as much information as possible from various sources. These can include articles, other research papers, conference talks, instructional videos and demonstrations of the technology in action.
Researchers will often detail the pros and cons of a technology and the opinions on the technology of others in the industry. This helps the developer gain a solid understanding of the topic and reach a well-informed conclusion. A research report is produced with the aim to give the reader a solid understanding of the topic, see the decisions behind the final verdict on the technologies and see the answers to all the questions originally posed.
Often demo applications will be built to accompany the research report, especially when researching new libraries and frameworks. These applications will mimic functionality we would expect to be using and allow people to see the technology in action. They can also act as a useful reference for other developers when they come to integrate the technology into production-ready code.
3 -- Using the results
When the research is finished a developer will review the outcome and make a decision on whether the technology should be adopted by Enable. We'll look over the findings and produce a final verdict of whether a technology is viable and should be adopted. If it is green-lit, further work can be arranged to integrate the technology into any related products.
In some cases, the researched topic is not product-specific but is determined to be beneficial so will be adopted into our technology or infrastructure stack to be used in future projects. Sometimes we may feel that a technology could be useful in the future but is not yet complete enough to meet the high standards we demand. In these cases, the topic will be revisited and reassessed in the future to determine whether it has developed enough to fulfil our needs.
4 -- Spreading the word
We believe the more knowledge that is shared across the team, the better. When new knowledge is gained from research, we make sure the rest of the team learns about it.
This happens through our distributed build-slot newsletter, where we feature a summary of all research carried out during the build-slot and links to the research tasks. We also have an internal feed where developers can post links to interesting articles relating to the technologies we use for the team to learn about; often these topics will tie into raised research items.
If a piece of research results in a major departure from the technologies we are used to, such as our adoption of the Angular framework, then training sessions will be arranged for developers to get to become familiar with it.
Conclusion
The future -- maintaining our research standard
To keep up with the latest in technological advancements and to produce forward-thinking ideas for research, employing developers of a high calibre from a range of backgrounds is pivotal. At Enable a large number of the developers we employ are university graduates with strong academic backgrounds. Not only do they bring their own technical knowledge, but they also have strong research, investigation and problem-solving skills which are crucial to producing useful and high-quality research material.
Final thoughts
Research lies at the core of being able to keep pace with the industry and continue providing our clients with the highest quality software. By maintaining a structured research process, we are able to find the best solutions to novel challenges our clients are facing and fully analyse promising technologies that could enhance our solutions and workflow.