[ 
https://issues.apache.org/jira/browse/SOLR-1602?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12795920#action_12795920
 ] 

Uri Boness commented on SOLR-1602:
----------------------------------

I think it is very important to understand all sides here. 

I fully and totally support Chris's attempts to clean up the code base which 
rightfully involves moving classes from one package to another. I think in some 
cases such cleanups need to come at the cost of user comfort as eventually 
they, as users, also gain from it as the system as a whole becomes more robust, 
extensible and maintainable. The good thing is that besides the deprecation 
issue I believe there is a consensus about the required changes. So thumbs up 
Chris!!!

To deprecate or not to deprecate, that is the question. In a widely used 
library/framework/system with a large (or fast growing) install/user base such 
as the Solr community, the common practice is *not* to just break BWC without 
giving the users some grace period in which they can adjust their deployments 
to the new changes. Sometimes, it's absolutely necessary (such in the cases of 
bug fixes) but when it's not, in general it can create the opposite effect than 
you want with the community - instead having the community appreciate your 
improvements and see Solr as an "improving with time" product, they turn and 
see Solr as an inconsistent and sometime even unreliable product. So from my 
experience with delivering goods for the users, especially in the open source 
world (and I do have quite a bit of experience in that respect with the Spring 
Framework) you always need to strive to 100% BWC in theory and ~95% BWC in 
practice (never less than 90% though). If you stick to that, I believe changes 
will be widely accepted as improvements rather than harassments. 

But there's a catch here!!!! In order to stick to these numbers, you have to 
adhere to two important conditions:

1. You need to have a rather solid architecture and code base to start with. If 
you don't, then naturally in the beginning you can expect many more 
extreme/major changes which lead to quite a few BWC breaks (it will gradually 
be reduced as the architecture/codebase improves). Whether Solr answers this 
condition is open for debate... there are a lot of solid parts in Solr and 
quite a few parts where a complete rewrite is appropriate.

2. You need to have a steady and short release cycles. This is one thing that 
Solr lacks... big time. In a 1 year release cycle, deprecating code means that 
for the next year (in some cases two years), the code base will be messy with 
deprecated classes all over the place. In that respect, I can definitely 
understand Chris's objection for deprecation as the cleanup tasks that he's 
implementing may end up creating more mess (at least for a long while) than you 
had before the cleanup all together. I believe that moving to shorter release 
cycles (including bug-fix releases) will greatly help promoting deprecation in 
general.

(NOTE: just a small note about the first condition. One thing to take into 
account is that *every* piece of software reaches a point in time where it 
needs to be completely re-written or at least go through a *major* 
refactoring/re-architecturing phase. This can be caused by many factors, let it 
be new technologies that are introduced, or simply limitations of the 
architecture that were not foreseen. It's very important to understand and 
admit to this fact - even from the user point of view it's acceptable. What is 
not acceptable, if it happens too many times and too frequent) 

Bottom line, it's always a conflict between the user point of view and the 
developer point of view. And there needs to be a balance and understanding of 
both sides. Each side needs to understand and give in to some extend to create 
this balance. But to make it happen, the culture, environment and well defined 
policies need to be in place. Arguing endlessly who's right here will never 
bring to a good outcome, simply because both sides are right and wrong at the 
same time, if you treat it as a black or white issue you'll end up loosing 
something - either the user trust or a better software. How about creating a 
proper release plan for the upcoming year, say a release every two months? 
Chris, if you have such a release schedule, will you feel more comfortable with 
deprecation?

> Refactor SOLR package structure to include o.a.solr.response and move 
> QueryResponseWriters in there
> ---------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-1602
>                 URL: https://issues.apache.org/jira/browse/SOLR-1602
>             Project: Solr
>          Issue Type: Improvement
>          Components: Response Writers
>    Affects Versions: 1.2, 1.3, 1.4
>         Environment: independent of environment (code structure)
>            Reporter: Chris A. Mattmann
>            Assignee: Noble Paul
>             Fix For: 1.5
>
>         Attachments: SOLR-1602.Mattmann.112509.patch.txt, 
> SOLR-1602.Mattmann.112509_02.patch.txt, upgrade_solr_config
>
>
> Currently all o.a.solr.request.QueryResponseWriter implementations are 
> curiously located in the o.a.solr.request package. Not only is this package 
> getting big (30+ classes), a lot of them are misplaced. There should be a 
> first-class o.a.solr.response package, and the response related classes 
> should be given a home there. Patch forthcoming.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to