The basic concept is to abstract out what changes.
If you have a set of logic that varies, consider the Strategy pattern. This involves a number of classes that all implement a single interface (or extend a single type, depending on what language you are using). The appropriate implementation is instantiated and injected into the calling object. This is frequently implemented using a dependency injection framework such as Spring.
For example, you might have your controlling class, something like Questionnaire, which for question 1, calls a method in the IQuestionOne interface. This interface is implemented by different classes depending on the year: QuestionOne2013 containing the 2013 logic and QuestionOne2014 containing the 2014 logic. You could then build a Questionaire for 2013 and have it reference the QuestionOne2013 implementation of IQuestionOne. Likewise, the Questionnaire for 2014 would use the QuestionTwo2014 implementation.
If the logic doesn't change, you can simply reuse the same implementation. So, perhaps question 2 (abstracted as the interface IQuestionTwo) has the same logic for both years--simply use the same implementation for either questionnaire.