Agora, tenho alguns grandes produtos de vários inquilinos baseados na Web e logo vejo que haverá muitas personalizações específicas do inquilino.
Um campo extra aqui ou ali, talvez uma página extra ou alguma lógica extra no meio de um fluxo de trabalho - esse tipo de coisa.
Algumas dessas personalizações podem ser incorporadas no produto principal, e isso é ótimo. Alguns deles são altamente específicos e atrapalhariam todo mundo.
Tenho algumas idéias em mente para gerenciar isso, mas nenhuma delas parece ter uma boa escala. A solução óbvia é introduzir uma tonelada de configurações no nível do cliente, permitindo que vários 'recursos' sejam ativados por cliente. A desvantagem disso, é claro, é a enorme complexidade e confusão. Você pode introduzir um número realmente grande de configurações e, com o tempo, vários tipos de lógica (apresentação, negócios) podem ficar fora de controle. Depois, há o problema dos campos específicos do cliente, que imploram por algo mais limpo do que apenas adicionar um monte de campos anuláveis às tabelas existentes.
Então, o que as pessoas estão fazendo para gerenciar isso? O Force.com parece ser o mestre da extensibilidade; obviamente, eles criaram uma plataforma super extensível. Você pode adicionar quase qualquer coisa com a interface do usuário baseada na Web. O FogBugz fez algo semelhante ao criar um modelo robusto de plug-in que, pensando bem, pode ter sido realmente inspirado pelo Force. Sei que eles gastaram muito tempo e dinheiro com isso e, se não me engano, a intenção era usá-lo internamente para desenvolvimento futuro de produtos.
Parece o tipo de coisa que eu poderia ser tentado a construir, mas provavelmente não deveria. :)
Um grande investimento em arquitetura conectável é o único caminho a percorrer? Como você está gerenciando esses problemas e que tipo de resultados está vendo?
EDIT: Parece que o FogBugz resolveu o problema criando uma plataforma bastante robusta e usando-a para montar suas telas. Para estendê-lo, você cria uma DLL que contém classes que implementam interfaces como ISearchScreenGridColumn e que se torna um módulo. Tenho certeza de que foi tremendamente caro construir, considerando que eles têm um grande número de desenvolvedores e trabalharam nele por meses, além de sua área de superfície ser talvez 5% do tamanho do meu aplicativo.
No momento, estou seriamente pensando se o Force.com é a maneira certa de lidar com isso. E eu sou um cara do núcleo do ASP.Net, então essa é uma posição estranha para me encontrar.