Sachverhalt:
A.
Am 13. beziehungsweise 16. Januar 2012 schlossen B._ (Kläger, Beschwerdegegner) und A._ (Beklagter, Beschwerdeführer) einen Vertrag für Architekturleistungen betreffend das Einfamilienhaus von A._ in U._ ab. Darin wurde B._ für die Projektierung, die Erstellung der Werkplanung inklusive Detailabklärungen, die Erstellung der Kostenvoranschläge, die Ausschreibungen und Vergabe, die Bauführung und Bauabrechnung sowie die Übergabe und Garantiearbeiten beauftragt. Die Parteien vereinbarten ein Festhonorar von Fr. 50'000.-- zuzüglich Fr. 4'000.-- MWSt. In der Folge wurde das Einfamilienhaus erstellt.
B.
B.a. Am 22. Mai 2017 reichte B._ beim Zivilgericht des Kantons Basel-Stadt eine Klage ein, mit der er verlangte, A._ sei zu verurteilen, ihm Fr. 32'582.40 nebst Zins zu bezahlen. Er begründete diese Forderung mit Zahlungsausständen in Bezug auf das Architektenhonorar.
A._ beantragte, es sei auf die Klage nicht einzutreten beziehungsweise sei sie abzuweisen. Eventualiter begehrte er die Abweisung der Klage zufolge Verrechnung. Die Verrechnungsforderung begründete er mit einer Überschreitung des vereinbarten Kostendachs, einer unzulänglichen Bauleitung sowie der Erstellung mangelhafter Pläne.
Mit Entscheid vom 3. Juli 2019 verurteilte das Zivilgericht A._, B._ Fr. 24'344.85 nebst Zins zu bezahlen. Im Übrigen wies es die Klage ab.
B.b. Die dagegen von A._ erhobene Berufung hiess das Appellationsgericht des Kantons Basel-Stadt mit Entscheid vom 24. Mai 2020 gut. Es wies die Sache zur neuen Entscheidung an das Zivilgericht zurück. In der Sache schloss das Appellationsgericht, es stehe fest, dass A._ B._ den Betrag von Fr. 24'344.85 (für Honorar und dergleichen) schulde. Zu prüfen bleibe aber, ob A._ verrechnungsweise eine Schadenersatzforderung wegen fehlerhafter Pläne geltend machen könne.
B.c. Mit Entscheid vom 14. Dezember 2020 kam das Zivilgericht zum Ergebnis, dass sich die von A._ zur Verrechnung gestellte Schadenersatzforderung als unbegründet erweise. Es verurteilte ihn (wie schon im ersten Entscheid vom 3. Juli 2019), B._ Fr. 24'344.85 nebst Zins zu bezahlen, und wies die Klage im Übrigen ab.
B.d. A._ focht auch dieses Urteil mit Berufung beim Appellationsgericht an. Er hielt an der Verrechnung fest.
Das Appellationsgericht wies die Berufung mit Entscheid vom 3. August 2021 ab. Es erwog, dass A._ erstens keine rechtsgenügliche Mängelrüge erhoben habe und das "Planwerk" folglich als genehmigt gelte, dass es aber ohnehin - zweitens - an einem schlüssigen Tatsachenvortrag hinsichtlich des Bestands des verrechnungsweise geltend gemachten Mangelfolgeschadens fehle sowie dass drittens der Kausalzusammenhang zwischen den vorgebrachten "Planwerksmängeln" und dem behaupteten Schaden nicht substanziiert dargelegt worden sei.
C.
A._ verlangt mit Beschwerde in Zivilsachen und subsidiärer Verfassungsbeschwerde, der Entscheid des Appellationsgerichts sei aufzuheben und "die Klage des Beschwerdegegners im Betrag von CHF 24'344.85 zuzüglich der bereits im gerichtlichen Vergleich vom 26. Januar 2018 bedingt bezahlten CHF 15'000 zuzüglich Zins zu 5% seit 26. Januar 2018 [sei] infolge Verrechnung bis zu dieser Höhe abzuweisen", unter "ausgangsgemäss[er]" Verteilung der Kosten des kantonalen Verfahrens.
Vorinstanz und Beschwerdegegner beantragen Nichteintreten beziehungsweise Abweisung der Beschwerde. Der Beschwerdeführer hat eine Replik eingereicht.
Mit Präsidialverfügung vom 19. November 2021 wurde das vom Beschwerdeführer gestellte Gesuch um Erteilung der aufschiebenden Wirkung abgewiesen.

