Interview with Andreas Lindgren
Andreas Lindgren is a backend lead at Apptus Technologies, which provides AI-powered optimisation software for eCommerce companies. Prior to this he worked at a large consulting company on various projects ranging from large government projects to mobile apps.
He blogs at https://auo.nu/ and you can follow him on Twitter here.
What does “testing” mean to you?
I believe that testing is a rather fuzzy word, in the sense that it can mean a lot of different things to different people, depending on their circumstances and experiences. My view on testing is that it’s a highly automated process that sometimes require some hands on testing. Creation of the automated tests are the responsibility of the developer who built the feature, since he or she has the most in-depth knowledge of how it should work.
The automated tests should be unit tests, and if possible some sort of integration test. Which should run on every change to the codebase to guard for future changes that might break the feature.
Have you learned anything from me (your wife, who is a tester) with regards to testing? If so, what?
That developers and managers quite often don’t think about all cases. There are always bugs in codebases, they just haven’t been found yet. Tests are good, but it’s great to have another person verify that the feature is actually done right.
Mobile testing seems to be such a hassle, you’ve got to test on a billion different devices and different versions of operating systems. Writing automated tests for mobile devices also seems like a whole lot of work, which I’m sure will improve but for now it seems difficult.
I think I can summarise with, that it seems like a difficult job that quite often is not that appreciated, because if you get it right it won’t even look like you’re working.
What is your involvement with testing and/or testers at your current company?
I believe that my answer to the first question might give it away a bit, because we currently don’t have any testers at our company. My department, which is the backend, is in charge of developing and maintaining our own test suite which is built specifically for our products.
It contains unit tests, short integration tests, performance tests, as well as compatibility tests which make sure we don’t introduce unintended changes to our algorithms.
This suite is triggered by a change in the codebase and runs as often as it can, but due to long-running tests it’s unfortunately not on every update to the codebase.
Before your current company, what was your involvement with testing and/or testers?
I previously worked at a large consulting firm, where I mainly was assigned to smaller projects which did not have any budget for testers. On some projects this meant that I was the manager, developer and tester. Obviously not ideal since it’s very easy to become blind to your own mistakes.
I did however spend some time on a large project which involved testing on phones. I’m not sure if was the chaotic setting on the project but it was delayed and over budget. It affected the testers because I felt that many of the test reports I received were subpar. They would be missing vital information such as how to reproduce it, which device it was tested on and what the expected behaviour was supposed to be.
One takeaway of this is that stressful environments do not improve quality.
What makes you think that what you have built is good? How can you tell that what you have built is good?
This is a tough question and it can probably be interpreted in multiple ways. My view of the question is twofold.
1. How do I know which features are good to build?
2. How do I make sure those features are well implemented?
It’s important to build features that you believe that the end customers would like to have, even though they don’t know it yet and also to listen to your customers and see what multiple clients have requested.
Making sure that it’s a high quality feature is done in collaboration between developers, product manager and UX, automated tests, internal testing and to listen to the customers feedback when they get to dig into the feature.
What’s one of the biggest challenges with being a developer?
I don’t think there is a “biggest” challenge, I believe that there are multiple challenges that are intertwined and together form the every day challenges that I encounter.
I’ll try and list a few, which are a mix of both programming and soft skills. There are certainly more challenges, but these ones stood out at first thought.
- Understanding where the edge cases are.
- Understanding the code that previously has been written.
- Challenging the PM if the time spent on the feature could be better put somewhere else.
- Making sure that the people in the development team are aligned which normally includes, UX, frontend and backend.
What made you decide to focus on backend development (as opposed to front end)?
I got into programming by creating small homepages, mainly just by playing around with CSS and HTML. I don’t think I published a single one of those projects. I would definitely have considered myself a frontend developer at this point, if I had heard the term.
After some time, I got curious about how to publish the pages that I had created, so that I could actually access the pages from somewhere other than my local machine.
At roughly the same time I got into university and the courses in combination with side projects got me thinking about the complete picture, I was turning into a fullstack developer.
This is a role that has stuck with me since. I might be working in a backend team, but I’m still interested in frontend, backend as well as dev ops.
So what made me decide on backend, I guess it sort of just happened because I wanted to be able to build a product myself!
I’ve noticed you sometimes spend your spare time on side projects and use them to learn different programming languages and new tools etc. What do you find challenging about changing/switching programming languages and what advice would you give to junior developers who also want to increase their skill set?
It’s never been a goal of mine to learn a lot of programming languages, and I don’t think anyone should have a goal like that. What I believe that people should do, if they have the time, is to play around with some side projects to get a feel for what is out there. You might find something that you really like, a language or a tool, that could become a career path for you!
If you want to increase your skill set, I suggest that you take a deep dive into the programming language that you’ve chosen for yourself. This will give you a fundamental understanding of how to solve issues and gives you a base to stand on before you jump to the next shiny project!