• Study user’s requirements
  • Make a part of proposal/estimation
  • Develop software requirements specification (SRS)
  • Define and conduct preventive actions
  • Make a part of project training plan
  • Create high level design (architecture design and technical solution document/SAD document)
  • Develop software prototype
  • Create program design/program design in details
  • Review design in details
  • Conduct technical training for the project
  • Build application (coding) based on analysis, design of software following the coding convention
  • Do unit tests
  • Prepare, integrate and do main integration tests for product components
  • Fix bugs
  • Attend to code review, unit-test review, technical review if required
  • Create software installation guideline, support documents,…
  • Customer support/fix bugs in acceptance
  • Maintain the product
  • Make knowledge base: lesson and practice at project closure
  • Create training document/conduct training course
  • Share the experiences (i.e, seminar, other public channels)



1. Programming skill:

  • Excellent C programming (on Linux) skill:
  • Understand & able to use all data types
  • Understand & able to use all language features (in C standard)
  • Able to use gcc (or clang), g++ (or clang ++), and gdb, Makefile
  • Must work extremely well with socket programming & different types of socket type / protocol
  • Must work extremely well with multi-threading programming & locking primitives
  • Must work extremely well with standard C library functions like file I/O, string manipulation
  • Work well with shared memory programming for inter-process communication
  • Good knowledge at C++ programming: understand & work very well with basic data structures, language features, standard library functions.
  • Understand CPU affinity & process schedulers on Linux
  • Know how to optimize, benchmark code for performance, know performance/memory trade-offs when using different type of data types.
  • Understand cache memory, virtual memory, user space, kernel space, and how to write code to utilize those.
  • Good at shell/bash script programming
  • Able to read & understand C# (basic level), able to update existing C# code (very basic level)

2.Linux administration skills:

  • Able to install Ubuntu & troubleshoot problems during installation
  • Able to uninstall/install/upgrade packages
  • Able to use basic commands / utilities in Ubuntu
  • Able to get hardware/software information in Ubuntu, good at problem trouble shooting in Ubuntu

3. Some knowledge about hardware:

  • Understand SSD vs HDD performance, understand memory speed, cpu speed.
  • Able to give advises to customer for hardware specifications when they need to buy a new server for running your applications.

4. Communication skills:

  • There must be NO problem at writing & reading in English
  • Smooth at English listening & speaking: directly (face to face) with US customer

5. Working attitude:

  • Ability to response to customer anytime / anywhere (even on mobile phone, at home, during holiday…)
  • Very active when working: never wait for task assignment, must find something to do (that gives benefits to customer/project) when have a free time!
  • Willing to meet/meeting with customer, face to face, like twice a month.
  • Keep learning new things, especially about technologies & programming.