"expect changes, embrace changes"

Well, it has been almost a year since I last wrote a blog post. I would like to take this chance to give an update on what I’m doing. Since leaving Favorite Medium, a Software Development Agency in Singapore, at the end of 2014, I joined First Code Academy in Hong Kong with a mission to empower the next generation to become creators with technology. I am taking this chance to reflect on my experience working as a Software Engineer in an agency, hoping that those who are looking for jobs after a coding bootcamp will see this post and find it helpful.

###1. Uncertain time span for each project Working on a client project means you’ll have no idea how long you’ll be paired with the product, sometimes it could mean years, or 3 weeks. The benefit of working in an agency is that the project tends to be short, such as 3 months, and you’ll be working on a new project with a different stack. If you’re lucky to be with an agency like Favorite Medium, you’ll be exposed to a lot of projects that are built from scratch, from architecture, to APIs, to Android apps. They will also allow you to build internal projects while waiting for a client project to kick off, and you can learn Angular JS, Scala, or whatever you find interesting! Amazing right? The downside is you will also get projects that last more than a year and so called “Legacy Code” that is hard to maintain after more than a dozen programmers have worked on it.

###2. A programmer needs to know how to communicate One of the biggest takeaways from my experience there was how to communicate with your team and external clients. I remembered I was sent to Seoul, Korea to handover a project to our Korean client. The team there was a group of Microsoft programmers, and they did not program in Ruby. My task was to advise them how to set up their own servers, databases, and local development environment. I also had to teach them how to make code changes. It was an extremely difficult thing to do as they only spoke half English. The good thing was that all of them were truly talented and picked up in 4 days and I got to return to Singapore with a smile. Being a programmer is not just about banging out code on your keyboards, you need to know how to document the code, you need to be able to explain what you just did in plain language and defend your decision to code in a certain way, and you need to communicate! Yes, a lot of communication! For me, I would say the best programmers tend to challenge others to do things in better ways, present their ideas concisely and clearly, and share their knowledge with peers. These all make use of communication.

###3. Client is king The developer and design team has a ton of expertise in the field and is able to make recommendations on how a project can be built. However, as all of you know, client is king. They have their own priorities and preference in the product, so in many cases, you’ll have to compromise in order to fit their timeline, taste, and everything. It is not exactly different in other industries anyway. Personally I think working with client is something every should master, and you shouldn’t let this scare you away from working at an agency. At the end of the day, if you’re working in a startup, your client is your coworkers. If you’re a founder of a startup, your client is everyone in your company and all your customers. So, practice the art of working with clients!

###4. Write code that other programmers can understand A lot of times, you think that you are the only person who is on this project, and start to go down the messy-code approach. Never do that! You might think that it is just “testing code” and you’ll fix it later to clean it up. The truth is once it is developed, it is hard to redo it (just simply a hassle and I think only a few will do that). Naming variables is the simplest thing in programming, but it is an art. To name your varaibles so that it is short and everyone can understand is hard. I learn the hard way as the senior programmer I worked with often scolded at me for the terrible naming conventions. Besides, document the code well and do it frequently, do not leave it til the end.

###5. What is it like working in an agency? If you are lucky, the culture and environment of the agency should facilitate learning. At Favorite Medium, the managers are super open about learning new things, a new language or framework. Projects often have realistic deadlines, and you’ll be learning while working. Of course, there are times where you have to rush something before the deadline, then the team works in the evening as well, but deadline doesn’t happen frequently. Hours are fixed and working environment is relaxed. A lot of the meetings will be hosted online through Google Hangout or Skype, but you won’t really work directly with the client. Usually there is a project manager in between who handles client communication and assign tasks accordingly.

###Final words Excellent learning experience to start off your career at an agency (aka development house), find out what you truly like and go from there. I had an amazing time in the 14 months at Favorite Medium.