As you might have already seen on our careers page, we have what’s called a ProdEng (which stands for Product Engineering) department at Upvest. If you’re not yet familiar with the term, don’t worry. This blog post is an opportunity for you to familiarise yourself with it. If you already know what Product Engineering means, this post may still provide valuable insights about how we define it as one of our core engineering values at Upvest, and how our product engineering department works.
So, what is product engineering?
Product engineering is essentially all the rigour and processes software engineering encompasses, that is the ideation, design, implementation, testing, and deployment of software, but with a strong product focus.
It’s expected and encouraged from product engineers that they shape the product as they are building it. Product engineering is not building software with a task-focused mindset. It’s about understanding the customers’ real problems and using this understanding to improve the product. It’s keeping in mind the impact of the software when it reaches the users so that when we build a product, we do so in a way both we and our customer would love.
How do we make sure that we achieve this impact?
At Upvest, when we are tackling a problem we start with the “Why?”. This allows us to see if we’re focusing on the right thing. Why is it important? Why do we need this feature? Why does it matter? What customer needs does it serve? Would that be a product that I would personally love to use? If not, what needs to change?
Answering those questions, and many more, allow us to really drive into the heart of the solution, to arrive at an outcome that’s client-centric. Only by starting with the “Why?”, can we understand the clients’ needs, draw further context from it, and put ourselves in the place of our clients to create a better product experience.
How does this make us perform better as an engineering organisation?
Starting to build our product with this mindset helps us to achieve two things: autonomy, and a high degree of ownership.
At Upvest, teams are autonomous. They get to decide which task to prioritise and work on, considering the overall company objectives. After this, during the design phase, the teams discuss how they want to design a particular feature, and identify the stakeholders. Once all this is done, taking the product requirements into consideration, the leading team collaborates with the other engineering teams and builds the features, ensuring that the interfaces they develop serve the other teams well. We incorporate in this process one of our values, team first by making it easy for others. This self-organisation helps our engineering teams to deliver a high quality product, and to have an impact throughout and beyond the organisation. Since the teams decide what to prioritise and how to work on it, it allows them to cultivate a high degree of ownership.
A high degree of ownership is also an important factor in creating a high-performing engineering organisation, because not only does it increase the overall job satisfaction, but also it motivates the teams as they know that they have a direct impact on the product.
I’d like to give a concrete example of how we demonstrated these values when we were developing a new feature, which would enable our customers to collect fees from their end users. To deliver this functionality, multiple teams needed to work together. When we kicked off the project, during the domain discovery, in order to understand the new domain we challenged the product requirements by asking why our customers need this functionality, why we need this now, what needs to be done, which type of fees we need to collect, and what we need to focus on first. By doing so, we identified how to deliver value to our customers in the best way possible, rather than simply implementing a new feature with technical requirements handed down to us. After that, we mapped out the dependencies on domains that other teams are maintaining. We then aligned on the goals, the interfaces, and the timeline of the project and checked in regularly as we completed delivery of different milestones, each team owning their part fully and seeing it to completion diligently. This shared understanding and product-mindset among engineers enabled us to make the cross-team dependencies as seamless as possible, to extend the core functionality to accommodate further use-cases easily, and ultimately to deliver a great product experience to our customers at scale.
Product engineers don’t just deliver software. They go above and beyond and deliver a product that they deeply care about. In order to deliver a product of great quality, using with this mindset, they understand the complexities of the industry that they are working in. In line with another core value of ours, they continuously learn and grow, and become even better domain experts.
I hope this article helped to provide insights of what product engineering is like at Upvest as well as how we operate as an engineering organisation. If you want to read more on product-minded engineering, you can also take a look at Gergely Orosz’s excellent article on the topic.