Faits:
A. A.a X._, titulaire de la raison individuelle A._, a conclu un « contrat de développement » avec Y._, titulaire de la raison individuelle B._. Le contrat a été signé le 25 avril 2003 par X._ et le 28 avril 2003 par T._.
X._ était chargé, en qualité de développeur, de fournir un programme informatique en état de fonctionner adapté au besoin de Y._, le client.
Le contrat, qui débutait le 28 avril 2003, devait se terminer le 31 mai suivant. Il a été prolongé jusqu'à la fin du mois de juin 2003.
A.b Les parties sont convenues d'un prix horaire de 100 fr., hors TVA, payable sur facture mensuelle dans les dix jours; les heures de travail étaient fixées d'un commun accord entre les parties, mais le nombre d'heures maximum de travail par semaine, sauf accord particulier, était fixé à 10 heures.
Y._ a versé à X._ les sommes de 2'958 fr., le 5 juin 2003, de 3'443 fr.20, le 18 juillet 2003 et de 830 fr.90, à une date indéterminée.
A.c A la fin du mois de juin 2003, l'outil informatique n'avait toujours pas été élaboré.
B. B.a Le 3 juin 2004, X._ a saisi le Tribunal civil de l'arrondissement de la Sarine d'une demande en paiement. Il réclamait à Y._ le paiement de la somme de 29'129 fr., plus intérêts à 5% l'an dès le 4 novembre 2003, à titre d'honoraires et remboursement de ses impenses. Le défendeur a conclu au rejet de la demande et, reconventionnellement, au remboursement de 7'233 fr.10.
Par jugement du 11 septembre 2006, le Tribunal civil a rejeté la demande et la demande reconventionnelle.
B.b Le demandeur a interjeté appel contre ce jugement auprès de la Cour d'appel civil du Tribunal cantonal fribourgeois. Par arrêt du 28 mars 2008, le recours a été rejeté. Les motifs du jugement seront exposés ci-après dans la mesure utile à l'examen des griefs soulevés.
C. Le demandeur exerce un recours en matière civile et un recours constitutionnel subsidiaire. Il conclut à l'admission du recours, à l'annulation de la décision attaquée et à la condamnation du défendeur à lui verser la somme de 29'129 fr., plus intérêts à 5% l'an dès le 4 novembre 2003, à titre de paiement de ses honoraires et remboursement de ses avances.
Dans sa réponse, le défendeur propose le rejet du recours dans la mesure où il est recevable.
La cour cantonale n'a pas d'observations à formuler.

