My work at UnaBiz was a sharp departure 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 then.
In 2019, I joined UnaBiz as a Fullstack software engineer. My primary responsibilities involved working with NodeJS, some React, React Native, and AWS technologies, along with IoT and the Sigfox protocol.
Under the guidance of the CTO, I had to build from scratch a brand new project named UnaConnect: from defining the features in collaboration with a project manager, choosing the tech stack, setting up the development process, CI/CD, and designing the user interfaces. I was essentially building something entirely new (ok, there was a POC before that), and it wasn't long before I realized I needed help. That's when I took the first steps toward growing my own team.
In this article, I'll walk through some of the key lessons I learned during this journey.
Building a team
In late 2019, one of the key turning points was recognizing the importance of building a dedicated and skilled team. As a software engineer, I had initially believed I could handle everything on my own.
With time, you quickly realize that you need extra hands with specific skills that complement yours, whether that's technical skills, soft skills, or even a different 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 wasn't just about finding individuals with the right technical abilities but also those who shared the same passion and energy. I looked for team members who could bring fresh perspectives and challenge our existing ideas constructively.
Whether you're designing a user interface or a technical architecture, having a third-party point of view is always valuable, and this applies at every level. A junior developer's viewpoint can challenge a senior developer's approach, and that 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 cold-emailing numerous developers on 104.com.tw. The response rate was fairly low. I suspect one of the reasons was that my emails were primarily in English in a Chinese-speaking environment. Things improved significantly when we hired our first HR specialist to support me in the process, and later when we engaged headhunter companies.
I remember not knowing how to even kick off the interviews. After conducting a few, I naturally developed a checklist of points to cover. After dozens of interviews, cold emails, job offers that were declined, and conversations with candidates who replied fluently in English but struggled with spoken English, I finally succeeded in assembling the right 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 wasn't just about being a manager but also a collaborator.
Open and transparent communication was essential to ensure everyone was aligned and that ideas flowed freely. And for that, you need to create the time and the space.
Every Monday, we held 1-hour meetings to brainstorm, discuss task priorities, share progress, and address the challenges we were encountering. This collaborative atmosphere not only boosted creativity but also created a space for everyone to openly share their issues and any knowledge they had.
On top of that, we established a daily stand-up using tools like Geekbot. This allowed team members to share their progress and flag any issues from the day before, promoting ongoing collaboration and problem-solving. The best part: it was asynchronous. Everyone could submit theirs at any time before 12pm.
Navigating the Tech Landscape and People
As we went deeper into the UnaConnect project, I found myself constantly navigating the rapidly evolving technology landscape. It was essential to keep up with the latest developments, assess their relevance to our project, review our processes, and make informed decisions.
Continuous Learning
To lead effectively in tech, you have to be committed to continuous learning. Technologies evolve every day, so I encouraged my team to stay current with industry trends through what we called the Software Workshop Day. We dedicated one day a month to exploring any technology that could benefit our work.
Embracing new technologies and methodologies helped us stay ahead and ensured that everyone was aligned on the technology choices we made 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 was developing directly within the AWS console. Remarkably, we encountered no major issues during that time.
However, as new members joined the team and started working on the same codebase, it became clear that we needed to improve our development process. First, we introduced code peer reviews and separate environments.
After that, we implemented automated deployments to eliminate manual tasks and speed up releases. Step by step, we refined our processes and understood the reasoning behind each one.
The Art of Leadership
Becoming a tech leader required more than just technical knowledge and project management skills. It demanded an understanding of the human side of leadership.
Leading by Example
Leadership isn't only about assigning tasks; it's about setting an example.
I made sure that on a weekly basis, I engaged in technical work, whether it was architecting solutions, fixing bugs, or developing new features. This wasn't only because I enjoyed coding but also to ensure that our tasks, processes, and quality stayed aligned with our standards and tech stack.
Empathy and Support
Recognizing that team members faced their own challenges and had unique aspirations, I made a deliberate effort to cultivate empathy and offer support whenever needed. I understood that a healthy work-life balance was essential for long-term productivity and creativity. This approach helped maintain a motivated and loyal team.
To make sure everything stayed on track, I scheduled regular one-on-ones every two months to discuss each teammate's well-being, their workload, and anything else on their mind.
Taking responsibility for both our successes and failures was integral to how we operated. We held ourselves accountable for our decisions and actions, fostering trust within the team and with our stakeholders. We documented every incident we had and tried to extract a lesson from each one by sharing them with the rest of the team.
Conclusion
My journey from a Fullstack software engineer to a tech leader at UnaBiz has been a transformative one. It taught me that leadership isn't about having all the answers but about empowering a team to find those answers together, and that communication is probably the single most important factor. It's about continuous learning, adaptability, empathy, and resilience.
If you aspire to become a tech leader, remember that your journey will be full of 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 isn't 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 cover: how I handled performance reviews, how I managed my time, which tools I used, when to delegate, how to prioritize tasks across different projects and team members. Let me know if you'd like me to go deeper into any topic I mentioned in this article!