What’s the best practice in closing a topic? When do you decide if you should close the post? When do you leave the topic open even after it’s been resolved?
It depends on the content of the topic and the category in which it was written.
For example, in the support category ("I have a problem, help me!!1!) it is useful to close the topic after a post has been marked as a solution. The time depends on the nature of the forum itself, it could be a few hours or even months.
Here on Meta we do not leave open solved topics, but we have adopted a very simple system, that many users adopt, they flag to contact the moderators asking that the topic X be reopened because they want to add / modify / ask something. This system works very well for us.
Some topics are closed obviously when they run out of function, or they become obsolete because they are too old, or because they are extremely controversial (we like lively discussions if they have a purpose and when remain within the limits of “criticizing the idea and not the user”, otherwise it is better to close them).
So is it safe to say that by default, you keep the topics open, except when: (1) issue resolved (2) controversial (3) outdated? e.g. you don’t necessarily close topics in general.
There are obviously many way of approaching this and what works best will depend on the nature of your forum. For example, the rule of flagging to re-open requires a very technically advanced user base. I would even go as far as saying that it always puts new users at a disadvantage as they will not know the rule and be annoyed at the closed topic.
So the way I’d recommend to think about closing topics is to ask yourself: why should a topic be closed at all or: which types of topics on my forum should be closed at all. The main reason is obviously that you want to keep seperate things separate and prevent people from piggybacking on a topic that they feel is somehow related to what they want to say (this kind of huge multi-topic threads seem to be officially encouraged on many non-discourse forums because they lack the advanced ways of linking related topics with each other, so when users who were educated this way come to a Discourse forum, they need to be un-taught that practice). Certain topics are particularly prone to this behaviour and once you figured out which ones those are on your forum, you can preemptively close those rather early, when the discussion appears to have been concluded (using a topic timer based on last reply is a good middle way here).
So I don’t have a perfect recipe or set of rules for closing and not-closing topics. What I’d like to suggest is merely to try and close as few topics as possible and to carefully consider that for your users, not being able to reply to a topic that they want to reply to is almost alway a nuisance so that you want to have a good reason for annoying your users.
Plus, you probably want to make sure your users understand that reason (Note that you can edit the closing post and explain that people can flag to reopen or refer them to another topic or whatever they need to know to not be annoyed).