Skip to content
Carmel Eve By Carmel Eve Software Engineer I
An experimental approach to software development

Over the years we have developed an approach to software projects which is based around experimentation and validation. I have spoken before about the fact that science sets you up well for software development because programming is largely based around building up solutions to problems from smaller logical steps.

And if the methodology of solving scientific and software engineering problems are closely related, why should the process be any different?

There is a well defined scientific process for solving problems:

  • Hypothesise
  • Collect evidence
  • Draw conclusions

If we apply this process to software development, it can be a very powerful tool in design and architecture.

Hypotheses

A hypothesis is something which you propose to be true as a basis for further investigation. People often make assumptions when starting software projects, for example that a technology will meet all of the necessary requirements, but don't fully define or record these assumptions. A hypothesis is in some ways one level above an assumption. A hypothesis is an assumption which you do not know to be true. In order to be able to continue with the project under than assumption, it needs to be proved, and this requires evidence.

Doodle of author with lightbulb and question marks above head.

It is important at this point to define the criteria of proof. If you are about to embark on a proof of concept, you need to define the criteria of success.

For example, if we had a system that needed to process large amounts of data in real time, then (a few of) the success criteria are:

  • We can process 2000 messages a second
  • We can do this within the budget constraints
  • We can catch up should we fall behind in our processing

And our hypothesis is:

"We will be able to meet the success criteria using Azure Functions and .NET"

We then need to collect evidence to prove/disprove our hypothesis.

Proof of Concept

This is quite an overloaded term. But it essentially means to collect evidence to prove/disprove a design. In this stage we build out the minimum useful version of the system which we can use to validate our thinking. This process looks very different depending on what hypothesis you are trying to prove.

Doodle of author stood in front of board of "proof".

The important thing to remember at this point is that you should carry this out with no assumption about whether or not the hypothesis is true. A proof of concept is useful and important irrespective of the outcome. Proving that an approach will not meet the criteria is just as useful as proving that it will.

But with this in mind it's important to quickly prove/disprove an approach. A fast feedback loop between hypothesis, experiment, conclusion is extremely important. This way you can quickly establish the approaches which aren't going to work and continue with a more in depth assessment and subsequently usage of the proved out solution.

Conclusion and write-up

Once a hypothesis has been proved/disproved you can draw your conclusions.

Whether or not the conclusion is that an approach will work, it is important to write these up and fully document any decisions made. This not only forces you to think through and fully consider these decisions, but also is important so that people will later be able to understand the design.

Using this process we can quickly evaluate suggested approaches and minimise the time wasted on exploring dead ends.

The most important take-away is that scientific experimental process is equally applicable to software development and leaves you with not only an design which you are confident in, but also with fully documented reasoning behing every decision made.

Doodle of author surrounded by "scientific objects".

Carmel Eve

Software Engineer I

Carmel Eve

Carmel is a software engineer, LinkedIn Learning instructor and STEM ambassador.

Over the past four years she has been focused on delivering cloud-first solutions to a variety of problems. These have ranged from highly-performant serverless architectures, to web applications, to reporting and insight pipelines and data analytics engines.

In her time at endjin, she has written many blog posts covering a huge range of topics, including deconstructing Rx operators and mental well-being and managing remote working.

Carmel's first LinkedIn Learning course on how to prepare for the Az-204 exam - developing solutions for Microsoft Azure - was released in April 2021. Over the last couple of years she has also spoken at NDC, APISpecs and SQLBits. These talks covered a range of topics, from reactive big-data processing to secure Azure architectures.

She is also passionate about diversity and inclusivity in tech. She is a STEM ambassador in her local community and is taking part in a local mentorship scheme. Through this work she hopes to be a part of positive change in the industry.

Carmel won "Apprentice Engineer of the Year" at the Computing Rising Star Awards 2019.

Carmel worked at endjin from 2016 to 2021.