A Blessing and a Curse

It’s a Wednesday night, sometime around when I should go to bed and instead I’m up writing. It’s been a while since I’ve posted here, or written much in general, but I feel like this deserves some time.

Tonight I want to talk about Waterloo co-op (cliché, I know). We always talk about how amazing it is, and it is amazing, but at the same time there is another side to it. A side that we don’t always talk about, but that I think anyone who is thinking of going into a co-op program should think about. This isn’t a rant against co-op, against Waterloo, or even a rant at all, just some of the things I’ve been thinking about over the past year.

I thought about a lot of names for this blog post, but I decided on the eventual title “A Blessing and a Curse”, because I think that sums up the Waterloo co-op experience. We are so lucky here at Waterloo to have access to co-op. I’m currently finishing up my fifth work term, 3rd in the United States, while most people from my high school are working retail jobs to help pay their way through school. Many students in co-op have no debt, pay their own tuition, and actually have disposable income as they go through an engineering degree. This is on top of the fact that a majority of us will graduate with 2 years of work experience. However, as I’ve hinted at, there are downsides to this.

Most schools operate on a simple formula. This involves going to school for 2 consecutive terms (in the states, this can be 3 shorter quarters) in the fall and winter, while having a summer off. You move all your stuff into your apartment/house in September, go home at Christmas, come back in January and move it all out at the end of April.

At Waterloo, things operate a little bit differently. I’m going to use my program, Software Engineering, as a template, but essentially most co-op programs follow a similar mold. In first year you go to school for 8 months, from September to the end of April with Christmas break separating the terms as usual. However, then co-op begins and every 4 months you alternate between doing an internship (or co-op placement, same thing, different name) and going to school. This happens year-round with a small break in-between each term. This break can vary from as small as a few days (a day in some extreme cases), to a couple weeks (Christmas 2014).

So why am I bringing all this up? This is common knowledge to anyone at Waterloo and is fairly normal for any co-op student, but outside of the school it’s almost unheard of. This on-off scheduling is a lot and by a lot I mean it’s a truly a grind.

Since starting at Waterloo, I’ve done all but one of my internships away from Waterloo. This means every 4 months I’ve had to pack up my life, move it back home, re-pack, and then either move it back to Waterloo or to wherever I’m working for the next 4 months. I’ve always had some help from my parents, but it is a lot of work. You don’t realize how much work is involved in moving to a new place, making sure you have everything you need (you will always forget something incredibly important), and getting settled.

Four months may seem like a long time from a distance, but when you are in the middle of it, it will just fly by. By the time you are back at school, you are neck deep in a work-term report, interviews, midterms and then finals seem to just come out of nowhere. It’s stressful, and I mean really stressful. I don’t think I’ve ever felt grounded in my entire time at the university. It’s always felt like fighting the way through a mound of deadlines, whether those are interviews, assignments, etc., but where you can see the end approaching at an alarmingly fast rate.

On co-op, things are generally a lot different. The time that is eaten up by classes is now free for you to do what you want with. But at the same time, there is a good chance you are in a new or foreign city, sometimes with only one or two people you know, and you can get socially disconnected. I’ll say it right now that co-op can be incredibly lonely, especially if you are far away from close friends and family. I’ve experienced this living in the States, and that was in San Francisco and the Seattle area. I can’t imagine how it could be for people working in the middle of nowhere by themselves. I’m sure there is a certain type of personality out there that matches that, but it isn’t for me.

People also like to talk about how co-op is a break. I won’t disagree it is, but at the same time it is the farthest thing from it. You are still working, and in my experience work is actually more exhausting than school. It is a different kind of tired, being significantly less stressful, but most days I get home from work and just want to do nothing (figuratively, not literally). There (usually) is no homework (let’s ignore PD courses as well), but as an intern you don’t usually get paid vacation days like a full-time employee. As a result, I rarely have seen interns take days off, an even then there is sometimes the pressure to make up those extra days.

