I’m pretty sure most of us are familiar with the concept of a project’s requirements changing after it starts, this becomes more and more of an issue the less the client knows about how things work and the closer you work with them.
How then can I design a system (specifically a website but general advice will probably be best here) so that smallish changes can be made, are there any programming strategies that deal with this issue?
All the normal oo principles apply here, reduce coupling, increase cohesion, don’t repeat yourself etc. This will make sure you have a flexible and extendible code base.
Apart from that don’t try to preempt change. Apply YAGNI (You aint gonna need it) everywhere. Only build stuff you know your users need. Dont build stuff you think you’re going to need. You’re more likely to guess wrong and then you’ve got a bunch of code that’s probably only in the way.