Sharing a template with identical category and tag name
If the url for posts with the category design is .com/news/design and the url for posts with the tag design is also .com/news/design, then you are not going to be able to see both lists. You do need that extra segment in the url.

What I do to stay DRY is let Craft route tags and categories to different templates (so you don't have to repeat the is this a category or a tag logic). Then on the different templates, use a macro or include for the common code.

Here is what the categories page looks like with a macro:

{% extends '_layout' %}
{% import '_macros/_news' as news %}

{% set newsPosts = craft.entries.section('news')relatedTo(category).limit(5) %}

{% block content %}
  &lt;h1&gt;Entries with category {{category.title}}&lt;/h1&gt;
  {{ news.index(newsPosts) }} {# all the shared code is in news.index() #}
{% endblock content %}