So, this all goes back to the curse part that I was talking about earlier. As a Waterloo co-op student you never get a break. You are either moving into school, at school, moving into co-op, or working and after 4 years you are exhausted, and are ready to be done. There have been more than a few times that I’ve just wished I could have even an extra week off to catch my breath and spend some real time with friends and family. There is always the option to do another co-op term at home in Toronto, but the amount of missed opportunities to try new things, especially in Software Engineering, is incomparable.

After that the question left open is, is it worth it? I don’t think that is even a question. Co-op is absolutely worth it. Would I ever trade any of this for some extra time off or a little bit more stability? Absolutely not. The breadth and depth of the experiences, both academic and life, that I’ve had on co-op would never have happened if I was in a regular program. At times moving, school, and even work has been absurd (like absolutely moronic), but I’d rather have experienced those now, when I have the opportunity to try new things, rather than have them hit me in the face after I graduate. Without those I would still think California is the only place to be (hint, it isn’t), working at a big tech company is a dream job (it’s fun, but it has downsides too), and moving away from home is easy (it isn’t). Finding things like that out in short 4-month spurts, even if you are miserable, lonely or incredibly stressed out at times, is amazing.

Co-op is a blessing and a curse. I’m sure many of my friends and classmates have different opinions on this and some will probably disagree with me, but it’s off my chest. If you are looking into going into Waterloo co-op, just remember everything has a cost. Co-op won’t solve your problems, but it sure can help you figure your life out in the process.

Give Me Your Knowledge: Capstone Design

This is not actually a blog post but a summary of knowledge that was shared about the Software Engineering Fourth Year Design Project during the Winter 2014 term. As always this is subjective and could be different depending on circumstances.

FYDP Sessions

Returning Projects

  • UWFlow - uwflow.com
  • The Notist - notist.co

What They wish they knew

  • Make sure your entire group isn’t taking trains, graphics, etc. all at the same time.
  • Don’t work with your significant other. Group breakups are bad…
  • Start generating ideas early on, even before starting on design project.
    • Keep a daily journal of ideas that come to mind and then discuss them with others
  • Keep a goal in mind for symposium (e.g. have lots of users) and work backwards from there
  • If your application requires users launch early
  • Don’t necessarily choose long-term technologies, it can be important to launch soon.
  • Start early and launch early. It allows you to write higher quality code in the long run.
  • If you are doing a research project, make sure it has good engineering. Good infrastructure, testing, build systems, etc. It can pay off in the long run (figuratively and literally).
    • Top two teams in 2014 had amazing infrastructure
    • Build/Test infrastructure pushed Amalgam over the top
    • The sponser loves this (=> $$$)
  • Research code is awful. Make sure your code is actually good. Crappy code is really bad…
    • Apparently, Rayside’s code is not the WORST, but still bad
  • Customer Definitions:
    • Research -> Professor
    • Open Source -> Maintainers
    • Corporate -> Actually Client
    • Entrepreneurial -> More of a technical mentor
    • Language will be clarified in 3B
  • Be pro-active about ideas, team, ideas.
  • Schedule frequent meetings (Mixbox did 3 times a week). Used to work on the project
  • Having one strong voice in the project to make defining decisions (Team Lead, Vocal People, etc.). Gives motivation and guidance
  • If you get a lot of work done in the school terms, you most likely won’t get it done over the workterm
    • Hard to arrange meetings, communication, etc.
  • Need good tools to figure what everyone is doing.
    • Pivotal Tracker for task planning (iterations)
    • Hipchat for communication
    • Github for Pull Requests + Code Reviews
    • Helps for asynchronous communication
  • Having a group member going on exchange can have a lot of difficulty
    • Weird meeting times because of time zones, exam times, etc.
    • You don’t see them every day
    • Workload won’t be balanced while on exchange
  • Inter-disciplinary groups can have some unique quirks
    • Hard to schedule
    • But can give a different perspective
  • 80/90% of work will be done together


Q: Is there a good strategy for mitigating the co-op fall off (maintaining momentum during co-op)?

A1: Teams can potentially live together during a co-op term (may drive you insane). Be careful of doing this… REALLY CAREFUL!

A2: Chris & Ming-Ho lived together and didn’t murder each other. Results may vary. Still tried to schedule regular meetings (cross-time-zone). Built the entire infrastucture during the co-op term. However, it was not completely steady throughout the work term. tldr; Meetings and if they didn’t do it would be bad.

