My journey into software development started with what felt like a dead end. I’d always dreamed of pursuing a science degree, but when I didn’t qualify for the program I wanted, I was heartbroken and filled with doubt. I remember asking myself, was this it for my dreams? For a while, I felt stuck, unsure of what direction to take next. But life has a funny way of surprising us. In hindsight, not getting into the science program was a blessing in disguise. It pushed me to explore a different path, and that’s how I found my way into the world of Information Technology. I enrolled in a Diploma in ICT (Software Development) at the Durban University of Technology (DUT), and it turned out to be one of the best decisions I’ve ever made.
When I first stepped into the ICT program, I was nervous, but also curious. At the time, I knew very little about the IT field beyond thinking that the hackers in movies looked really cool. I had no idea just how vast and diverse this space truly is. Technology today stretches far beyond writing code, it includes smart devices, machine learning, cloud computing, data, and so much more. I walked in uncertain but open-minded, ready to see what this new path had in store for me. Little did I know I was stepping into an adventure that would not only teach me how to code, but also open my eyes to an entire universe of opportunities in tech.
Broadening My Horizons at University
Studying at DUT gave me a solid foundation in software development, and so much more. In those years of lectures, labs, and group projects, I discovered that IT isn’t just about sitting in a corner and writing code. It’s a broad field with multiple career paths and roles that all work together to bring tech projects to life. With my diploma studies, I realized I could branch out into various roles beyond just being a programmer. Some of the roles and concepts I was exposed to during my studies included:
Business Analysis: I learned how to bridge business needs with technical solutions. This meant gathering requirements, analyzing processes, and making sure that what we build actually solves the right problems for users. A Business Analyst is like a translator between the client’s wishes and the development team’s work. I found this intriguing because it combines communication with problem-solving.
Project Management: I learned what it means to coordinate a team, manage timelines and resources, and guide a project from an idea to a finished product. This taught me that building great software isn’t just about coding, it also takes organization and leadership to pull everything together.
Quality Assurance (Software Testing): I discovered the art of ensuring software quality by actively trying to break what we built. In other words, we had to test our code thoroughly. I learned how to write test cases, debug issues, and use tools to find and fix bugs. This gave me a whole new appreciation for quality assurance. I realized that catching issues early and often! makes a huge difference in making software reliable and user-friendly.
Database Management: This is where I learned that every app, website, or system we interact with relies on well-structured data to function properly. I was exposed to designing databases, creating tables, defining relationships, and writing queries to store, retrieve, and manage information efficiently. It showed me that software isn’t just about what users see on the screen, but also about how data is organized, protected, and made available at the right time. Working with databases helped me understand how important accuracy, structure, and logic are in building reliable systems.
Learning by Doing at WeThinkCode
After earning my diploma, I was hungry for practical experience. I landed a spot in a software engineering program with WeThinkCode, a South African coding academy known for its dynamic, hands-on approach. The 16-month learnership at WeThinkCode was nothing short of exciting, it felt like stepping into a real tech workplace every day. This is where I finally got to put into practice all the theory I had learned at varsity, and then some.
At WeThinkCode, learning was entirely project-based and peer-driven. There were no traditional lectures; instead, we dove straight into coding real projects and solving problems alongside fellow aspiring developers. We worked in teams to take projects from start to finish, which meant I got involved in every step of the development life cycle. We’d start by analyzing the project requirements and brainstorming solutions. We would design the system architecture and break down features into user stories. Then we’d jump into implementation, writing code and debugging like crazy, and finally we’d test our work thoroughly before presenting it. We basically practiced the full Agile development cycle: writing up requirements, planning our sprints, daily stand-up meetings to sync up, sprint planning sessions, coding in pairs (pair programming), and even doing end-of-sprint retrospectives to talk about what we could improve next time.
One thing I loved about this environment was that it exposed me to so many aspects of working in tech. For example, we all took turns leading meetings or coordinating tasks, which is kind of like being a project lead or Scrum Master. We also had to be our own quality assurance testers, constantly reviewing each other’s code and trying to break our own builds to squash bugs. That gave me a much deeper respect for the QA field, because I saw how having a “test it until you break it” mindset leads to better software. It was eye-opening to realize how many different roles and skills come together in tech projects. It’s not just writing code; it’s also communication, planning, testing, and iterating. There are so many opportunities in IT, and this experience showed me a glimpse of all of them in action.
Of course, the learnership was challenging, probably one of the toughest things I’d done at that point. There were days when I’d hit a wall trying to debug a stubborn issue or wrap my head around a tricky algorithm. I lost count of how many times my code didn’t work on the first or fifth try. I had moments of doubt, wondering if I’d ever solve some problems. But you know what? All those bugs and errors were just building me up for the best feeling in the world: that moment when you finally yell out, “It’s working!” or “I fixed it!”. There is nothing quite like the rush of joy and relief when you see your program successfully run after a long struggle. Those little victories made all the frustration worth it, and they taught me an important lesson: every failure or bug is just a stepping stone in the learning process. With each tough challenge I overcame, my confidence grew a bit more.
By the end of my time at WeThinkCode, I truly felt “work-ready.” The academy’s approach of simulating a real work environment paid off immensely. I learned how to collaborate in a team, communicate my ideas, manage my time to meet deadlines, and quickly pick up new technologies as needed, all the real-world skills that matter on the job, beyond just writing code that works. In many ways, it was the perfect bridge between academic learning and the professional world. I walked out of there not just as someone who could code, but as someone who knew how to learn and adapt on the fly. And that has made a huge difference in my career.
From Learner to Leader: The Mentorship Chapter
Soon after completing my learnership, I stepped into a role I never imagined I’d be doing so early in my career, I became a Software Engineering Mentor for other aspiring developers. Transitioning from student to mentor was a profoundly rewarding experience, and it taught me just as much as any formal program could. I’ve always loved helping people, so in many ways this role felt natural. But it also pushed me to grow in new directions and step up my game.
As a mentor, I was responsible for guiding new students through their coding projects, reviewing their code, and helping them debug problems. Suddenly, I found myself on the other side of the table, no longer the mentee, but the mentor. And let me tell you, there’s truth to the saying “To teach is to learn twice.” Every time I explained a concept like object-oriented programming or walked someone through solving a tricky bug, my own understanding got deeper. I had to re-examine topics from the perspective of a beginner, which reinforced my fundamentals and sometimes revealed gaps in my own knowledge, which I then hustled to fill! In essence, mentoring solidified my foundation in software engineering while also keeping me on my toes.
Beyond the technical stuff, being a mentor massively improved my leadership and communication skills. I learned how to break down complex ideas into simpler terms, how to be patient and really listen, and how to give constructive feedback that encourages growth. I also discovered how to adapt my teaching style to different people’s needs. Some of my mentees were complete beginners starting from scratch, while others had industry experience and were just learning a new technology or chasing a certification. I couldn’t mentor everyone the exact same way, I had to meet each person where they were. I realized mentorship is a two-way street: while I was helping others grow, they were also teaching me new perspectives and reminding me of the value of lifelong learning.
One of the most fulfilling parts of this chapter was seeing my mentees achieve their goals, whether it was building their first web app or landing a new job in tech. Knowing I played a small part in their success was incredibly uplifting. It reinforced why I love the tech community so much: it’s a space where people constantly share knowledge and lift each other up. This period not only reaffirmed my passion for software development, but also ignited a passion for supporting and empowering others in their tech journeys. To this day, I carry that “mentor mindset” with me wherever I go, I remember to be patient, helpful, and eager to learn from those around me.
Thriving as a Full-Stack Developer in a Startup Environment
Today, I’m working as a Full-Stack Developer at Tati Software, a tech startup based in Johannesburg. At Tati, we build custom software solutions for clients, often using cutting-edge technologies and cloud platforms. Working at a startup has been an incredibly exciting step in my journey because there are tons of growth opportunities and I get to wear many hats. Our team is small and dynamic, which means I’m involved in all stages of our projects, from brainstorming all the way to deploying the finished product.
The culture at Tati is one of the things I love most. Since we have a small team, it really feels like a tight-knit family. We collaborate closely and no one gets left behind. If someone is stuck on a problem, the rest of the team jumps in to help out. We’re all about helping and uplifting each other. In fact, we have a strong growth culture, we regularly hold knowledge-sharing sessions where anyone can teach the team something new. It could be a cool tech trick, a new programming framework, or even just a life hack that might benefit everyone. These sessions keep us learning constantly and show that everyone’s voice matters. Another thing that makes Tati’s environment great is our leadership. The leaders and senior devs here lead by example; they encourage us to keep learning, to ask questions, and to share ideas. Having supportive mentors and managers at work makes a huge difference, it creates an atmosphere where we feel confident tackling challenges because we know we have backup if we need it.
As a full-stack developer in this environment, I find myself doing a bit of everything and I love it! On the backend side, I might be writing server-side code in Python to implement complex business logic, or setting up a RESTful API to allow our app to communicate with other services. On the frontend side, I could be building out the user interface of a web application using HTML, CSS, and JavaScript, making sure the site not only works well but also looks good and is easy to use. On any given day, I’m probably switching gears multiple times, one moment I’ll be designing a database schema or optimizing an SQL query, and the next I’ll be tweaking a button on the website to improve the user experience. Sometimes I even put on a DevOps hat, configuring our deployment pipeline or writing a Docker file to containerize an application. This variety keeps me on my toes and means I’m always learning something new. No two days are the same at a startup: one day I might play database architect, the next day I’m debugging a UI issue, and another day I’m deploying a feature to production. It’s the kind of environment where you’re constantly pushed out of your comfort zone (in a good way!), which is perfect for someone like me who thrives on continuous growth.
Over time, I’ve built up a versatile technical skill set that I tap into daily. I’m even getting involved in the DevOps side of our projects. I’m comfortable using cloud services (we frequently deploy on AWS, since Tati Software is actually an AWS Partner company). This aligns perfectly with my own interest in cloud computing, I’ve spent a lot of time learning about cloud architectures and tools, and it’s awesome to apply that knowledge in real projects.
Working at Tati Software has been phenomenal for my growth because it combines all these aspects of development in one role. Being at a startup also means that if I see a gap or an opportunity, whether it’s adopting a new technology, improving a process, or proposing a new feature, I’m encouraged to step up and lead the charge. That trust and flexibility has accelerated my development not just as an engineer, but as a well-rounded professional.
Perhaps most importantly, the environment at Tati keeps my passion for technology alive and growing. We’re always experimenting with innovative tech, for instance, we’ve dabbled in some AI-driven features in our apps, and we’re always exploring the latest cloud solutions to stay ahead. It’s exciting to be at a company that’s small enough to be agile but ambitious enough to tackle big, meaningful problems. Every day I’m reminded of why that closed door in my past led me here, because I genuinely love what I do now, and I’m surrounded by people who feel the same way.
Continuous Learning and Notable Achievements
If there’s one thing I know about the tech world, it’s that it never stands still, and that means we, as tech professionals, can’t stand still either. I’ve made it a point throughout my journey to keep seeking out new challenges, learning opportunities, and experiences that push me to grow. Along the way, I’ve been fortunate to have some pretty cool achievements and experiences that not only boosted my confidence, but also taught me valuable lessons.
One highlight for me was discovering hackathons. For anyone who isn’t familiar: a hackathon is like a marathon for tech creativity. You team up with a group of people to build a project or solve a problem using tech, all within a very short time (often just 24 to 48 hours). It’s intense, exhilarating, and incredibly educational. Hackathons force you to learn new skills on the fly, think outside the box, and collaborate closely with teammates under pressure. They also bring together a bunch of passionate, like-minded people, which makes them fantastic for networking. You never know who you’ll meet, maybe a future employer, business partner, or just a new friend who loves tech as much as you do. And even if you don’t “win” anything, you walk away with new knowledge, a cool project, and a whole lot of inspiration.
The first hackathon I ever attended was the GirlCode Hackathon, and it totally blew me away. It was a two-day all-female hackathon event held during Women’s Month, and it was one of the most empowering experiences I’ve had. There I was, surrounded by talented women from all over, each with their own unique skills and ideas, all coming together to build tech solutions. Our team worked tirelessly through those two days (with lots of coffee and not much sleep!) on a project to address a community issue. I remember how energizing it was to brainstorm with new people and see everyone’s creativity in action. I learned more in those two days than I thought possible, not just about coding, but about teamwork and believing in your ideas. The best part was the camaraderie; even though we were technically competing, everyone was super supportive and eager to help each other. That event opened my eyes to how inclusive and encouraging the tech community can be, and I left with new friends and a fired-up motivation to keep pushing myself.
Another memorable hackathon experience was the time my team and I participated in the KZN Annual InnovTech Expo Hackathon in 2022. This was a 12-hour sprint where we decided to tackle a really pressing issue: youth unemployment. In just one whirlwind day (and night) of coding and collaboration, we developed a prototype for a platform that could act as a self-assessment and career guidance tool for young people. The idea was to help users identify their skills and interests through a quiz, and then recommend potential career paths along with free online courses or resources to gain the skills they’d need. It was ambitious to say the least, but we poured our hearts into it. By the end of the hackathon, we were exhausted, I think I ran entirely on adrenaline and soda by the final presentation, but we were also incredibly proud of what we had built in such a short time. To our excitement, our project earned 2nd Place out of all the teams! Standing up on that stage to accept the award felt surreal. Winning was an amazing feeling, but even more valuable was what I learned during those 12 hours. It was proof of how much can be achieved with teamwork, creativity, and sheer determination under pressure. That hackathon also reinforced for me how technology, when used thoughtfully, can help solve real-world problems. It’s a lesson I carry with me into every project: always remember the why behind what you’re building.
In addition to hands-on projects like hackathons, I’m a big believer in continuous learning through more formal means. The tech industry evolves quickly, so I’ve found that pursuing certifications and structured learning is a great way to stay up-to-date and challenge myself. One area I focused on was cloud computing. Cloud technology is everywhere now, and I knew it would be important for me to have solid expertise there. So, I set my sights on Amazon Web Services (AWS) certifications. I started by studying for and earning the AWS Certified Cloud Practitioner credential, which gave me a strong foundation in AWS services and core cloud concepts. Excited by that success, I didn’t stop there, I tackled the AWS Certified Developer, Associate exam next, which took me deeper into how to actually build and deploy applications on AWS. And then, for the ultimate challenge, I went for the AWS Certified Solutions Architect, Professional certification. (For those outside the cloud world, that’s a pretty advanced and rigorous cert, the kind that requires a lot of preparation.) I won’t lie, preparing for these exams was tough. There were many late nights where I was watching online lectures, taking notes, and doing practice tests. At times I wondered if I was ready, especially for that professional-level exam which felt almost like an academic marathon. But passing it was one of my proudest moments. These certifications have significantly strengthened my understanding of cloud architecture and best practices, and I apply that knowledge directly when we design scalable, resilient systems at work. Beyond the technical knowledge, going through the process of getting certified taught me that with consistent effort and a willingness to learn, I could accomplish things that once seemed out of reach.
Between the hackathons and the certifications, and many smaller milestones in between, I’ve learned to celebrate progress in all its forms. Every new programming framework I master, every successful project delivery at work, every tricky bug I finally squash after hours of debugging, and every time I see someone I mentored succeed, these are all wins that fuel my passion for tech. Each achievement, big or small, boosts my confidence a little more, but also keeps me humble. In the world of technology, there’s always something new to learn or a way to improve. Instead of feeling overwhelmed by that, I find it exciting. It means the journey is never over, there’s always another “open door” of knowledge waiting just around the corner.
Advice for Aspiring Developers and Career Changers
Reflecting on my journey, with all its unexpected twists, challenges overcome, and lessons learned, I’d like to share a few pieces of advice for anyone considering a similar path in technology, especially if you’re just starting out or coming into IT from a different background:
Embrace the Unexpected: Sometimes the path you think you want doesn’t work out, and that’s okay. In my case, a setback in one field led me to discover my passion in another. If one door closes, be willing to look for the one that’s opening. Your journey might not be linear, but it’s uniquely yours. Some of the best opportunities arise when you step outside your comfort zone or take a chance on something new. Don’t be afraid of change, it might lead you to your true calling.
Cultivate a Learning Mindset: The tech world is always evolving, new languages, frameworks, and tools pop up all the time. As a developer (or any tech professional), your learning truly never ends, and that’s a good thing. Embrace it! Dive into online courses, read books or blogs, build small side projects, or pursue certifications, whatever helps you learn best. Don’t be discouraged if things seem hard at first. Remember the quote from Nelson Mandela: “It always seems impossible until it’s done.” What feels impossible to grasp today (whether it’s your first programming language or a complex concept) will eventually click if you keep at it. The key is to stay curious and keep practicing. Every expert was once a beginner.
Build a Strong Foundation: Focus on mastering the fundamentals of programming and computer science, because they will serve you throughout your career no matter what new tech comes along. Learn about data structures, algorithms, and writing clean, readable code. These might sound like buzzwords now, but understanding them will make you a better problem solver. Also, get comfortable with essential tools and workflows, for example, learn version control (like Git) and how to collaborate on code with others. These basics are super important in almost any tech job. Trends and hot frameworks will change, but a solid foundation will make it easier for you to adapt to anything new that comes your way.
Find Mentors and Be a Mentor: You don’t have to do it all alone. Finding a mentor can greatly accelerate your learning, it could be a teacher, a senior colleague, or even someone online who’s willing to guide you. I was lucky to have mentors who gave me priceless advice and feedback. Don’t be shy to ask questions and seek guidance; most people in tech are happy to help because we’ve all been beginners at some point. On the flip side, when you have the chance, be a mentor to someone else. Helping others learn not only feels great, but it also reinforces your own knowledge and hones your communication skills. Plus, you’ll be contributing to a culture of knowledge-sharing. The tech community thrives when we lift each other up, so be a part of that when you can.
Embrace Challenges and Learn from Failure: It’s important to know that struggling sometimes is normal in this field. You will encounter bugs that take days to fix, concepts that seem mind-boggling, or projects that don’t go as planned. I’ve hit my fair share of roadblocks and made plenty of mistakes (and broken things!). But every challenge is really a learning opportunity in disguise. When you push through a tough problem, you not only solve that one issue, you also gain confidence and resilience that make the next challenge easier. So don’t fear failure. Instead, use it as fuel to improve. In the coding world there’s a saying: “Fail fast, learn faster.” The quicker you encounter and embrace those failures, the faster you’ll grow and the better you’ll get at troubleshooting. Remember, every developer you admire has struggled and failed many times, that’s how they got good.
Stay Open to Different Roles: The tech industry is huge and always expanding. You might start out thinking you’ll be a software developer, but along the way you could discover that your passion or strengths lie in a related area. Maybe you find you love interacting with clients and end up leaning into business analysis, or you have a knack for organization and transition into project management. Perhaps you’ll fall in love with cybersecurity, data science, or UX/UI design. Or who knows, you might discover an interest in artificial intelligence and machine learning, in data engineering or data analysis, or even in building hardware and smart IoT devices. Don’t feel like you must fit into one box. Early in your career, it’s great to experiment and explore different paths if you can. Your unique combination of skills and interests will shape a role that’s perfect for you. My journey, for instance, took me through pure development, then into mentorship, and even involved some project management tasks. Each role taught me something new and made me a better, more versatile professional. Tech needs all kinds of people, find the niche that fits you.
Keep the Passion (and Take Care of Yourself): Last but not least, remember to enjoy the journey. A career in tech can be extremely rewarding, you get to create things, solve puzzles, and potentially impact thousands of people with your solutions. Keep that sense of wonder and excitement alive. Celebrate your successes, no matter how small, and nerd out on the things that interest you. At the same time, be mindful of balance. It’s easy to burn out if you try to learn everything all at once or work nonstop. Take breaks, maintain hobbies outside of tech, and don’t compare your progress too harshly with others’. Everyone’s journey is different. As long as you’re consistently growing your skills and doing work that feels meaningful to you, you’re on the right track. Stay curious, stay passionate, but also stay healthy.
Remember: the path that scares you a little might be the one that helps you grow the most.