My work at UnaBiz was quite a different start from my previous roles, where I mainly worked with Unity3D and C# for developing AR/VR applications, and before that, GUI development using Qt/C++. My tech stack had completely shifted since that.
In 2019, I joined UnaBiz as a Fullstack software engineer. My primary responsibilities were to work with NodeJS, some React, React native, AWS technologies along with IoT and the technology Sigfox.
Under the guidance of the CTO, I had to start from scratch a brand new project named UnaConnect : from writing the features in collaboration with a project manager, and the tech stacks to the development process, CI/CD and user interfaces. I was essentially building something entirely new (ok, there was a POC before that), and it wasn’t long before I realized that I needed help. That’s when I took the first steps toward growing my own team.
In this article, I will go through some key points I learnt during this journey.
Building a team
In late 2019, one of the key turning points in my journey was recognizing the importance of building a dedicated and skill team. As a software engineer with my own background, I had initially believed that I could handle everything on my own.
With time, you quickly realize that you need extra hands with specific skills that complement you, either technical skills, soft skills or even mindset.
Empowerment Through Hiring
To build a team that could complement my skills and contribute effectively to the project, I had to start hiring. This process was not just about finding individuals with the right technical skills but also those who shared the same passion and energy. I looked for team members who could bring fresh perspectives to the table and challenge our existing ideas constructively.
When designing an application either a user interface or a technical architecture, having a third party point of view is always interesting, and this can be at any level, for example, a junior developer's viewpoint can challenge a senior developer's approach, and this dynamic can lead to innovative solutions.
Finding the Individuals: Where to start?
Over four years, I conducted a total of 57 interviews to hire various Software Engineers, including Frontend Engineers, Backend Engineers, DevOps Engineers, and UI/UX Designers.
In the early days when we didn't have an HR specialist, I remember that I cold-emailed numerous developers on 104.com.tw. The response rate was fairly low, I suppose one of the reason was that my emails being primarily in English in a Chinese-speaking environment. Things took a turn for the better when we hired our first HR specialist who could support me in the process and later when we engaged headhunter companies.
I remember not knowing how to kickstart the interviews. After conducting a few, I naturally developed a bullet list to remember what I needed to cover. After numerous interviews, cold emails, job offers sent but denied, and interviews with people who replied to emails in English but struggled with spoken English, I finally succeeded in assembling the perfect team. To those team members, I thank you again —you know who you are!
Fostering collaboration
Once the team was in place, I realized that successful leadership was not just about being a manager but also a collaborator.
Open and transparent communication was essential to ensure that everyone was on the same page and that ideas flowed freely. And for that, you need to make a time and space!
Every Mondays, we held 1-hour meetings to brainstorm, discuss about task priorities, share progress, and discuss challenges that we encounter. This collaborative atmosphere not only boosted creativity but created a space for everybody to discuss freely about their issues and share any knowledge they had.
In addition to this, we established a daily stand-up using tools like Geekbot. This allowed team members to share their progress and discuss any issues encountered the day before, promoting ongoing collaboration and problem-solving. The good part is that, it is asynchronous, they could do it at any time, before 12pm.
Navigating the Tech Landscape and People
As we delved deeper into the UnaConnect project, I found myself constantly navigating through the rapidly evolving landscape of technology. It was essential to keep up with the latest developments, assess their relevance to our project, review the processes and make informed decisions.
Continuous Learning
To lead effectively in the tech world, one must be committed to continuous learning. Technologies evolved everyday, so I encouraged my team to stay updated with industry trends through what we called, the Software Workshop Day. We used to spare 1 day a month to deep dive any technologies that could benefit us in our work.
Embracing new technologies and methodologies helped us stay ahead of the curve and make sure that everybody were aligned on the technologies choices that we do as a team.
From Pushing to Production to a Refined Process
I remember the days when I was the only developer, reviewing my own code and often deploying it to the production environment right after. In fact, I developed directly within the AWS console. Remarkably, we encountered no major issues during that time.
However, by integrating new members to the team, working on the same code source, it became evident that we needed to enhance our development process. At first, we added code peer reviews, and different environments.
Following that, we implemented automated deployment to eliminate manual tasks and expedite releases fast and automatically. Step by step, we improved our processes and understood every reason behind a process.
The Art of Leadership
Becoming a tech leader entailed more than just technical knowledge and project management skills. It required an understanding of the human side of leadership.
Leading by Example
Leadership is not only about dictating tasks; it's about setting an example.
I ensured that, on a weekly basis, I engaged in technical tasks from architecting, bug fixing or developing a new feature. This was not only because I enjoyed coding but also to ensure that our tasks, processes, and quality aligned with our mindset and tech stack.
Empathy and Support
Recognizing that team members faced their own challenges and had unique aspirations, I cultivated empathy and offered support whenever needed. I acknowledged that a healthy work-life balance was essential for long-term productivity and creativity. This approach helped to keep a motivated and loyal team.
In order to make sure that everything is on track, I planned regular 1 to 1, every 2 months to discuss about my teammate well-being, their workloads, etc.
Moreover, taking responsibility for both our successes and failures was integral to leadership. We held ourselves accountable for our decisions and actions, fostering trust within the team and with our stakeholders. We documented all the incidents we had and tried to get a lesson from each of them by sharing them to the other team members.
Conclusion
My journey from a Fullstack software engineer to a tech leader at UnaBiz has been a transformative one. It taught me that leadership is not about having all the answers but about empowering a team to find those answers together, and also that communication is maybe the top 1 factor. It's about continuous learning, adaptability, empathy, and resilience.
If you aspire to become a tech leader, remember that your journey will be replete with challenges and opportunities for growth. Embrace the challenges, lead with passion, and surround yourself with a talented and dedicated team.
Ultimately, becoming a tech leader is not just about writing impeccable code or earning a prestigious title; it's about the invaluable lessons learned along the way.
There are so many other topics I wanted to talk about like how did I do the performance reviews, how I manage my time, with what tools, when to delegate, how to prioritize tasks among different projets and team members. Let me know if you want me to deep dive a topic I mentioned in this article !