At the beginning of implementing a subsystem, we should do the abstraction level design for that subsystem or module. As mentioned previously, this design should avoid details and only provide high-level information. It serves more like guidance so that developers can understand how that subsystem or module works internally when it is done.