A3: Research and actively still looking at projects etc. can help a lot during the term. Examples are testing, different libraries to speed up development. Play with “competitors” if you have them - could learn things.

A4: It may not be possible to work on it during a work term. Amazon, Google (Interns) and IBM are really bad at this. Keep this in mind.

A5: Set deadlines for yourself (not necessarily meaningful).

Q: What are measures of success for a FYDP?

A: Measured in technical content, results and communication. Less of a undergraduate marking scheme. Pick a project that someone will care about after your graudate and do a good job. Demonstrate how people care about your project. Project specific basis for success (going add examples). UWFlow is the low bar for doing a CRUD (Create, Read, Update, Delete) project that everyone has tried before (did YCominbator pitch). We’ll get a list of projects that have done well as examples.

Q: How does a measure of success change if it is a taken over project?

A: Choose a project that as an extension is as ambitious as the original project.

Q: When do you know when you want to work on something?

A1: A lot of ideas will be pitched to us from various locations. Don’t worry too much about thinking of an amazing idea.

A2: Massive brainstorming sessions with people you want to work with can be useful.

A3: Can be a challenge to rally people around your idea, it may not be interesting to anyone but yourself. Think about what sorts of things you have in common with your classmates to direct ideas.

A4: This process will tried to be facilitated in 3B (SE 390). Keep all the other ideas for a potential SE499 (Independent project) if it doesn’t work out for FYDP.

A5: When deciding whether to organize an idea or a team, Mack says to organize around a team rather than an idea. Can usually find some interest. However, Rayside says to remain open-minded.

Mine All the Jobs!

Another term at Waterloo brings another round of hunting for the next co-op job using Jobmine. Jobmine is the wonderfully awful job board that we at Waterloo use to find our co-op jobs. The concept is pretty simple. A student applies to up to 50 postings (25 for me this time) and then employers go through the usual process of selecting people for interview. Once all the magic is done students will either get ranked, receive an offer or get rejected from the jobs they interviewed for. Then a stable marriage algorithm is run and bam, hopefully you have a job. There are a few more technical details, but almost every student at Waterloo experiences pretty much the same thing each term.

So the real question is why in the world am I writing about Jobmine? Well, if you happen to be a lucky employer who found my website on my Resume, then this post is just for you! If you aren’t, well, this is in “the spirit of why not?”

So back to talking about Jobmine. Each time I’ve used Jobmine there has been a different theme to what I was looking for. The first time (when I was in 2A), I wanted to work anywhere but Toronto. The second time I really wanted to go to California. This time around, location is less of a concern when compared to what I would be working on at whatever company I ended up with. The past two terms I’ve been doing iOS development and I’m ready for a change.

So, what exactly am I looking for then? I like the nuts and bolts of software, the application logic and less so the UI. I want to do server/backend development and I’m not willing to compromise this term. To get the most out of co-op, doing something different each term is incredibly important and doing mobile development again will not get me there.

So, with that, let the Jobmine games begin!

Blog All the Things!

Well this is a long time coming to say the least. I’ve kept saying that I’m going to build my website since I started at UW and well it is finally here.

This website is built with the magic that is known as Octopress using the awesome Octoflat theme. I’ve tweaked a few things from the default theme and will hopefully change the colours around in the future to be a little less bright, but I’m incredibly happy that it is finally done.

Why Octopress?

First, I didn’t want to deal with the pain of setting up a hosting server to run a simple website. Octopress is built on top of Jekyll, a static page generator. This allows me to write everything here in markdown, which is then converted into HTML when I deploy. Speaking of deploying, it is just as simple.

Deploying Octopress
rake generate
rake deploy

Lastly, the big thing that drew me to it was the vast array of themes and plugins. I’m not a designer nor do I really enjoy digging around in vast piles of HTML and CSS to create a website from scratch. Having some awesome third party themes made it easy to start with someone’s awesome template and tweak it to my liking (as seen here).

I’ll keep it short for now but I’m glad I finally got this monkey off my back.