Joseph Tafese, a fourth-year Software Engineering student, shares the various software development jobs he has done for his co-op, and how his coding has progressed through his co-op experiences!
For Joseph’s very first co-op, he worked at a technology company in Winnipeg, Manitoba called Web Wizards Inc. as a Lead IOS Engineer. He spent his time there working on developing an entire app, from start to finish. “In the first [co-op], it was about agency and responsibility," says Joseph. "It was such a big role for a first-time thing, because the company really needed someone to build an entire app from end to end, with so many specifications, and I knew nothing about professional software development. So, I did the best I could, I wouldn’t use that code if I was me now, because there are so many things I can improve, but I honestly did the best I could and that was all I could do.”
Going into his second co-op, he worked at Vidyard, a technology company in Kitchener, Ontario. Here, he worked as a Growth Engineer. This role was a mix of marketing, product and engineering. His main goal here was to boost the growth of a new product the company had at the time, called “Vidyard Go Video”, a Google Chrome extension. He had to come up with a way to convince users to start utilizing the premium features. He also worked a lot with experimenting and statistics, where he would brainstorm various product ideas, build the idea and then test it to ultimately see if the product would make a visible difference for the company or not.
Moving forward, Joseph completed both his third and fourth co-ops at Wawanesa Insurance, an insurance company located in Winnipeg, as an Application Developer. Here, he worked on what they called “operational excellence”. Basically, he was responsible for eliminating all the process inefficiencies happening within the company.
He would approach employees, ask them about any troubles they may be having with a project, and would see how he can make their lives easier and save them the most time. For example, employees were required to manually test any operational changes made.
For his fifth co-op term, he worked at a software company in Waterloo, Ontario called Axonify, as a Java Developer. At this point, Joseph had a better grasp of working in the software development area and was much more confident in his abilities. In this position, he worked behind the scenes of the company’s server, more specifically, in back-end development, making sure that a great user experience was being delivered through the company's product.
“We were looking at what it meant to be a mature engineer and what it meant to take responsibility for the code. So, it’s the complete opposite of what I was doing in my first co-op term, where I was like, I just got to get code out. Now, it was like how can we show that the code is actually quality?”
Currently, Joseph is working for the University of Waterloo as a Automated Software Verification Research Assistant. For this role, he has been spending his time working on a research project in software. In this project, he is working a lot with code, as well as being introduced to a brand-new domain that he has never used before.
“I’ve picked up all these different skills about working with people and asking for help, and sort of approaching it from a perspective where I’m like, I want to build the best code I can! Obviously, I’m more capable now than I was four years ago.”
What has been the most rewarding thing about co-op?
“In my case, the most rewarding has been the most challenging, and that is the pursuit of writing clean code or better code. I enjoy working with people and I enjoy helping in that sense, but in this particular co-op experience, one thing I realized is that writing code that’s good and makes sense is a win-win. Because the computer understands it but the people around me also understand it, and it's one of the markers of a mature engineer. The same way a mature speaker will be able to communicate their ideas in almost any language that comes across. They could be using gestures, and you still understand what they’re trying to say, and they don’t have to use big words, but if the audience requires it they can use all of the big words they can, and stream them together in a way that’s almost poetic, and they can explain the same thing to a young child and make sure that they understand it at their own level.”
“That’s the kind of engineer I want to be, the kind that can communicate the orders to the computer but also have a human being who understands code to be able to make sense of that and go “oh yeah, okay that makes sense”, and that’s really it [...]. The best engineers struggle with this, but they’re definitely better than I am, and that’s one of the things that’s challenging but also extremely rewarding, is moving in that journey and just getting better.”
How did you find the co-op application process for software jobs? Do you have any advice for people interested in working in the software engineering industry?
“If you have a decent résumé and you can back it up, that’s usually all you need. So what I mean by that is, if you say for example that you know a programming language like Java, and you have a few projects that say that you’ve used Java, and then you go to the interview (if you’re lucky enough to get an interview) and they ask you a question to be solved in the programming language called Java, and you can’t back it up, then that’s not really a good sign. So that’s what I mean by backing up what’s on your résumé, so that you can put it on and then have the skills to back it up, and you can develop those skills in so many different ways. I don’t think coursework is enough. Instead, try starting up a project on your own or try to do what another project does without looking at their code.”
“Sometimes people have a round of ideas of what they should build, and so then you could be like “okay, how does Facebook Messenger work?”, and then you could try to build Facebook Messenger using the programming languages that you have available to you. It’s not going to be as good as Facebook’s, at least I don’t think so, but you learn so much along the journey of building something, and then you can put it up on your resume saying “I built something like Facebook Messenger that does everything that Facebook Messenger does, except for sending stickers or sending GIFs.” That’s a pretty good project to have, you learn so much along that journey and it’s not an easy thing to do.”
What is the most important thing your software development positions have taught you and that you still apply to your work today?
“Realizing that the code I write is not only for the computer to understand, it's also for the people around me to be able to critique and use and improve. When I was working in those jobs, it's hard to know exactly what kind of balance you have to strike between all of these different things. It’s just a lot, it’s overwhelming, but I think that’s one of the most important things is that if the people around you can understand it, at least they will be able to go “oh, I think this doesn’t do what you think it does” or “this code is wrong.” As annoying as it is to be told that your code is wrong, it’s actually better than someone not finding that problem, and then down the road it causes a bigger issue. That’s the biggest thing, prioritizing people around you, understanding what the code is doing and receiving that correction when it’s due.”
What’s next for Joseph?
At the moment, Joseph is on a work term and finishing up his final co-op. “I’m trying to build the best company in the world! I think that’s a really fascinating goal. When it comes to what’s going to happen next year, I’m enrolled as a master's student, and so I’m pursuing a Master's in Applied Sciences and working on more of what I’m doing right now with my research job. Hopefully these things line up to contributing to something much bigger, I think that’s what we’re all trying to do at the end of the day.”