Considérant en droit:
1. 1.1 Dans son recours, intitulé « recours en matière civile et recours constitutionnel », le recourant soulève deux moyens: l'un est tiré de la violation du droit fédéral (art. 363 ss et 394 ss CO) et l'autre est tiré de la violation des articles 9 Cst. (application arbitraire des art. 363 ss et 394 ss CO) et 29 Cst. (droit à une décision motivée).
Le recourant prétend que les conditions de recevabilité du recours en matière civile et celles du recours constitutionnel subsidiaire sont remplies, dès lors que le litige soulève une question juridique de principe, pour le premier recours, et un problème se rapportant aux droits constitutionnels, pour le second recours.
Il convient d'emblée de préciser que le nouveau droit de procédure permet de se plaindre, dans le recours (ordinaire) en matière civile, d'une violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 3.1, 462 consid. 2.3). Le recourant, qui a réservé les griefs constitutionnels au recours constitutionnel subsidiaire, a donc manifestement confondu ce dernier recours prévu par la LTF avec l'ancien recours de droit public relevant de l'aOJ.
La voie du recours constitutionnel n'étant ouverte que si celle du recours en matière civile ne l'est pas (<ref-law>), il y a lieu d'examiner en premier lieu si les conditions de recevabilité du recours en matière civile sont réalisées. Si tel devait être le cas, les griefs constitutionnels seraient alors examinés dans le cadre de ce recours.
1.2 Le recours en matière civile n'est en principe recevable que si la valeur litigieuse minimale fixée par la loi est atteinte. Dans les causes qui ne relèvent pas du droit du travail ou du droit du bail à loyer, elle doit s'élever à 30'000 fr. au moins (<ref-law>). C'est le montant encore litigieux devant la dernière instance cantonale qui est déterminant (<ref-law>). En l'espèce, celui-ci est de 29'129 francs. La valeur litigieuse minimale n'est donc pas atteinte. Dans cette hypothèse, le recours en matière civile est exceptionnellement recevable si la contestation soulève une question juridique de principe (cf. <ref-law>; sur cette notion: <ref-ruling> consid. 1.2; <ref-ruling>). Il appartient au recourant d'exposer en quoi cette condition est réalisée (<ref-law>; <ref-ruling> consid. 2.2.2.1).
En l'occurrence, le recourant rappelle que le litige porte sur la qualification juridique du contrat d'informatique conclu avec la partie adverse. En guise de motivation, il soutient que cette question, qu'il qualifie de complexe, est controversée en doctrine et qu'en cela elle constitue une question juridique de principe. Il n'explique toutefois pas en quoi consiste la controverse et ne fait mention d'aucune référence doctrinale.
Il va sans dire que cette argumentation n'est pas conforme aux exigences de motivation posées à l'<ref-law>. Par ailleurs, le litige ne soulève aucune question juridique de principe, puisqu'il a trait à la qualification juridique d'un contrat en particulier - un contrat informatique -, qui se fait au regard des circonstances du cas d'espèce (cf. <ref-ruling> consid. 4b/bb). Il s'ensuit l'irrecevabilité du recours en matière civile.
Seul est donc recevable le recours constitutionnel subsidiaire (<ref-law>). Les conditions de recevabilité de ce recours sont en l'état réalisées, puisque le mémoire a été déposé en temps utile (art. 100 al. 1 et 117 LTF) contre une décision finale (art. 90 et 117 LTF) prise par une autorité cantonale de dernière instance (art. 75 al. 1 et 114 LTF). Il y a donc lieu d'entrer en matière sur le recours constitutionnel subsidiaire. Ce recours ne peut être interjeté que pour violation des droits constitutionnels (<ref-law>). Seuls les griefs expressément soulevés et motivés sont examinés (art. 117 et art. 106 al. 2 LTF).
2. Comme griefs constitutionnels, le recourant invoque une application arbitraire des art. 363 ss et 394 ss CO. Il dénonce également une violation du droit à une décision motivée, au sens de l'art. 29 Cst.
2. Comme griefs constitutionnels, le recourant invoque une application arbitraire des art. 363 ss et 394 ss CO. Il dénonce également une violation du droit à une décision motivée, au sens de l'art. 29 Cst.
2.1 2.1.1 Selon la jurisprudence, le droit d'être entendu, tel qu'il est garanti par l'art. 29 al. 2 Cst., implique notamment l'obligation pour le juge de motiver ses décisions, afin que le justiciable puisse les comprendre et exercer ses droits de recours à bon escient. Le juge doit ainsi mentionner, au moins brièvement, les motifs qui l'ont guidé et sur lesquels il a fondé sa décision, de manière à ce que l'intéressé puisse se rendre compte de la portée de celle-ci et l'attaquer en connaissance de cause, mais aussi à ce que l'autorité de recours puisse contrôler l'application du droit; il n'a toutefois pas l'obligation d'exposer et de discuter tous les faits, moyens de preuve et griefs invoqués par les parties, mais peut au contraire se limiter à ceux qui, sans arbitraire, apparaissent pertinents (<ref-ruling> consid. 4.1 et les arrêts cités).
2.1.2 Une décision est arbitraire au sens de l'art. 9 Cst. lorsqu'elle est manifestement insoutenable, méconnaît gravement une norme ou un principe juridique clair et indiscuté, ou encore heurte de manière choquante le sentiment de la justice et de l'équité. Il ne suffit pas que sa motivation soit insoutenable; encore faut-il que la décision apparaisse arbitraire dans son résultat. A cet égard, le Tribunal fédéral ne s'écarte de la solution retenue que si celle-ci apparaît insoutenable, en contradiction manifeste avec la situation effective, adoptée sans motif objectif et en violation d'un droit certain. Il n'y a pas arbitraire du seul fait qu'une autre solution paraît également concevable, voire même préférable (<ref-ruling> consid. 2.1; <ref-ruling> consid. 2, 217 consid. 2.1; <ref-ruling> consid. 2.1).
2.1.2 Une décision est arbitraire au sens de l'art. 9 Cst. lorsqu'elle est manifestement insoutenable, méconnaît gravement une norme ou un principe juridique clair et indiscuté, ou encore heurte de manière choquante le sentiment de la justice et de l'équité. Il ne suffit pas que sa motivation soit insoutenable; encore faut-il que la décision apparaisse arbitraire dans son résultat. A cet égard, le Tribunal fédéral ne s'écarte de la solution retenue que si celle-ci apparaît insoutenable, en contradiction manifeste avec la situation effective, adoptée sans motif objectif et en violation d'un droit certain. Il n'y a pas arbitraire du seul fait qu'une autre solution paraît également concevable, voire même préférable (<ref-ruling> consid. 2.1; <ref-ruling> consid. 2, 217 consid. 2.1; <ref-ruling> consid. 2.1).
2.2 2.2.1 L'autorité cantonale a jugé que les parties au litige étaient liées par un contrat d'entreprise et non pas par un contrat de mandat. Après avoir retenu que le recourant devait fournir un programme informatique en état de fonctionner adapté au besoin de l'intimé, les magistrats ont mentionné que celui qui, sur commande et à titre onéreux, développe un logiciel individualisé en fonction des besoins spécifiques de l'utilisateur est soumis aux règles ordinaires du droit du contrat d'entreprise. Ils ont ensuite indiqué que l'ouvrage (immatériel) promis consiste dans un programme « sur mesure » à développer sur la base des indications fournies par le partenaire contractuel et ont ajouté que, comme le résultat immatériel du travail intellectuel à fournir (le résultat de la « programmation ») est enregistré de manière perceptible sur un support électronique de données et ainsi « matérialisé », les caractéristiques du contrat d'entreprise sont également remplies de ce point de vue. L'autorité cantonale en a conclu que les prestations des parties devaient être examinées sous l'angle des art. 366 et 377 CO.
2.2.2 Au vu de l'argumentation développée par la juridiction cantonale, il est erroné de prétendre que cette autorité s'est contentée d'affirmer, en réponse au grief du recourant soutenant être lié par un contrat de mandat, qu'il « se trompe ». Partant de la constatation que le recourant s'était engagé à exécuter un programme informatique en état de fonctionner adapté au besoin de l'intimé, les magistrats ont clairement expliqué pour quelle raison ils considéraient que les parties étaient liées par un contrat d'entreprise et non de mandat. Le recourant a du reste été en mesure de contester le contenu du jugement entrepris. Le grief de violation de l'art. 29 Cst. tombe donc à faux.
2.3 Le recourant soutient encore que les constatations de fait à la base de la présente affaire conduisent manifestement à conclure à l'existence d'un contrat de mandat entre les parties. Il débute sa démonstration en se référant « intégralement à sa motivation sous ch. I ci-dessus », soit au grief développé en lien avec la violation des art. 363 ss et 394 ss CO. Ce renvoi n'est d'aucun secours au recourant, dès lors que le grief auquel il se réfère ne fait pas la démonstration de l'arbitraire dans l'application du droit fédéral. Pour le surplus, il convient d'observer que le recourant ne remet pas en cause la constatation de fait, qui fonde le raisonnement de la cour, selon laquelle le recourant devait fournir un programme informatique en état de fonctionner adapté au besoin de l'intimé; il ne prétend pas plus qu'il est insoutenable pour l'autorité cantonale d'avoir qualifié la prestation à fournir d'ouvrage au sens de l'<ref-law>. Dans ces circonstances, l'argumentation du recourant ne peut qu'être vouée à l'échec.
3. Par conséquent, le recours constitutionnel subsidiaire est rejeté dans la mesure de sa recevabilité.
4. Compte tenu de l'issue du litige, les frais judiciaires et dépens sont mis à la charge du recourant, qui succombe (art. 66 al. 1 et 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours en matière civile est irrecevable.
2. Le recours constitutionnel subsidiaire est rejeté dans la mesure de sa recevabilité.
3. Les frais judiciaires, arrêtés à 2'000 fr., sont mis à la charge du recourant.
4. Une indemnité de 2'500 fr., à payer à l'intimé à titre de dépens, est mise à la charge du recourant.
5. Le présent arrêt est communiqué aux mandataires des parties et à la Ire Cour d'appel civil du Tribunal cantonal de l'Etat de Fribourg.
Lausanne, le 26 août 2008
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
Le Président: La Greffière:
Corboz Crittin