Programming by discovery

Signed-off-by: Bao Haojun <baohaojun@gmail.com>