bottom up functional design