Estoy seguro de que hay alguna diferencia entre el desarrollo de un marco o biblioteca y una aplicación.
Los procesos de desarrollo son esencialmente los mismos. Las diferencias pueden deberse a problemas de comercialización e implementación, aunque creo que las mayores diferencias suelen estar en términos del alcance y la definición del proyecto. Recuerde que una Aplicación puede incluir o usar un marco o una biblioteca, un marco puede ser una colección de bibliotecas.
Tengo algunas dudas sobre cómo manejar la organización y la gestión de ese proyecto: ¿Hay algunas reglas generales a seguir, consejos, mejores prácticas o algo a tener en cuenta para desarrollar este tipo de proyecto?
La organización y gestión de proyectos son nuevamente las mismas para cualquier proyecto de desarrollo. Nuevamente se reduce al alcance. Sin embargo, cuando se trata de escribir un marco, vale la pena tener una visión muy clara sobre lo que está tratando de lograr y colocar reglas estrictas de diseño en la interfaz pública del marco para garantizar la coherencia en términos de la presentación de la API. Si permites que cada desarrollador haga lo suyo, terminarás con un desorden complicado y un diseño de API muy poco elegante.
Respaldaré la recomendación de Ryan Hayes de leer las Directrices de diseño de marcos , aunque el libro en sí está destinado a desarrollar marcos basados en .NET, porque el asesoramiento general es aplicable independientemente de las tecnologías de implementación específicas que pueda elegir utilizar.
Por experiencia, recomendaría apegarse al principio clásico de YAGNI mediante la implementación de las interfaces públicas más simplistas primero, y luego expandirlas para ofrecer un mayor control y profundidad más adelante, pero tenga cuidado de usar nombres útiles para mostrar por qué se están expandiendo los métodos o clases. Nunca me ha gustado agregar "Ex" u otros sufijos similares a los nombres de los métodos, ni agregar números a las definiciones de interfaz ampliadas. Diferencie la funcionalidad, y sus nombres de interfaz / método deberían ser más claros y, con suerte, menos confusos y confusos.