Welcome to the first of a series of interviews with interesting and insightful technology professionals. She is modest and hard working, yet has a remarkable breadth and depth of knowledge, experience and understanding in the field of commercial software engineering. For over a decade, Adriana Vasiu has worked at the core of some of the most innovative business software projects in the UK for leading brand names like Sky and TimeOut magazine, to fast-growing startups like Babylon Healthcare and Tails.com.
In this interview, Adriana shares her insights on the common traits of successfully delivered software projects; the business benefits of remote working; what makes a good CTO; how to fast-track your software engineering career; productivity tips and more.
The key ingredients of successfully delivered IT projects
JD: Adriana, you’ve worked in both big business and with startups. I am guessing that in both settings you’ve seen successful projects and botched projects. What correlations have you noticed between specific practices and overall project success?
AV: There are a few specific practices that have set projects for success, regardless of the type of company setup. In the successful software projects I’ve seen, requirements have been divided into small units of deliverables which can be tested in isolation. Testing works best when it is automated to a high degree and manual testing is reserved only for exceptional situations that haven’t been encountered yet. If those exceptional situations prove to repeat after a while, the initially exceptional scenarios are then also automated.
Successful projects have a high visibility for both errors or success of running applications. Analysing trends in this data can help you make informed decisions on what issues need to be addressed.
Another key aspect is that the development process is very very streamlined. Releases of code into production is done often and it becomes so straight forward that it is considered to be a routine.
Confident growth with software test automation
JD: These are all really good points. Let’s talk more about something I know you’re very good at – software testing automation. Most software engineers understand the importance of testing, but from a business perspective sometimes it looks like unjustified additional resources. What’s the business value of having a sound testing methodology in place? How does it affect the development and maintenance cycle?
AV: Testing automation is the constant success factor in all the projects I have been involved with. If I was to pitch this to a business, these are the points I would make very clear about what it means to have testing automation in place:
- testing automation allows you to have the confidence to apply changes to a running system with minimum impact to users;
- it makes onboarding new people on the codebase easy because tests are the most explicit and up to date code documentation;
- it makes business requirements explicit: how many times have you wondered if a specific change was an actual business requirement or an oversight? Well if you see a test written about it, that means whoever wrote the logic had explicitly thought about the scenario as a valid business use case;
- it makes upgrades and maintenance of the software much less painful: upgrades of entire libraries are risky and without tests developers cannot guarantee that the software is behaving as expected after the upgrade;
- it makes code improvements and refactoring much easier to deal with. In business software, code rarely gets to live for long – it will always need extending and adapting as the business grows. You can’t adapt and extend without refactoring. And with no tests in place even the more innocent refactoring can have a big impact on the actual functionality expected by the user. Tests make this manageable.
- finally, a consistent testing automation methodology adopted by the team makes developers sleep better at night 😉
How to have fun while building better software
JD: Absolutely. Can you give some specifics about a project you’ve worked on which was particularly interesting and fulfilling to you? What made it so?
AV: The first thing that pops to mind was a project developed for Sky, more specifically the catalogue services engine for Sky’s international commerce platform. Not only the application itself was fulfilling to work on, by posing some interesting rule computation challenges, but also the evolution of the deployment pipeline was fascinating. It was the first time when I did Continuous Deployment and the levels of testing that we needed to do to achieve that was a step up from all the previous projects I had worked on. Actually, the entire way of thinking about delivering software needed to be changed, and I felt like I left that project all the richer.
JD: I did have the pleasure of working with you on that particular project, and you are right – both the software and the environment needed to evolve from scratch into nothing short of a massive engineering feat. In no small part, this was thanks to following the best practices you talked about earlier. While the project was challenging and not without hiccups, it was fun to work on and now powers a remarkable amount of commerce for Sky and its related brands.
Can working from home INCREASE productivity?
JD: Let’s return to the present now. We are all having to work remotely at the moment, due to the pandemic. Before this, at most UK companies (with a handful of notable exceptions) management was generally pretty uncomfortable with IT staff working remotely. Now we’re seeing that it’s not only universally possible, but may also be preferable in many respects going forward. What’s your take on this?
AV: I am a big proponent of working from home, because of the flexibility it gives and not only this. I think working remotely actually increases workplace transparency. A lot of the conversations are happening online on public chats rather than at someone’s desk. Also, I think we are starting to focus more on results rather than on the time spent at the desk. A person who constantly gets things done becomes more appreciated than a person who always works late.
Management are beginning to understand that productivity is not so much time bound as it is motivation bound. Some people work better in the evenings, some in the early mornings. How many times did it happen to you that you were struggling with a demanding problem and then when that’s done you simply had no energy to carry on for a couple of hours? Well now you can take the break you need, recover in the ways that work best for you and steam through the rest when you are feeling in top shape.
JD: This really resonates with me. I do hope you are right about that management enlightenment – and I hope it sticks around!
How to be a good technology leader
JD: Speaking of management, in your view what makes a good CTO / technology lead?
AV: A good technology leader is inspiring and humble. It’s the person who not only knows how to listen but also learns from others and makes decisions based on their own knowledge as well as their team’s knowledge. They are the channel of all the creativity and problem solving in a team, not a sole ruler. And if needs be, when it’s time to make a difficult decision that could go either way, then they make that decision without delay.
This is the person who knows best that mitigating 100% of the risk is almost never possible. A good leader knows how to calculate the risk and how to turn a failure into a success by making the best of the situation. A leader is the person who needs to be comfortable with the feeling of being uncomfortable.
How to become a more valuable software engineer
JD: What advice do you have for junior or mid-level software engineers who want to take their career to the next level? In your experience, what specific skills, ways of thinking or ways of working make someone more valuable in that respect?
AV: My advice for junior and mid-level software engineers is that they need to look at the software delivery process as a whole. It’s not enough to write really good code and make use of the latest best libraries. A rounded developer understands the business-relevant aspects of things like how to ship and run the code to production, how to make it easy for their co-workers to work with their code and how to make use of all the tools available to them to improve the whole development process. A good developer in my opinion thinks about the costs of running and maintaining software and develops a gut feeling for potential issues and limitations with their own software. I improved and managed to slide towards this way of thinking by asking all the relevant questions from the stakeholders: what are the business requirements in terms of scale, what are they anticipating in terms of changes, what are the most important and lucrative aspects of the business. A good developer challenges, ponders and then commits to develop not necessarily the best code but the best code suited for the business and for the requirement. Of course, a good developer also knows how to choose the right tool for the job.
JD: This comes with experience, doesn’t it? I don’t think it’s something that can be learned or taught. But just knowing that it’s important and being conscious of it is a good starting point.
How (and when) to get things done
Do you have any productivity tips that you’ve recently found practical and useful, especially in the context of working from home?
AV: I have a tip that works very well for me: I divide my time in “focus time” and “time when I can allow distractions”. I find that some of the tasks I am doing daily require full focus and that is when Slack and other ways of communication are largely ignored. The other tasks are maybe more like chores and can be done with interruptions, I can do those between meetings or with Slack open. I never do heavily focused tasks when I know I will be interrupted, it just doesn’t work for me. Try and find the best time of the day for focus time and always, always motivate yourself with an interesting task even if your day is swamped with less interesting chores.
Another tip that works very well for me is to always find something to improve, that gives me a sense of achievement that pushes me forward and increases my productivity. Even if it’s a small thing, I improve something every day. That could be a process, a piece of code, a document that the whole team uses. Find the thing that gives you the sense of achievement and take the time to do it.
For more actionable thought leadership by Adriana and others, subscribe to this blog. Comment or leave feedback to engage in discussion or for support and encouragement. You can follow Adriana on Twitter: @vasiu_adriana or connect on LinkedIn: Adriana Vasiu
If you know someone else you’d like to see interviewed here, get in touch.