(For those who don't code, don't be intimidated by the code snippets in this question, they question is about approach to changing a design rather than the code design itself). Recently I put forward  a technical design that looks like thispublic class MyDatabaseLayer{    public ResponseCode runQuery(Query q)    {        try            {              //do database stuff           }        catch             {               //catch database exceptions (like bad username/password) and put them into a user friendly ResponseCode            }        return r;    }}However according to the 'throw early, catch late' principle, my design should look more like this:public class MyDatabaseLayer {    public ResponseCode runQuery(Query q) throws SomeDatabaseExceptions    {        //do database stuff without handling exceptions        return r;    }}The question is, it's already late in the design phase, and I've already thought about how the original solution would work. The project is quite simple, and so I'm sure that there will be no problems in either coding the solution, nor modifying it in the future. I think that changing the design at this stage is just going to delay it and have me going around in circles without actually delivering a working product. The question is, what techniques are there for dealing with this kind of issue, of whether I refactor the code to make it 'perfect' vs getting on and delivering it as 'good enough'? 
Changing a design later down the track seems time consuming for its value
design;decisions