three indispensable aspects software implementation