Duy Trung Ha

haduytrung@gmail.com - https://hidroh.github.io

Summary

Android engineer, with past full-stack web development experience. My experience includes exposure to Scrum agile framework, unit testing and test-driven development (TDD), behavior-driven development (BDD) and automation. I love writing code as much as testing them. Outside work, I contribute to open-source projects and technical communities. List of my works can be found in Portfolio section of this document.

Experience

Microsoft
02/2017 - Present

Senior Android Engineer

Outlook Mobile.

PropertyGuru
03/2014 - 01/2017

Android Engineer

Regional Android property apps (consumer and agent): 8 apps in 4 countries, 3 languages.

PropertyGuru
10/2012 - 02/2014

Software Engineer

Regional property websites (consumer), mobile sites and web services.

GRC-Systems
01/2011 - 06/2012

Software Engineer

Cloud/on-premise Rich-Internet-Application (RIA) for governance, risk management and compliance clients.

Dept of Computer Science, School of Computing, National University of Singapore
07/2009 - 11/2010

Research Assistant

Academic research with focus on software reuse, domain-specific language (DSL) and model-driven development (MDD)

  • 1 publication at top software engineering conference

Education

National University of Singapore
2012 - 2014

Master’s Degree, Computer Science

National University of Singapore
2005 - 2009

Bachelor’s Degree (Honours), Computer Engineering

Portfolio

NearbyTutors - Android application

Materialistic – Android application (open source)

tldroid – Android application (open source)

PropertyGuru Android applications

cucumber-api – Ruby gem (open source)

PropertyGuru mobile sites

Other works can be found on my website and Github

Projects

Materialistic - Hacker News reader Android application
01/2015 - Present

https://play.google.com/store/apps/details?id=io.github.hidroh.materialistic

This is a personal project where I spend my free time to develop, practice and keep myself up-to-date with latest technologies that I do not have chance to do at work due to product requirements.

Materialistic is an open-source news reader Android application with material design look and feel. The project demonstrates uses of latest Android APIs, dependency injection, supporting different device’s orientations, handling dynamic resources switching, and unit testing with Robolectric.

The project is hosted at https://github.com/hidroh/materialistic

This project has been featured on Android Weekly issue #144: http://androidweekly.net/issues/issue-144


cucumber-api - Ruby gem for API JSON response validation in BDD style
03/2015 - Present

https://rubygems.org/gems/cucumber-api

Inspired by cucumber, I developed and published cucumber-api, a Ruby gem extending cucumber, to allow testing and verification of API dependency in BDD style.

Most mobile apps depend on service providers, either via RESTful API, or platform-specific SDKs to consume and manipulate data they provide. Putting cucumber-api as part of automation process allows one to be confident of expectation to external dependency.

The gem is first developed for private use at PropertyGuru, as part of daily automation process, and later cleaned up and published for community use.

The project is hosted at https://github.com/hidroh/cucumber-api


PropertyGuru Android applications
03/2014 – Present

https://play.google.com/store/apps/dev?id=6401700705145495118

In this regional project, we develop and maintain the most popular property mobile applications for 4 South East Asia countries (Singapore, Malaysia, Thailand, Indonesia), supporting 3 languages. I am a member of the 2-3 developers Android team, and the major contributor, in charge of both consumer (public) and agent (paid) products.

Since joining the team, I have introduced and started unit testing with Robolectric testing framework. Over the course of less than one year, we improve our test coverage from 0% to 90%. I advocated and initiated our cross-platform UI automation with Calabash and Cucumber, setting up API and UI automation tests. I improved our continuous delivery and continuous integration process with Gradle, Jenkins and Github integration, setting up parallel UI automation with multiple devices.


PropertyGuru online property portals
10/2012 – 02/2014

http://www.propertyguru.com.sg/

In this regional project, we developed and maintained the most popular online property portals for 4 South East Asia countries (Singapore, Malaysia, Thailand, Indonesia), supporting 3 languages. I was a member of search team, in charge of consumer-facing products.

Since I joined, the team has transformed from a big, traditional development team to a 6-person Scrum development team, with 2-week iteration. We pioneered and actively practiced test-driven development, pair programming and automation testing. We worked closely with other teams to consolidate legacy products, migrated and re-architected in-house legacy framework to the more modern Symfony2 framework, shipped our first ever RESTful web services and mobile sites.


kinkie.im - Location-based public chat application
06/2013

https://github.com/hidroh/kinkie

This project is a fun project, started from a 24-hour international hackathon (AngelHack Singapore 2013). Together with 5 other engineers, within 24 hours, we managed to complete a location-based chat application using PHP Laravel framework, (later switched to node.js) and web sockets. The project attracted attention from the hacker crowd as well as the judges, partly due to its controversial name, and we won several sponsor prizes as well as being one of the top 10 finalists of the event.

Following the surprise success, kinkie.im competed in 2 other events in the following months: SeedStars World Singapore and Blackberry App Challenge. I was the lead developer for back-end, using node.js, as well as Blackberry HTML5 application.


GRC-Suite: Compliance cloud application
01/2011 – 05/2012

In this project I was a member of a 5-person development team. We followed strictly Scrum development process, with 1-3 weeks iteration. I initially joined the core platform team to work on cloud-migration project, from in-house local Internet application to Azure cloud application. I then progressed as one of the lead developers of 2 of the most important components of the application (scheduled task manager – client side, and schedule service – server side); in addition to maintaining, enhancing other existing features and implementing new features.


Document Management Environment (DME)
05/2010 – 11/2010

In this project, I developed a productivity tool helping users manage families of similar documents. The usual practice is to capture similarities in templates that must be copied and customized to a new context. DME, implemented as a Word add-on using Visual Studio Tools for Office (VSTO), attempted to automate this manual process.


Model-Driven Development (MDD) and Flexible Generators
09/2008 – 04/2010

In this project I addressed the problems that hinder widespread application of MDD and code generators: code generated from models must often be modified by hand. To avoid that developers tend to use models/generators during initial development only, and abandon them during follow up development and maintenance.

My idea was to allow developers use the full power of models and generators, but at the same time to let them merge manual extensions in a way that any future code re-generations would not override them. The project was recognized internationally with a publication at International Conference on Software Engineering.

Publications

Flexible Generators for Software Reuse and Evolution
05/2011

ICSE 2011 NIER track · Authors: Duy Trung Ha, Stan Jarzabek

http://dl.acm.org/citation.cfm?id=1985946

Developers tend to use models and generators during initial development, but often abandon them later in software evolution and reuse. One reason for that is that code generated from models (e.g., UML) is often manually modified, and changes cannot be easily propagated back to models. Once models become out of sync with code, any future re-generation of code overrides manual modifications. We propose a flexible generator solution that alleviates the above problem. The idea is to let developers weave arbitrary manual modifications into the generation process, rather than modify already generated code. A flexible generator stores specifications of manual modifications in executable form, so that weaving can be automatically re-done any time code is regenerated from modified models. In that way, models and manual modification can evolve independently but in sync with each other, and the generated code never gets directly changed. As a proof of concept, we have already built a flexible generator prototype by a merger of conventional generation system and variability technique to handle manual modifications. We believe a flexible generator approach alleviates an important problem that hinders wide spread adoption of MDD in software practice.