Setup and maintain AWS environment using Terraform
Containerize different components with Dockers using docker compose for microservices architecture
Monitor component resource usage with Grafana
Use Jenkins and Amazon CodeBuild for CI
Task Automations with OCR
Use OCR technologies (tesseract.js and pdfjs libraries) in a React frontend to load PDF files and extract data
Call API with the extract data to retrieve additional information for further processing
Task Automations for report generation
Build reports using JasperReport
Implement serverless solution (AWS Lambda) to automate the report generation in PDF and Excel files
Full Stack Development
Build front-end using React and Tailwind CSS
Improve code readability and static type checking with TypeScript and Zod
Manage monorepos with Nx
Build and package with Vite for front-end and esbuild for the backend modules
Use Spring framework and Spring Boot for the Java modules
Deploy Lambda in AWS for serverless components
Digitialize day-to-day operations using shell scripts and Nodejs
Project Management
Lead the project manager to work with uses to prioritize tasks
Provide technical advice to the implement the changes
Team Management
Build a team of 30+ from scratch
4 development teams with 4 members per team on Android and iOS development
PMO team with 3 project managers and 3 project coordinators
Design team with 3 designers
QA team with 4 QA engineers
Artificial Intelligence
Build PoC chatbot
Enable ReAct in chatbot
Projects
Mini-site — Wealth Management Cube Limited (2024)
Technical challenges
Fund data is provided via CSV data files via SFTP on regularly basis (daily, monthly and quarterly)
Data in different files are related with values in one or more columns
Technical solutions
Build application using Nodejs and deployed as Lambda in AWS using serverless application
Use EventBridge in AWS as schedule to run job on daily basis
Implement static site generation using Next.js
Load data and use Zod to validate data
Build UI components with React and Tailwind CSS for styling
Digital Transformation — Wealth Management Cube Limited (2020 ~ 2024)
Manual processes
Generation of the monthly statements involves a number of steps, including database backup / restore, data reconciliation, statement generation and files upload, and all are done manually
To fulfill the SFC licensing requirements, a number of reminders are sent to the users on a regular basis based on various criteria, including the users' professional investor roles, password policy, account status etc.
Reports need to be generated and filed (e.g. upload to repositories or send to clients as email attachment)
Extract information from a number of PDF files in a number of predefined format (varies based on sources) and enter to the system
Technical solutions
Split the tasks into three groups, namely pre-generation, reconciliation and generation, as well as post-generation. Automating the tasks in the first and last groups using shell scripts while the tasks in the second have to be done manually.
Schedule the AWS Lambda functions to extract data from the database based on the business logic to compose and send reminders to the users
Use scheduled jobs to generate reports which will then be uploaded to server and/or sent to dedicated users via email
Leverage open-source libraries to preprocess (e.g. unzip with/without password), extract data and update the system via APIs once users have reviewed
API Server — Wealth Management Cube Limited (2021 ~ 2022)
Project management challenges
Lack of key stakeholder to confirm requirements
Moving targets with new requests from business and operation teams
Mixed with legacy business rules no longer relevant
Project management improvement
Freeze the project code for an initial version
Identify key stakeholders from business and operation teams
Assign senior developer to review and walk through requirements with stakeholders
Technical challenges
Existing code mixed with legacy business logic no longer relevant
Not possible to scale up with the existing legacy monolithic server
Difficult to implement new features with the existing code base
Technical solutions
Use Spring Boot to move away from the existing code base to focus on the latest business requirements
Deploy as a standalone server to allow separate deployment and release management
Update the existing code to use the new APi module gradually
Support the latest industrial standard in the API implementation, including OpenApi specification
Frontend is implemented in JSP mixing up with HTML, JavaScript, CSS and Java code
Using legacy frontend technologies, e.g. JQuery
Inconsistent user interface, e.g. different wordings for the same action in different pages
Poor user experience, e.g. slow, missing UI feedback
Data scattered in many tables (over normalized with legacy design) results in complicated SQL and slow performance
Technical solutions
Introduce modern frontend frameworking using React
Use shared components in different pages to provide consistent look-and-feel
Use modern technologies (e.g. React Hook) to replace jQuery
Leverage open source library (e.g. MUI for material UI) to provide modem UX
Import data on a regular basis to a NoSQL database (i.e. Elastic) to optimize for read and facilitate efficient query for data analysis
Major Product Upgrade Wealth Management Cube Limited (2019~2020)
Project management challenges
Missing big picture with many unfinished tasks
Weak communication among team members and client
Project management improvement
Review and prioritize all the outstanding issues in the ticket management system
Communicate with the client on daily basis to confirm the requirements and get their consensus on the task priority as well as delivery time
Hold daily standup meeting with the development team to discuss and address any outstanding issues on the daily tasks
Review the overall architecture to improve the stability and performance
Introduce modern technical development tools (e.g. Docker) to improve the productivity
Technical challenges
Complicated steps to local environment setup
Inappropriate technology stack
Anti-pattern in web application implementation
Technical solutions
Containerize the key components of the system (including the application server and database) by using docker compose
Use Dockerfile to generate configuration files with environment variables
Use latest stable version of TomEE to replace an out-dated Glassfish
Use Spring Boot and Apache ActiveMQ to build a new message-based module for the batch processing to move the long-running process from the application server to a standalone server
Migration of a legacy system from on-premises with out-dated hardware and operating system
Frequent production outages due to limited hardware support and lack of technical know-how
Too many manual processes across the clock
Technical solutions
Design and setup AWS cloud platform for the production environment for better cost of ownership
Containerize the key components and enable CI using Jenkins
Use Terraform to set up DR site from scratch; save cost by eliminating a standby site
Use Grafana and Prometheus to monitor system usage and set up alert for potential production issues (e.g. memory usage)
Automate the report generate process directly in client folders to replace the existing manual process
Android Native Apps The Knot Asia Pacific (2012 ~ 2019)
Management challenges
Start from scratch
Management Solutions
Started with a small team of 2 junior developers and one project manager
Set up the teams to align with the line of business; let each team focus on one key areas to improve productivity and communication with the business stakeholders
Maintain small team of 5 members (one lead and 4 developers) for 3 Android team and 1 iOS team for better communication
Mentor the team leads with weekly one-on-one meetings
Regular technical sharing sessions with all team members
Technical challenges
Limited hardware configuration of Android phone back in the old day
High requirement on the image resolution
Complicated user interface design
Evolution of various technical stack on Android platform
Technical solutions
Use customized image library to display the high resolution images in our Android application for better memory management
Build framework to support various data types returned from the API endpoints and match to the user interface components
Introduce layer architecture, i.e. layers for user interface, business logic, data repositories (including local preferences, database and APIs), to decouple logic on different aspects
Schedule regular sessions to share technical know-how and business domain knowledge among all the developers
Wedding Registry Tool The Knot Asia Pacific (2009 ~ 2017)
Challenges
Understand the company culture and processes with the US team
Migration from on-premises to public cloud platform in 2012
Complicated search with aggregation on various dimensions
Improve UI/UX with model design of the web application
Solutions
Schedule regular group and one-on-one meetings with the counterparts on the US side
Write up document for various processes, including deployment, testing procedure
Leverage the components available (including Elastic Beanstalk, DynamoDB, RDS, Elastic Load Balancer) in the AWS cloud platform
Move from waterfall model to agile to deliver features in sprints and get feedback from users faster
Introduce Solr/Elastic as NoSQL solution to support various types of search aggregations
Implement frontend with React to build modern UI and better UX
Online Accounting System New World Services Holding LImited (2001~2003)
Technical challenges
Replace a 20-year-old legacy COBOL/MS-DOS system
Improve the productivity by streamlining the existing process
Provide better services to different stakeholders, including the accountants, staff in the estate management offices, and residents
Technical solutions
Build a web-based application using ASP.NET/C# with Microsoft SQL Server on Windows Server to replace the legacy system to provide better user interface and performance
With the appropriate access control settings, different user groups are created for different stakeholders in multiple locations all over Hong Kong (e.g. accountants, staff in the estate management offices) to access the required functions and data
Share workload among stakeholders to streamline the process and avoid duplicated data entry. For example, staff in the estate management offices collect management fee and input directly into the system
To further optimize the process, barcode is printed on the debit note and scanned by the barcode reader to replace error-prone keyboard entry
Revised debit note design to provide modern view with more details, including the last payment and outstanding transitions, to the end users.
Different reports are provided to the accountants for data reconciliation while online access provides an update-to-minute information to the staff in the estate management office for enquiry.
Working Experience
President, IT
Wealth Management Cube Limited
Head of IT Development and PMO
Oversee the project management team
Setup and maintain the AWS environment
Provide technical advice and guidance on system development
Work with CEO to implement POC for business development
Manage projects to upgrade systems from client/server to web-based architecture
Spearhead digital transformation to reduce manual operation by automation
Revamp our 10 years old legacy system with micro-services architecture on cloud and UI
Systems Director
The Knot Asia Pacific
Manage our project and technical managers to work with counterparts in the US office
Oversee the architectural design of different systems in the US and China projects
Discuss regularly with US counterparts on technical issues and propose solutions
Provide technical advice to different teams on web, iOS and Android development
Establish and manage a mobile teams (both Android and iOS)
Project Manager
Beans Factory
Participate in pre-sales stage to discuss with clients the business needs and offer them the appropriate solutions
Monitor project status, scope and resources
Provide technical support to the team on system design and implementation
Systems Architect
Global Information Services
Lead a team of over 10 developers and direct report to senior project manager
Define and implement standard SDLC with source control system (CVS), proper build process (Apache ANT/XDoclet)
Maintain and enhance the existing Java-based web application
Rewrite parts of the system with MVC model using Servlet/JSP/JSTL and Struts
Systems Analyst
SigmaXpert Limited
Gather user requirements, design and implement web-based application for membership and activities management
Systems Analyst
New World Services Holdings Limited
Lead a team of 4 developers and direct report to IT manager
Gather user requirements, design and implement web-based application for property management company
Tenant and property management
Accounting system for management fee (including billing, payment collection and adjustment, statement generation and printing as well as reporting)
Facilities management (includes booking)
Systems Analyst
TOM.COM
Revamp web user interface to improve usability
Redesign system architecture to improve stability of the company portal
Work out the plan for server consolidation to better utilize the hardware resources
Define programming and system standard
Design and implement the web portal applications, including single sign-on, personalization
Systems Analyst
Chase Manhattan Bank
Design and implement CORBA application to load news information from Reuter and provide content search
Coordinate with the New York technical team and local line of business to implement company portal for Chase Manhattan Hong Kong using content management system
Deploy palm application for executives in Asia Pacific region
Web Application Developer
Hongkong Telecom
Develop middleware for a 3-tier application using C/C++ in Unix platform