This may be one of the most obvious blog posts I make as a technical architect of IT systems. One of the things I do is try to figure out the non functional requirements. These are often ignored. Software developers usually focus on the functional things like: “Does it come up with the right answer?” 

They often forget to check things like: “Will it support 20 people asking questions at once?” 

and “Will it respond with the right answer within an acceptable amount of time?” 

Designers like myself think about those non-functional requirements and help to define the testing and acceptance processes.

Here is a simple example of something which looked like it worked, until you look closely at the requirements and tested it. 

An Example Problem

My home network consists of two Gigabit switches in two different rooms in the house. One of them has the ADSL router connected to my ISP which also does WiFi for devices like phones, tablets, and laptops in the house. This is fairly normal for most people. 

The other network in a different room has a number of powerful linux servers which do Big Data and other such heavyweight data transfer operations. They need to access the internet for OS updates, and the like. 

I sometimes record movies on my laptop in one room, but wish to edit them in another on the more powerful machines. The transfer of these large movie files can be quite slow over the network. Sometimes I consider transferring them by USB flash drive, or moving the laptop to the back room. 

So the current network works, but does not meet my non functional requirements. 

The main thing I am thinking of changing is how these two networks are connected together.

Baseline Testing

I am not too worried about my internet speed, but it is always good to test such things…Here is https://www.broadbandspeedchecker.co.uk/ but there are many more. 

That is not too bad – and is much better than the rotten phone line I used to have. (I still have a piece of that phone line to show people how bad it was – yes, I am that sort of techie)

This may be interesting, but is not what I am concerned about. My non functional requirements are for fast network transfer within the house.

Let’s use the tool iperf3 to do a similar test but this time, instead of going out to the internet, I am testing the connection from my laptop to the linux servers in the other room.

After installing iperf3 from the normal repositories I started it in server mode on one of the powerful machines, and on my laptop I ran a client which talked to it:

  • iperf3 -s
  • iperf3 -c <ipaddress of server>

Performance with Powerline and WiFi

Hmmm, That does not look very regular or reliable. It is roughly the same as the speed of the connection to the internet: 5 to 45 Mbits/sec (btw Mbits/sec is the same as Mb/s but not the same as MB/s or Megabytes per second)

Here we are using WiFi from my laptop to the ADSL router, and that is connected to the Gigabit switch (probably not at Gigabit speeds) which is using a Powerline extender to the other network. This sends ethernet down my household ring main which was definitely not designed for that sort of thing. It is possible that they have improved the technology since I bought this device but who knows how good the wiring is in this house. 

Improvement 1

So can we improve this? Let’s start by simply not using WiFi – plug my laptop into the local network with an ethernet cable…

Performance with Powerline and NO WiFi

This looks much more respectable. A 2 to 3 times improvement. But can we improve it any more?

Improvement 2

So now let’s make the change which kicked all of this off. I am running a Cat6 rated cable down the length of my house so that there is proper ethernet cable between the two Gigabit switches. Is that better than the Powerline Adaptor? Test it!

Performance with No Powerline and No WiFi

So, the answer is yes. It is approximately ten times faster than the powerline adaptor, which was faster than just WiFi. 

Evaluation

I have not tested my “ping times” being the speed to get single packets back and forth, but I trust that is not an issue for me. That mostly matters if you are playing online games with others outside your network, and that is not part of my requirements. 

Has it satisfied my non functional requirements now? It looks like I can transfer large movies (like I record for YouTube) from one machine to another with ease. No more waiting around.

So whatever you are doing remember the non functional requirements. They are important.

Credits

Fish Photo by NOAA on Unsplash

 

Author:

Alex McLintock has over 25 years in the IT industry. Alex runs Alephant which helps companies in London to design new systems for Big Data Analytics and Data Science. He has written several articles here.