2 | | the tahoe source code has many services which perform their async initialization in their class constructor whereas they should probably be using startService for that. |
| 3 | - their `__init__` has a bunch of non-trivial code, including creating other objects and possibly doing async things |
| 4 | - if other things need to know "when they're ready" there are tricks like `when_ready` methods. |
| 5 | |
| 6 | Instead this code should be written like this: |
| 7 | |
| 8 | - a `create_thing` factory-method (that is async) is created |
| 9 | - all non-trivial objects are instantiated outside and passed it |
| 10 | - IService and `startService` should be used solely for startup notification |