Each of us knows that to work as a programmer we need basic tools such as a code editor, a configured development environment, etc. However, it is very rare to find in the Internet information about tools that support our work.
I don’t mean time measurement (e.g. Toggl) or task management (e.g. JIRA). I mean more about tools that help us take care of the quality of the delivered solution.
What is quality?
Some time ago I had the pleasure of meeting with Andrzej Krzywda (Arkency.com). During our conversation Andrzej said a very interesting thing, which I will try to quote:
Developers often say when selling their services that they will deliver great quality, but fail to explain what that quality is.
After a long while, it occurred to me that in 2012 I was convincing clients myself that I would deliver a great quality software service. Fortunately, no one asked me then what that quality was. Back then I would have had no idea how to answer that question. Today, with more experience I am able to pick up the gauntlet and say what is my definition of software quality.
If you think that software quality is beautiful code – you are wrong. Nobody cares whether you used this or that solution. Nobody but your team will ever see your code. So what is the quality of your solution? You have to look at what you do through the lens of the product. As a programmer, you are creating a product. What are the characteristics of a good product? This question is probably easier to answer. Stability of operation, high availability and speed of performed operations. To this you can add predictability and short time of removing failures (you can never avoid them).
To be able to meet these evaluation criteria it is worth using tools that will help you measure the relevant indicators.
Using a monitoring system you can see in black and white how your system is behaving. With Grafana, for example, you can build advanced graphs that will show you
• number of users using your application
• number of errors from log files
• number of requests / min
• average response times
Of course what you display on the graphs is your choice. You will choose the metrics that are important to you. The most important thing is that by displaying them on a separate monitor you can see almost in real time what is happening with your system.
I have been thinking for a long time whether this item should be on this list. However, after talking to a few people I decided that it’s a good idea. Many people still update their applications manually. It’s hard for me to imagine uploading tens of thousands of files to a server at a time when automating this process can cost $5 / msc.
With automation you can avoid problems with deploying a new version such as:
• an internet/power outage that caused only part of the project to be updated; • overwriting environment variables so that your project connects to a test database; • publishing untested changes.
If you don’t know how to automate application deployment process, there will be a tutorial on my YouTube channel soon. I will show you how to configure and use the free Jenkins CI tool. In the meantime, if you don’t know the difference between CI and CD, I also invite you to my insta stories, where I explain this subtle difference.
Imagine that you are looking after your client’s online store. It’s Friday. Your client has scheduled an evening webinar where they give attendees discount codes that they can only use until the morning.
The webinar is over and your client can’t wait until tomorrow morning to check the night’s sales report. However, he wakes up in the morning and sees that no new orders have come in. He becomes depressed. He decides that his products are a total flop. But it turns out that the problem wasn’t the products or the webinar, it was the shopping process not working. The script was throwing errors for all people who wanted to buy with the newly added discount code.
Could this situation have been avoided? Errors do happen. However, you could have minimized the loss. All you need to do is integrate your system with an error notification tool. An example of such a solution could be VictorOps, for example. It’s a tool that sends an email or calls you at the phone number you provide if a specific failure occurs.
Code Quality Measurement
Everyone makes mistakes. Typos, missing imported dependencies or using undefined variable. Of course we are protected against many of these errors by automated tests, which I hope you write in your projects. For programmers in love with standards, the ISO/IEC 25010 standard was created, which describes the characteristics of “good code”.
Of course, we also have appropriate tools that can analyze code against these standards. One such tool, for example, is SonarQube. This is an application that we can integrate into our CI/CD process and run it, for example, every time we make a push to our branch. This is so interesting solution that analysis can also show so called security vulnerability. You can use Sonar by installing it using docker image. It is also available in AWS marketplace. This is a great solution if you keep your infrastructure just on Amazon.
If we already talk about Amazon, just as a curiosity I encourage you to check AWS service called CodeGuru. It is a tool that with the help of artificial intelligence can do Code Review. Interestingly, it supposedly doesn’t just give you information about errors, but can also suggest better solutions. I haven’t tested this service yet, so if you know something more about it please leave a comment 🙂
Let me know in the comments if you use any of the described solutions. Do you care about the quality of your solutions and what that quality means to you.