Peake code reader is adequate for most users but will not allow futher diagnostics like Bav Technics or Carsoft. All other code readers give you a generic code which you must interpriate. They work for most cars but not that well for BMWs unless you like detective work.
I also use the ABS reset tool and again adequate for a home user.
Carsoft and Bav Technics are able to read-manipulate most times-reset modules on your car.
For newer cars that require battery registration Bav Technics does that and Carsoft does that also for only the 5 series.
There is an extensive section in the E90 forums for self coding allowing a user to read and manipulate all modules on the car if the modules are able to be read and modified...