Faits :
A.
Par une offre du 8 juillet 2003 déposée suite à un appel d'offre de la société A._ SA (ci-après: la mandante, la défenderesse, la recourante), la société B._ SA (ci-après: la mandataire, la demanderesse, l'intimée), ingénieur civil, s'est engagée dans le cadre d'un projet de construction d'un ensemble immobilier comprenant deux immeubles et un parking sis sur la commune de U._.
Suite à l'émergence de différends dans le déroulement de la réalisation du projet de construction entre 2008 et 2009, la mandante a résilié le 9 juillet 2009 le mandat de la mandataire pour l'un des deux immeubles, pour qu'elle se concentre sur l'autre immeuble et le parking. La mandataire a contesté cette résiliation qu'elle a considéré comme intervenant en temps inopportun et a contesté les reproches formulés à son encontre. La mandataire a suspendu toutes ses activités sur le chantier et a facturé le solde de ses honoraires. Elle a invoqué une exception d'inexécution au sens de l'<ref-law> et indiqué surseoir à l'exécution de ses prestations tant que la mandante ne se serait pas acquittée des montants ouverts, qui lui étaient dus.
Pour terminer les travaux, la mandante a dû confier l'exécution de ceux-ci à un autre ingénieur civil, l'entreprise C._ SA dont la note d'honoraires finale a dépassé de 52'000 fr. le montant de l'offre de la mandataire.
B.
A la suite de l'échec de la conciliation et la délivrance d'une autorisation de procéder, la mandataire a déposé une demande en justice le 14 octobre 2011 contre la mandante en concluant à ce que cette dernière soit condamnée à lui verser la somme de 108'000 fr. avec intérêts à 5% l'an dès le 9 juillet 2009, montant correspondant au dommage qu'elle considérait avoir subi en raison de l'inexécution de la mandante.
Par réponse et demande reconventionnelle du 27 février 2012, la mandante a conclu au rejet de la demande et, reconventionnellement, à ce que la mandataire soit condamnée à lui verser la somme de 411'381 fr. avec intérêts à 5% l'an dès le dépôt de la réponse. Ce montant correspond aux divers manquements dans l'exécution du mandat ainsi qu'à un surcoût engendré par le changement de mandataire en cours d'exécution.
Par jugement du 30 juin 2020, le tribunal civil a rejeté la demande et la demande reconventionnelle et a réparti les frais judiciaires à hauteur d'un cinquième à charge de la mandataire et de quatre cinquièmes à charge de la mandante.
Statuant sur appel de la mandante et appel joint de la mandataire, la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel a rejeté l'appel et déclaré l'appel joint irrecevable.
En substance, sur la reconvention, la cour cantonale a considéré que la mandante n'avait pas réussi à prouver son dommage. La cour cantonale s'est déclarée convaincue que l'entreprise appelée pour remplacer la mandataire s'était vu confier des travaux différents, demandés par le client final, de ceux commandés à l'origine, ce qui impliquait que les surcoûts n'étaient pas imputables aux manquements de la mandataire, mais à une modification de la commande.
C.
Contre cet arrêt qui lui a été notifié le 12 janvier 2021, la mandante a interjeté un recours en matière civile au Tribunal fédéral le 10 février 2021. Elle conclut principalement à son annulation et à sa réforme en ce sens que la mandataire soit condamnée à lui verser le montant de 52'000 fr. avec intérêts à 5% l'an dès le 27 février 2012; subsidiairement elle conclut au renvoi de la cause à la cour cantonale pour nouvelle décision dans le sens des considérants. Elle se plaint de constatation arbitraire des faits et de violation de l'<ref-law>, ainsi que de l'art. 29 al. 2 Cst.
La mandataire intimée conclut au rejet du recours.
La cour cantonale se réfère à ses considérants.

