It's been a long time since I started working at Karumi. Actually, one year and a few months :) During this period the most frequent question I have had is: "How do you guys work at Karumi and with the teams and the companies you collaborate with?" In this blog I will explain the development workflow we follow and how we do our day to day work.
Karumi is an intentionally small software development studio. The quality of the software from the code and the product point of view is something mandatory, not a “nice to have”. We work for third party companies helping them to develop software or training their engineering teams. Right now the technical Karumi team is composed of five engineers:
- - Alberto Gragera: Technical director and co-founder.
- - Davide Mendolia: Senior full stack engineer and co-founder.
- - Jorge Barroso: Android Google developer expert and co-founder.
- - Sergio Gutiérrez: Senior Mobile Engineer.
- - Pedro Gómez: Senior Mobile Engineer.
This small team is one of our secrets where every engineer is completely autonomous and the quality of code and product is the best we can offer. Being an agile team the number of meetings we need to coordinate ourselves is kept to a minimum. Cooperating to develop awesome software and help the team to be better everyday, is our philosophy. Each of us knows the objective is to collaborate in creating great software and not personal goals.
But, what kind of services do Karumi provide? We can classify most of the collaborations into these groups:
- - Develop third party software.
- - Collaborate with third party companies to develop software.
- - Engineering teams training.
- - Audit software.
In my humble opinion the most interesting collaboration is the second one. When a third party company hires us to be part of the engineering team. The goal is to develop software and at the same time contribute to the team culture and knowledge. During this period we spend some time training the company engineers and some time developing the company's software with those same engineers. Some topics we always review with the engineering teams are:
- - Version Control Systems usage: branching methodology, commits messages and content, tags usage, release processes from the VCS point of view, etc.
- - Continuous Integration and Continuous Delivery: we explain the value of these methodologies to the engineering team to implant any CI and CD system on top of their project.
- - Code Review systems: check the pull request system the team is using and whether the code review process is focused on the correct topics or not.
- - Software Design: review the project architecture in order to identify the main problems. We try to schedule some training sessions to practice topics related with architecture and design patterns.
- - Automated/Manual Testing strategies: review part of the quality assurance strategy and schedule some training sessions related with automated testing and testing strategies.
- - Software development methodology from the organization point of view: review if the company is using agile methodologies, trying to identify the problems to propose solutions and improve the team performance.
We love being part of a team helping developers to achieve their milestones and ship quality software. If needed we try to improve the team skills by sharing our knowledge with all the developers in different coding dojos or training lessons.
In some cases the companies that hire us have no team of their own. Our job as engineers is to extract the software requirements to identify the main goals and estimate the development time. We offer alternatives if the scope of the software to develop to exceeds the time constraints. The goal is to ship fully functional versions as soon as possible in order to get early client feedback.
Some clients have an engineering team, maintaining software and do not need a helping hand. In this case, clients contact us to prepare some training lessons to cover specific concepts like testing, design patterns, architecture, the VCS usage, etc. We work with the team for a few days trying to improve the developers knowledge of the required topics.
In some cases our role is to audit already developed software checking if the business requirements are implemented or the quality meets demands. We spend days reviewing the software from different points of view covering the topics such as those found on this check list. This helps us to inspect the software as a CSI team to find the most important issues. The output is a document where each part of the software has been analyzed and for every problem we offer a solution.
These are our daily tasks, but we are also part of the open source community and have to maintain all the projects we have open sourced. You can find our GitHub profile at http://www.github.com/Karumi. We give talks as part of our outreach tasks and it is quite common to see any of us giving a talk at events. During the first five months of this year we have participated as speakers at more than twenty different events in different countries.
After explaining what we are doing with the companies where we work and how we work at Karumi some developers ask me: "How the hell do you manage all that?" I think the answer is easy. All members of the Karumi team love their job, profession and the team. We respect each other personally and professionally. We enjoy facing new challenges and working together. We create software as a team and collaborate to improve as engineers everyday, sharing our knowledge with other developers when possible.
This summarizes how we work at Karumi and how we collaborate with companies. If you have any questions feel free to put a comment or send an email to: hello at karumi dot com