My studies are quite theoretical. I'm enrolled in the Master of Engineering (Computer Science) at the KU Leuven which focuses on the underlying abstract concepts and fundamental theories of computer science. I have a passion for this type of theoretical knowledge but sometimes miss the practical experience. That is why I decided to take up an internship at Panenco. The hands-on, no-nonsense, product-oriented company culture was something that fascinated me from the very beginning.
Software engineering internship
In the summer of 2021, I joined Panenco for a software engineering internship of six weeks. I worked as a back-end engineer on Valcori, one of Panenco’s latest products. Valcori is a web platform that facilitates the procurement process and eases collaboration between buyers and suppliers. During these six weeks I gained tons of practical experience: I learned how to develop scalable REST-APIs and gained insights about the inner workings of a successful software company. Most importantly, I was able to see the whole product development process unfold within the team from the initial requirements analysis towards delivery, underpinned by a smooth and highly effective operating model.
The internship started with a training phase: I received a crash course “Procurement Industry for Dummies”, learned about the different software technologies Panenco uses and immersed myself into the product. Even though I was still getting up to speed, getting to know Panenco and all devops, I thoroughly enjoyed being part of the product team from day one. Daily stand-ups and dev-syncs became immediately part of my duties, which made it even more motivating to start contributing to the actual product. I felt like and was seen as a true back-end engineer.
After the introduction and training, I worked on implementing three major features: a LegalEntity-, a Chat- and an Invite-feature. These three features gradually increased in complexity and all had their own unique challenges and opportunities. Implementing a feature always consisted of four phases: functional analysis, design, implementation and testing.In the first phase, I had to analyze the feature and find answers to questions like “What functionality is exactly needed?” or “By whom will this functionality be used?”.
In the second phase, I had to design the feature. This is done by sketching a database schema and defining the API-endpoints as well as the Body and View of each endpoint (more on this terminology later). The third and fourth phase consisted of coding the design and testing the functionality in an elaborate test suite respectively.
For the first feature, the functional analysis phase and the design phase were done together with my mentor Dries Croons, one of Panenco's seasoned back-end engineers. We jointly analyzed the feature and sketched a beautiful database schema with entities, their properties, and relationships between them on a large whiteboard. I remember Dries his contagious enthusiasm and passion for Valcori, making it even more fun and motivating to work on the platform. During the implementation and testing phase, Dries really pushed me to work as autonomously as possible. He answered whenever I had a question, but really wanted me to learn to get stuck on practical problems and solve them autonomously.
For every new feature, Dries gradually increased the level of autonomy. It was like learning how to ride a bike. At first, with training wheels, Dries guided me in the right direction and helped me during brainstorm sessions. At the end, I worked on the first two phases completely on my own and pitched my findings during a dev-sync, on which Dries whole heartedly gave me a green light to start the implementation. I had learned to ride my bike! I'm still wearing a helmet though😉.
The approach Panenco takes to back-end development is unlike anything I have ever seen. Having gained experience from a vast and diverse portfolio, the company’s software engineers came together on one faithful day to write the Two Commandments of back-end software engineering:
- “Thou shall decouple your business logic from input/output”: Panenco uses what they call a Body and a View to strip incoming requests and outgoing responses. A Body strips everything from the request-body that is not needed for the business logic. A View removes everything from the response-body that the front-end side is not allowed to see. This way the business logic is only concerned with the appropriate CRUD-operations and does not need to worry about input or output. In other words, the business logic is completely decoupled from input and output.
- “Thou shall have routes that are clear in a blink of an eye”: The code for API-endpoints can get quite complex and unclear. That’s why the engineers came up with an approach to structure this code, in essence making the code more extensible and maintainable.
To immortalize this approach, the engineering team developed their own REST-API framework called Papi. Working with Papi has taught me how to build large and scalable REST-API’s. It's impressive to see how this approach speeds up qualitative development of all the products, making business logic easier to write, maintain and expand.If you have an itch after reading this blog, an itch for working as a back-end software engineer, an itch for learning new technologies and mindsets, an itch that desperately needs scratching... then do not hesitate to contact me via Linkedin or check out our Panenco Academy!