Considérant en droit :
1.
Interjeté en temps utile (<ref-law>) par la partie qui a succombé dans ses conclusions (<ref-law>), dirigé contre un arrêt final (<ref-law>) rendu sur appel par un tribunal cantonal supérieur (<ref-law>) dans une affaire de mandat (<ref-law>), dont la valeur litigieuse atteint le seuil de 30'000 fr. requis en la matière (<ref-law>), le recours en matière civile est recevable au regard de ces dispositions.
2.
2.1. Le recours en matière civile peut être exercé pour violation du droit fédéral (<ref-law>), y compris le droit constitutionnel (<ref-ruling> consid. 2.1 p. 247; <ref-ruling> consid. 2.4 p. 313). Le Tribunal fédéral applique le droit d'office (<ref-law>). Compte tenu de l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine en principe que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes. Il n'est pas tenu de traiter, comme le ferait une autorité de première instance, toutes les questions juridiques qui se posent, lorsque celles-ci ne sont plus discutées devant lui (<ref-ruling> consid. 2, 115 consid. 2; <ref-ruling> consid. 1.3). Par exception à la règle selon laquelle il applique le droit d'office, il n'examine la violation d'un droit constitutionnel que si le grief a été invoqué et motivé de façon détaillée (<ref-law>; <ref-ruling> consid. 2.3; <ref-ruling> consid. 1.3; <ref-ruling> consid. 1.4 in fine).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Relèvent de ces faits tant les constatations relatives aux circonstances touchant l'objet du litige que celles concernant le déroulement de la procédure conduite devant l'instance précédente et en première instance, c'est-à-dire les constatations ayant trait aux faits procéduraux (<ref-ruling> consid. 1.3.1 et les références citées). Le Tribunal fédéral ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes, c'est-à-dire arbitraires (<ref-ruling> consid. 1.3.1 p. 253; <ref-ruling> consid. 2; <ref-ruling> consid. 1.5) ou ont été établies en violation du droit au sens de l'<ref-law> (<ref-law>). Encore faut-il que la correction du vice soit susceptible d'influer sur le sort de la cause (<ref-law>).
3.
La recourante se plaint d'arbitraire de la cour cantonale dans l'établissement des faits relatifs à son dommage.
3.1. La cour cantonale a considéré que la recourante n'avait pas réussi à démontrer que les prestations exécutées par C._ SA en remplacement de l'intimée étaient identiques à celles confiées initialement à celle-ci. La cour cantonale s'est fondée sur le témoignage de D._, qui a mentionné que des modifications au projet adjugé initialement à l'intimée ont été demandées par le client final, et que de telles modifications étaient courantes. La cour cantonale a retenu que lorsque D._ avait indiqué avoir respecté son offre de base, la recourante n'avait pas démontré que cette offre était identique à celle de l'intimée. La cour cantonale a encore retenu que le tableau des prestations établi par expertise judiciaire ne la convainquait pas de l'identité des prestations fournies par l'intimée et par C._ SA et qu'il n'avait d'ailleurs pas vocation à établir ce fait. En outre ce tableau n'excluait pas que des travaux supplémentaires aient été exécutés par C._ SA.
3.2. A ces constatations, la recourante oppose sa version des faits reposant sur le tableau des prestations sans toutefois expliquer en quoi il permettrait de démontrer que la cour cantonale serait arrivée à une conclusion insoutenable en considérant qu'il ne permettait pas d'exclure la réalisation de travaux supplémentaires par C._ SA. La raison de l'intervention de C._ SA, à savoir pour pallier la suspension des travaux et les manquements de l'intimée, ne contredit pas la constatation de la cour cantonale qui a été convaincue du fait que C._ SA avait réalisé des modifications commandées par le client final, par rapport à l'offre de l'intimée.
La recourante ne démontre donc pas en quoi la cour cantonale a versé dans l'arbitraire en se fondant sur un témoignage plutôt que sur d'autres pièces invoquées. Elle ne démontre pas plus quels autres titres contrediraient l'état de fait retenu par la cour cantonale ni en quoi la cour cantonale n'en aurait pas tenu compte de manière insoutenable. Le moyen tiré de l'arbitraire (art. 9 Cst.) est dès lors infondé.
4.
Il est par conséquent superflu d'examiner le grief de la recourante qui se plaint de déni de justice de la cour cantonale, qui n'aurait pas examiné les conditions de l'<ref-law>. En effet, la cour cantonale ayant considéré que la recourante n'a pas démontré son dommage, il importe peu de déterminer si l'intimée a résilié le mandat en temps inopportun.
5.
Au vu de ce qui précède, le recours doit être rejeté, aux frais de son auteur (art. 66 al. 1 et 68 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 2'500 fr. sont mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 3'000 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux mandataires des parties et à la Cour d'appel civile du Tribunal cantonal du canton de Neuchâtel.
Lausanne, le 19 juillet 2021
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La Présidente : Hohl
Le Greffier : Botteron