This time we had an opportunity to talk to Bojan, a tech lead at Codemind, responsible for application design and code cleanliness.
Can you introduce yourself and say a bit about what you’ve been working on at Codemind?
Hi folks! I’m Bojan, a full stack web developer at Codemind that lives and breathes web apps. Before my time at Codemind I’ve worked in a couple of web development consultancies, battling it out with servers. Before my career days, I’ve studied Applied Computer Science at the local university and was working on and off on a couple of projects.
Besides jousting with servers and browsers, I really enjoy the freedom of cycling on unknown paths, hiking around my hometown’s beautiful hills or just hanging out with my girlfriend exploring nature. To be perfectly honest, my favourite thing to do in ‘the Bojan time’ is to play games, which is what first got me interested in computers and code.
I’m also a music enthusiast and plan on building a huge record collection. I got my first record player fixed a few months back but sadly haven’t found the time to start building the right collection yet. For now, I only own a couple of records, but I’m hoping to add more soon. Until then I have to rely on Spotify for my musical needs.
When you come to my home you’ll notice that I have a really fat cat named “Pucs”, that keeps waking me and my girlfriend every single night. Love her, but there are days when the code suffers from too much cat love.
Let’s go back to my professional work. I’m currently working in parallel on a couple of projects at Codemind. One of them being a hybrid social network, and the other one an application for a chain of high-end hotels, developing both the web and the mobile app at the same time. Recently we started working on a new application for fast shop deliveries, with me as a technical lead.
What is your main passion behind building software? What motivates you to build great products?
I first fell in love with programming in high school, as a wee lad when I typed my first line of code. I just remember sitting in front of that CRT monitor and an overused keyboard, writing my first line of code from the school books. That first line of code was written in C, using “Turbo C” IDE. The first program I made had a simple task of calculating the area of a rectangle.
I remember that moment very well, and I guess many of my colleagues remember the moment they were intoxicated with programming as vividly as I do.
I’ve been passionate about building software ever since.
The first complete app I made was for my final paper in high school, and it was a Windows desktop app for creating and printing invoices, that even had some kind of a primitive database. I used “C++ Builder” IDE for the development. “C++Builder combines the Visual Component Library and IDE written in Delphi with a C++ compiler.” – from the Wikipedia article
There is nothing more satisfying than working hard on solving a complex problem, and then seeing it finally work. Knowing that there is always room for improvement, is what drives me to better myself and my code.
What technologies do you use the most? Any favourites?
Currently, I am based around Java Spring Boot as a backend technology and AngularJS on the front, which are my favourite technologies at the moment. We’ll see what my future self will say. :)
Any technologies you would like to try in the future?
First game I’d like to make is a card game that I have been discussing with my cousin for some time. We have defined the lore and gameplay, even some artwork has been done, but we never actually started working on it.
What does your product design and development workflow at Codemind look like?
We are working on client projects at the moment, so the first step we have in our pipeline is to create a valid specification with our clients. We then give suggestions based on that specification, while taking time constraints into consideration. While specifications are taking shape, project manager and technical lead start forming the product backlog.
After the specification is finalized, and product backlog has taken shape, the next step is the database modeling. We try to include the whole team in the process in this step, as it turned out to be the best way to find flaws that might come up and the best way to design a product.
The final step is the development itself. Here we encourage teams to give their own collective and individual opinions on the possible ways to improve the product as a whole.
During the development, we try to organize weekly demos for our clients, so they can give immediate feedback on what has been implemented, which in turn keeps them involved in the process. Our project management tool of choice is Vivify Scrum. Each of our clients is added to the platform, so they can leave comments and suggestions, as well as have full insight into our workflow.
At the end of each sprint, we organize sprint reviews, where developers present the work they have done. After that, we give the team a chance to go through user stories that should be implemented in the next sprint. Next step is sprint planning, where we give estimations and discuss any uncertainties and questions that might arise.
While we do some basic testing during development, as it is nearing completion we start writing test cases (having properly written acceptance criteria can really speed up the process here). When this document is completed, the testing sessions start. After each feature is tested, a session report is created, so our developers can easily reproduce and fix any bugs that are found. We also share the document with our clients so they are informed on which features have been tested, at all times.
Any important lessons you have learned from Codemind’s workflow you can share with our readers?
While designing and developing software always think about features that may be implemented in the future, as it can save you a lot of trouble when the time comes.
Another important lesson is to always try and include the whole team in as much of the workflow as possible. It will get them more involved, and make them think of it more as their own personal project.
A quote I had encountered recently that has left a great impact on me is: “It is not enough for the code to work.” ― Robert C. Martin
What methodologies do you and your team use?
We are using Scrum as a basic guideline while trying to adapt it to the needs of the team. This process is ongoing because every day we learn so many new things.
Is there a technological challenge that you’re currently struggling with?
No, not for the time being.
Could you tell us how you use Sifu and what’s your typical workflow when it comes to Sifu?
Sifu is a part of our product development from the very start, as it makes a great database modelling tool. Since the model definition is easily readable, it can also serve as a summary. Our project managers use it to write acceptance criteria, as well as to detect anything that needs to be changed.
After that, we jump straight into development. Sifu makes it possible to focus on improving the business logic of the application and not to tire ourselves with repetitive tasks, like writing DTO’s or simple repository methods. Even tedious tasks like expanding the database model are done in just a few very simple lines of pseudocode. Simple API endpoints like simple data fetching are done in a matter of minutes.
All the things that annoy us on the frontend, like setting up new pages or forms, tables, creating services for communication with backend are done with Sifu. With comments getting generated with request/response object descriptions (along with data types) for every API call, blunders like typos in parameter definitions are a thing of the past for us. Gosh, this sounds like one of those obnoxious tv-ads, but it’s 100% true, Sifu changed our developer lives for the better.
All of the above mentioned allows us to concentrate on perfecting our applications, work on improving our code and research exciting new things to implement, rather than doing the grunt work, which in term keeps our clients more than satisfied.
Could you share your biggest realization about programming you had recently?
No matter how much you think you know, you can always learn more. The important thing is to keep an open mind, and never stop finding new ways to improve as a developer.
And lastly, can you share some influential blogs, books or videos with us?
I recently attended a conference called Voxxed Days Belgrade, and I would like to share two talks that left the most impact on me. One is about web application security: Harness the power of HTTP headers to secure your web apps - Daniel Gartmann. The other one is about clean code: The Art of Clean Code - Victor Rentea. The speaker also recommends a book, he likes to call the bible, called “Clean code” by Robert C. Martin. I would like to add that Victor is one of the best speakers whose talk I had the pleasure to attend.