Esa es una pregunta amplia.
Es posible que desee dividir el problema en requisitos funcionales y no funcionales y luego derivar un conjunto de decisiones de diseño de cada uno. Primero, piense en los objetivos de diseño clave de su aplicación.
- ¿Tiene que ser realmente rápido?
- ¿Es modular / extensible?
- ¿Necesita ser muy seguro?
Los requisitos no funcionales tienen un gran impacto en el diseño general de su aplicación. Deben ser claros. Luego, piense en una pila tecnológica general. Las preguntas de ejemplo pueden ser:
- ¿Hay alguna aplicación de Android que mantenga actualizado mi GK diario?
- Como principiante, ¿qué debo usar para aprender el desarrollo de aplicaciones de Android: Eclipse o Android Studio?
- ¿Por qué es tan costoso portar código C ++ a C #?
- ¿Cuál es el mejor móvil Android central disponible bajo 35000?
- ¿Cuáles son algunas bibliotecas de código abierto que puedo usar para mejorar mi aplicación de Android?
- ¿La aplicación se hará grande, es probable que tenga muchas clases interactuando entre sí? En ese caso, integrar un marco de IoC como Dagger podría ser una buena idea.
- ¿Necesita mucho acceso a la base de datos? Un marco ORM ligero como Room podría ser útil.
- ¿Las actividades tendrán muchas operaciones complejas y / o asíncronas? Piense en administrar el estado de la IU en los modelos de vista.
Piensa en los requisitos funcionales:
- ¿Necesita comunicación de backend? Entonces, es posible que desee introducir algún tipo de capa de servicio. Podría involucrar una biblioteca de programación reactiva como RxJava.
- ¿Hay alguna biblioteca / algoritmo de dominio especial que necesite integrar? Por ejemplo, visión por computadora
- ¿Está obligado a proporcionar exportación a ciertas interfaces, por ejemplo, servicios en la nube para compartir archivos?
Espero que esto ayude.