How I win practicum competition in CMU
As the judges announced the champion, “I made it!” I told myself. And my teammates can’t help cheering. After 9 weeks of working, my team won the champion of the annual Practicum Competition of my program at CMU. It’s last August but it feels like just happened yesterday.
It’s never easy to win such a competition among 11 teams who all share the same ambition to win the prize. All the teams have their own sponsors standing behind to support them, which aggressive plans and convincing stories to tell. Per competition of last year, people tend to choose those projects with eye-catching technologies such as 3-D printing and motion control. I finally joined a team with a mobile banking project, with 5 other teammates I never worked with before.
To make the mission more challenging, Apple developer center’s down blocked us for quite a long time. As required by our sponsor we need to deliver an app on iOS platform and making use of Apple’s Passbook technology. As Apple underwent the attack we cannot get developer license to debug on our devices for almost one month!
But after all I enjoyed a quite wonderful time to build up everything, learned a lot and had much fun in the 9 weeks. Here are why and how:
Enjoy exploring unknown area
I never wrote a single line of Objective C before (nor did my teammates), and I rarely code in Python. This project was requiring all new technical area that I never explored. But I never worried. By contrast, I feel quite exciting to do so. I started to write in Objective C as soon as I read some quick tutorials, and used Internet as soon as I need any help. It’s quite productive to just google when need, and by doing this I didn’t miss to understand the specific concepts of the language at all.
Prepare before start
In order to implement the background web service fast I did a bit of study and chose Django framework. Although I need to code in Python which I was not quite familiar with, I believed I can make it because I can at least treat it as just another script language like Ruby, and it’s said by many people that Django is quite light-weighted and easy to master. So although other teammates have experience in JSP, I would rather risk a little bit. I even eliminated Rails and Sinatra, which at least I can use Ruby to work with. It proved to be very successful because I can implement everything the other teammates required in a very short time, and I can fix, deploy and test when there is bug.
Make use of free resources
There are lots of free resources that we can make use of. We hosted our server on Heroku, we used several third-party libraries to implement cool features such as Bump, we used Github to host our code, and of course we use all the on campus resources we can find: meeting rooms, projectors, labs…All of them saved lots of our time and a bunch of our sponsor’s money. Actually it’s not surprising because we are in such a world that the cost of tech startup is becoming lower and lower, we just followed the trend.
Change never changes. Requirements may change, use cases may change, our thoughts of design or implementation may change, even if there are just 9 weeks to implement something. To work with change, we need to be agile. We meet frequently to update status, exchange our minds and share knowledges to keep moving, but don’t meet if there is nothing to share. The meetings themselves were usually short. We meet our sponsors every week to share our latest work and request their feedback. We adjust our work if we were running out of time. It’s quite similar with Scrum process although we didn’t post a big burn-down chart because we didn’t have a fixed meeting room.
After we formally kicked off we have weekly meeting with our sponsors, and we keep showing them something new every week so that we can make sure: We are doing what they want; they can provide suggestions for enhancement; they can evaluate the priority of unimplemented features so that we react smart. It’s just like the image below:
Coordinate with everyone
Everyone in the team had different time schedule, and each had different technical background. So we need to try to synchronize the schedule, share knowledges to make sure everyone have those must-have skills, transfer work if one cannot make it in time, troubleshoot technical problems that one cannot handle.
And, take it easy
I worked hard to win the prize but it doesn’t mean that I had to contribute my whole life to that. Actually I seldom sleep later than 1am, generally before midnight. And I usually wake up after 9, sometimes noon. The night before the presentation day I had my best sleep because I was well prepared. I hang out with my wife to enjoy our remaining days in Pittsburgh, I travel with my wife to DC for a short break. I drive my wife to here and there. I talk to my incoming baby.
Thanks to Cliff, he contributes a lot to brainstorming, coding. And he is such a genius presenter that demonstrated our work perfectly.
Thanks to Lynn, Melody, both girls worked hard even though they need to work on another huge project at the same time.
Thanks to Asim, Sanjeev, both guys contributed a lot to the client’s UI and related code, and they made a fun game in another class at the same time.
Thanks to Jason, Greg, the faculties guided us a lot during the practicum and provided much resources for us.
Thanks to Tom, Dave, Matt, Carol, our sponsor guys provided many professional feedbacks to our project for us to make it perfect.
And of course, thanks to myself. You made a smart choice, did a lot of work designing the architecture and contributes to code from front-end all the way to back-end to enable me enjoy a wonderful time full of coding, learning and working. You deserve the prize!
And specially thanks to my wife. Thank you for your love and your support. I can’t make it without you.