Erwägungen:
1.
Der angefochtene Entscheid des Appellationsgerichts ist ein Endentscheid (<ref-law>) einer Vorinstanz im Sinne von <ref-law>.
2.
2.1. Der Streitwert bestimmt sich nach den Begehren, die vor der Vorinstanz streitig geblieben waren (<ref-law>).
Das Zivilgericht verurteilte den Beschwerdeführer erstinstanzlich zur Zahlung von Fr. 24'344.85 und wies die Klage im Übrigen ab. Der Beschwerdeführer verlangte mit Berufung die Abweisung der Klage (auch) im Umfang von Fr. 24'344.85 zufolge Verrechnung. Der Beschwerdegegner beantragte in der Berufungsantwort die Abweisung der Berufung und die Bestätigung des erstinstanzlichen Entscheids. Damit waren im vorinstanzlichen Verfahren - so auch nach den Feststellungen des Appellationsgerichts - Fr. 24'344.85 strittig.
Der Beschwerdeführer beruft sich auf einen "bedingte[n] Vergleich", den er mit dem Beschwerdegegner während des erstinstanzlichen Verfahrens abgeschlossen habe. Er behauptet, sich darin für den Fall, dass "die Klage nicht abgewiesen würde", die Rückforderung von Fr. 15'000.-- vorbehalten zu haben. Der "effektive Streitwert" sei dementsprechend höher. Indes fallen Vorbehalte bei der Bestimmung des Streitwerts nicht in Betracht (<ref-law>) und war der vom Beschwerdeführer ins Feld geführte Vorbehalt denn auch nicht Gegenstand des Verfahrens vor Appellationsgericht, wie dieses ausdrücklich festgestellt hat.
2.2. Der Streitwert erreicht die Grenze von Fr. 30'000.-- gemäss <ref-law> somit nicht. Unter diesen Umständen ist die Beschwerde in Zivilsachen nach <ref-law> dennoch zulässig, wenn sich eine Rechtsfrage von grundsätzlicher Bedeutung stellt. Der Beschwerdeführer macht geltend, dies sei der Fall.
Eine Rechtsfrage von grundsätzlicher Bedeutung liegt vor, wenn ein allgemeines und dringendes Interesse besteht, dass eine umstrittene Frage höchstrichterlich geklärt wird, um eine einheitliche Anwendung und Auslegung des Bundesrechts herbeizuführen und damit eine erhebliche Rechtsunsicherheit auszuräumen (<ref-ruling> E. 1 S. 165; <ref-ruling> E. 1.2; <ref-ruling> E. 1.2 S. 210; je mit weiteren Hinweisen). Ist eine Beschwerde nur unter der Voraussetzung zulässig, dass sich eine Rechtsfrage von grundsätzlicher Bedeutung stellt, so ist in der Beschwerde auszuführen, warum diese Voraussetzung erfüllt ist (<ref-law>).
Der Beschwerdeführer wirft der Vorinstanz eine "Bundesrechtswidrige Anwendung des Vertrauensprinzips" sowie eine "Bundesrechtswidrige Auslegung der Mängelrüge bei Planungs- und Werkmängel[n]" vor. Er schildert seine Sicht der Dinge und schliesst, die vorinstanzliche Auslegung der streitgegenständlichen Willenserklärungen sei "unsinnig". In der Beschwerde wird dagegen nicht ansatzweise auf <ref-law> und die zu dieser Bestimmung entwickelten Voraussetzungen Bezug genommen. Der Beschwerdeführer macht nicht geltend, hinsichtlich der von ihm aufgeworfenen "Fragen" bestünde eine erhebliche Rechtsunsicherheit, noch tut er dar, inwiefern sie höchstrichterlicher Klärung bedürften. In der Beschwerde wird namentlich nicht ausgeführt, in welcher Hinsicht ein Rechtsproblem kontrovers sein soll, geschweige denn ist erkennbar, inwiefern eine Rechtsfrage geklärt werden soll, die über die Anwendung von Grundsätzen der Rechtsprechung auf den konkreten Fall hinausgeht. Die Ausführungen genügen den Begründungsanforderungen von <ref-law> offensichtlich nicht.
2.3. Die Beschwerde in Zivilsachen ist nicht zulässig. Es ist nicht darauf einzutreten.
3.
3.1. Folglich steht die vom Beschwerdeführer ebenfalls erhobene subsidiäre Verfassungsbeschwerde im Sinne der Art. 113-119 BGG offen.
3.2. Mit der Verfassungsbeschwerde kann die Verletzung von verfassungsmässigen Rechten gerügt werden (<ref-law>). Diesbezüglich gilt eine qualifizierte Rügepflicht. Die Verletzung von Grundrechten prüft das Bundesgericht nicht von Amtes wegen, sondern nur insofern, als eine solche Rüge in der Beschwerde vorgebracht und begründet worden ist (Art. 117 in Verbindung mit <ref-law>). Dies bedeutet, dass klar und detailliert anhand der Erwägungen des angefochtenen Entscheids darzulegen ist, inwiefern verfassungsmässige Rechte verletzt worden sein sollen (<ref-ruling> E. 1.2; <ref-ruling> E. 3.2; je mit weiteren Hinweisen).
Allgemein gehaltener Tadel ist folglich nicht zu hören. Dies gilt etwa für den in der Beschwerde formulierten Vorwurf, der Beschwerdegegner verhalte sich "insgesamt stossend und rechtsmissbräuchlich," und gleichermassen für die Kritik, die Vorinstanz habe nach dem Rückweisungsentscheid in Verletzung des Anspruchs auf rechtliches Gehör "keinerlei Verfahrensschritte" mehr unternommen.
3.3. Der Beschwerdeführer rügt eine Verletzung seines Anspruchs auf ein unabhängiges und unparteiisches Gericht (<ref-law>).
3.3.1. Er moniert zunächst, dass "sowohl die erste Instanz als auch die Appellationsinstanz in beiden Entscheiden in gleicher Besetzung entschieden". Er bemängelt mit anderen Worten, dass sich nach der Rückweisung jene Zivil- und Appellationsrichter (ein zweites Mal) mit der Sache befassten, die bereits an den ersten Entscheiden beteiligt gewesen waren. Dieser Umstand als solcher ist indes nicht zu beanstanden (statt vieler: <ref-ruling> E. 3.6 S. 120; Urteile 4A_524/2019 vom 4. März 2020 E. 3.2; 5A_203/2017 vom 11. September 2017 E. 3).
3.3.2. Sodann wendet er sich im Besonderen gegen die Zusammensetzung des erstinstanzlichen Spruchkörpers. Er kritisiert die "Basler Besonderheit", wonach der Präsident der ersten Instanz auch als Schlichter amte, und weiter, dass sich das Zivilgericht im zweiten Urteil nicht an die Erwägungen im Rückweisungsentscheid gehalten und überdies das rechtliche Gehör nur unzureichend gewährt habe. All dies erwecke "Zweifel an der Unparteilichkeit" der erstinstanzlichen Gerichtspersonen.
Der Beschwerdeführer übergeht, dass der Entscheid des Zivilgerichts kein zulässiges Anfechtungsobjekt der Beschwerde an das Bundesgericht ist (vgl. <ref-law>). Er hat es unterlassen, diese Rügen bereits im Berufungsverfahren vorzutragen. Dabei hat es sein Bewenden (vgl. <ref-ruling> E. 1.1).
3.3.3. Dem Appellationsgericht wirft er vor, in den beiden Berufungsurteilen "widersprüchlich" entschieden zu haben. Das "ganze Verfahren [erwecke] den Eindruck, dass die Honorarforderung gutgeheissen werden soll, egal mit welcher Begründung und obwohl ein Schaden feststeht, der die Honorarforderung bei weitem überschreitet". Diese Kritik ist nicht geeignet, einen Befangenheitsgrund im Sinne von <ref-law> aufzuzeigen.
3.4. Der Beschwerdeführer erhebt sodann in inhaltlicher Hinsicht verschiedene Beanstandungen.
3.4.1. Dazu ist festzuhalten, dass der angefochtene Entscheid auf einem dreifach begründeten Fundament steht: Das Appellationsgericht kam zum Ergebnis, dass (i) das "Planwerk" mangels wirksamer Planmängelrüge vom Beschwerdeführer genehmigt worden sei, dieser (ii) den Bestand des Mangelfolgeschadens nicht schlüssig dargetan habe und es (iii) am Kausalzusammenhang mangle (siehe Sachverhalt Bst. B.d). Aus diesen Gründen könne die behauptete Schadenersatzforderung des Beschwerdeführers nicht zur Verrechnung gebracht werden.
Der Beschwerdeführer müsste alle drei (Eventual-) Begründungen, die je für sich allein das Urteil stützen, als verfassungswidrig ausweisen, um die Klagegutheissung zu Fall zu bringen.
3.4.2. Dies gelingt ihm jedenfalls hinsichtlich der Begründungen (ii) und (iii) nicht:
Er greift diese Erwägungen zwar in Ziffer III.3 seiner Beschwerde (zumindest der Form nach) an (Rz. 56-61), führt aber (unter Hinweis auf <ref-law>) einzig aus, dass die Verrechnungseinrede "auf einer Offerte [beruhe], die ins Recht gelegt wurde und anlässlich der Hauptverhandlung im ersten Prozess durch die effektiven Rechnungen belegt wurde". Die "Existenz" der zur Verrechnung gebrachten Forderung sei "damit" erstellt. Ohnehin gehe es bei der Substanziierung von Forderungen aus Schadenersatz "nur darum, diesen durch Rechnungen soweit zu belegen, dass die Höhe der Gegenforderung erfasst ist". "Als Fazit" könne festgehalten werden, dass die Vorinstanzen "unlogisch" entschieden hätten.
Eine hinreichend begründete Verfassungsrüge stellt dies nicht dar. Dass der Beschwerdeführer die Kritik unter den Titel "Aktenwidrigkeit, Verletzung des rechtlichen Gehörs" stellt, ändert daran nichts.
3.5. Die subsidiäre Verfassungsbeschwerde ist abzuweisen, soweit darauf eingetreten werden kann.
4.
Bei diesem Ausgang des Verfahrens wird der Beschwerdeführer kosten- und entschädigungspflichtig (Art. 66 Abs. 1 und Art. 68 Abs. 1 und 2 BGG).

Demnach erkennt das Bundesgericht:
1.
Auf die Beschwerde in Zivilsachen wird nicht eingetreten.
2.
Die subsidiäre Verfassungsbeschwerde wird abgewiesen, soweit darauf einzutreten ist.
3.
Die Gerichtskosten von Fr. 2'000.-- werden dem Beschwerdeführer auferlegt.
4.
Der Beschwerdeführer hat den Beschwerdegegner für das bundesgerichtliche Verfahren mit Fr. 2'500.-- zu entschädigen.
5.
Dieses Urteil wird den Parteien und dem Appellationsgericht des Kantons Basel-Stadt, Dreiergericht, schriftlich mitgeteilt.
Lausanne, 24. Januar 2022
Im Namen der I. zivilrechtlichen Abteilung
des Schweizerischen Bundesgerichts
Die Präsidentin: Hohl
Der Gerichtsschreiber: Stähle