¿Cómo puedo usar Python para el desarrollo a gran escala?

Me interesaría aprender sobre el desarrollo a gran escala en Python y especialmente sobre cómo mantener una base de código grande.

Cuando realiza cambios de incompatibilidad en la firma de un método, ¿cómo encuentra todos los lugares donde se llama a ese método? En C ++ / Java el compilador lo encontrará por usted, ¿cómo lo hace en Python?

Cuando realiza cambios en el interior del código, ¿cómo descubre qué operaciones proporciona una instancia, ya que no tiene un tipo estático para buscar?

¿Cómo maneja / previene los errores de escritura (errores tipográficos)?

¿Se utilizan UnitTest como sustituto de la verificación de tipo estático?

Como puede suponer, casi solo trabajé con lenguajes estáticamente escritos (C ++ / Java), pero me gustaría probar Python para programas más grandes. Pero tuve una experiencia muy mala, hace mucho tiempo, con el lenguaje clipper (dBase), que también se tipeó dinámicamente.