I'm currently working for small company that has few technically complicated products. I'm the one and only developer for one of them. About a year ago, I got the legacy version of the product and started "supporting" it.
Customer only talks about new feature, business value and others of that kind. The problem is, though the code is in C#, it's quite procedural. There are no abstractions, classes are only used where Visual Studio requires them - Forms, for instance. The implementations of these classes are really awful and the code is really hard to maintain.
For all these year I spend my own time for refactoring. In the latest version, there are pretty abstractions and such. I had to reimplement a number of components from scratch and I really feel that adding new feature or changing behavior to these components is MUCH easier than to others.
The problem is, I spend my own time. I really like the results, but I don't like working 12 hours per day. Have you ever been to similar situation? What should I try? I've already tried discussing it, but still no success.
I'm just scared of the moment when we decide implementing the new feature that requires a lot of changes to the legacy code. That just could be shocking to the customer: why do you need 8 hours for changing these icons? The customer just doesn't care that there are 500 places in the code that I need to change. And I should also find all these 500 places first.
Any ideas?