{"id":116,"date":"2026-09-23T13:53:10","date_gmt":"2026-09-23T12:53:10","guid":{"rendered":"https:\/\/arrowlancer.ma\/blog\/?p=116"},"modified":"2026-09-23T13:53:10","modified_gmt":"2026-09-23T12:53:10","slug":"it-rfp-morocco-how-to-write-2026","status":"publish","type":"post","link":"https:\/\/arrowlancer.ma\/blog\/en\/it-rfp-morocco-how-to-write-2026\/","title":{"rendered":"IT RFP Morocco 2026: how to write one buyers can price"},"content":{"rendered":"<p>A good request for proposals does not describe a solution. It describes a need precisely enough that three different providers send you three quotes you can lay side by side. If your responses range from 80,000 MAD to 450,000 MAD for \u201cthe same\u201d project, the problem is almost never the providers \u2014 it is the document you sent them.<\/p>\n<p>This guide is for the owner or IT manager of a Moroccan SME about to issue a call for tenders \u2014 website, ERP, cloud migration, AI project \u2014 who has never formally written a spec. It is not about picking the provider. It is about the document that comes just before that choice.<\/p>\n<p>Budget one to three weeks of internal work to produce something useful, including interviews with the teams who will use the tool. That is cheap next to the six months a vague scope will cost you.<\/p>\n<h2>Why a vague spec costs you money on the very first quote<\/h2>\n<p>A serious provider prices what it reads. When a requirement is ambiguous, it has three options: ask (once, not fifteen times), price the risk in, or not bid at all. All three cost you something \u2014 and the third one removes exactly the teams you wanted.<\/p>\n<p>Take an ordinary line: \u201cbrochure site with a client area\u201d. Depending on the reading, a client area is a password-protected form (around 15,000 MAD) or a portal with invoices, documents, roles, history and an ERP connection (200,000 MAD and up). Both readings are honest. Neither is comparable to the other.<\/p>\n<p>The real danger is not the expensive quote \u2014 it is the cheap one. Whoever priced the minimal version wins the tender, then discovers the rest mid-project. You pay for it in change orders, delays and friction, which is the expensive way. A written scope protects you first.<\/p>\n<h2>IT RFP Morocco checklist: the sections you cannot skip<\/h2>\n<p>A good document is often 8 to 20 pages. Length is not a sign of quality; structure is. These are the sections that actually let someone put a number on your project.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/storage.googleapis.com\/arrowlancer-prod.firebasestorage.app\/blog-ma\/cahier-des-charges-it-maroc-2026\/1.jpg\" alt=\"IT RFP Morocco 2026: how to write one buyers can price\" loading=\"lazy\" \/><\/p>\n<ul>\n<li><strong>Context<\/strong>: who you are, sector, headcount, number of sites, and what is triggering the project now.<\/li>\n<li><strong>Business objectives with numbers<\/strong>: \u201ccut invoicing time from 5 days to 1\u201d, not \u201cmodernise our processes\u201d.<\/li>\n<li><strong>Scope in and scope out<\/strong>: the most useful section in the document. Write down in plain words what is <em>not<\/em> included.<\/li>\n<li><strong>Current technical estate<\/strong>: software in place and versions, current hosting, available APIs, who controls the domain and the accounts.<\/li>\n<li><strong>Functional requirements<\/strong>: listed, numbered, prioritised (must have \/ nice to have \/ later).<\/li>\n<li><strong>Non-functional requirements<\/strong>: data volumes, concurrent users, expected availability, languages (FR, AR, EN), mobile usage, performance on Moroccan networks.<\/li>\n<li><strong>Data and compliance<\/strong>: what personal data is processed, where you want it hosted, obligations under Law 09-08.<\/li>\n<li><strong>Deliverables<\/strong>: source code, documentation, training, knowledge transfer, handover of credentials.<\/li>\n<li><strong>Timeline and milestones<\/strong>, built around the business dates that genuinely matter.<\/li>\n<li><strong>How to respond<\/strong>: deadline, expected format, a named contact, selection criteria and their weighting.<\/li>\n<\/ul>\n<p>If you cannot yet fill in \u201cobjectives with numbers\u201d and \u201ccurrent estate\u201d, a step is missing upstream: a short framing exercise or a <a href=\"https:\/\/arrowlancer.ma\/blog\/en\/digital-transformation-audit-cost-morocco-2026\/\">digital transformation audit<\/a> beats writing a spec blind.<\/p>\n<h2>Describing the need without dictating the solution<\/h2>\n<p>The classic SME mistake is writing \u201cwe want a WordPress site with a booking plugin\u201d when the real need is \u201cour clients must be able to book a slot and pay a deposit online\u201d. Dictate the solution and you inherit responsibility for the technical choice \u2014 and you lose the providers who would have proposed something better, cheaper or easier to maintain.<\/p>\n<p>The formula that works: describe <strong>what the user must be able to do<\/strong>, <strong>how often<\/strong>, and <strong>why<\/strong>. \u201cA sales rep must be able to create a quote from a phone in under 2 minutes, up to 40 times a day, sometimes in areas with poor coverage.\u201d That sentence contains an offline requirement that \u201cmobile quoting app\u201d does not.<\/p>\n<p>Some constraints are entirely legitimate to impose: a mandatory integration with your accounting software, CMI payment, an internal team that only knows one stack, hosting inside Morocco. Write them down with the reason behind them. Providers happily accept a justified constraint; they get nervous about an arbitrary one. And if the package-versus-custom question is still open, leave the door open and ask bidders to argue their case \u2014 that is exactly the <a href=\"https:\/\/arrowlancer.ma\/blog\/en\/saas-vs-custom-software-morocco-2026\/\">SaaS or custom software<\/a> trade-off.<\/p>\n<h2>Should you disclose your budget?<\/h2>\n<p>Yes \u2014 as a range. The fear is understandable: \u201cif I say 300,000 MAD, everyone will bill me 300,000 MAD\u201d. In practice, hiding the budget mostly produces proposals that cannot be compared, plus weeks lost discovering that your project costs three times what you imagined.<\/p>\n<p>A wording that protects both sides: \u201cindicative envelope of 250,000 to 400,000 MAD excluding maintenance; a proposal outside this range is still welcome if it is justified\u201d. You filter out the irrelevant bids, you allow alternatives, and you commit to nothing.<\/p>\n<p>Two useful companions. Split the work into a <strong>firm phase and a conditional phase<\/strong>: phase 1 is ordered, the rest depends on results. And require a <strong>quote broken down by work package<\/strong> (framing, design, development, integration, testing, training, support) rather than a single number \u2014 it is the only way to see where two offers genuinely differ. Ask explicitly for the annual run cost too: hosting, maintenance, evolutions, often 15\u201325% of the project cost per year, and the line most often left out of budgets.<\/p>\n<h2>Deadlines, milestones and acceptance criteria<\/h2>\n<p>\u201cDelivery in 2 months\u201d with no justification reads as an invented constraint. Give the <strong>business date<\/strong> and the reason behind it: a September campaign, a financial close, the end of your contract with the current vendor, a branch opening. A provider can then propose a smaller scope it can actually hold, instead of a promise it cannot.<\/p>\n<p>Then structure the work into milestones, each with a verifiable deliverable: framing signed off, designs approved, test environment opened, user acceptance testing, go live, warranty period. Also state <em>your own<\/em> review turnaround. A large share of project delays come from the client side, and a provider reading \u201cclient feedback within 5 working days\u201d knows what it is signing up to.<\/p>\n<p>Finally, acceptance criteria. They must be checkable by someone who is not a developer:<\/p>\n<ul>\n<li>a set of real business test cases, written by you, that the solution must pass;<\/li>\n<li>measurable thresholds: load time, concurrent users, volume of data migrated with zero discrepancy;<\/li>\n<li>a signed acceptance report separating blocking from non-blocking defects;<\/li>\n<li>a contractual warranty period after go live (3 to 6 months is common) and a list of what it covers;<\/li>\n<li>reversibility terms: handover of code, credentials, backups and documentation if you change provider.<\/li>\n<\/ul>\n<h2>The CNDP clause: data hosting and subcontracting<\/h2>\n<p>As soon as your project handles personal data \u2014 customers, employees, applicants, patients \u2014 Law 09-08 applies and the CNDP is the authority to look at. The tender document is the right place to set the rules, because after signature they are much harder to negotiate.<\/p>\n<p>What the clause should cover: where data and backups are hosted; an obligation to inform you and obtain written consent before any transfer outside Morocco or any use of a subcontractor, including a cloud service or an AI API; who handles which formalities with the CNDP; expected security measures (encryption, access management, logging); the notification deadline in case of an incident; retention periods and certified deletion at the end of the contract, test environments included.<\/p>\n<p>One detail that trips up many projects: production copies used for testing. Require anonymisation. Otherwise, do not paste a European template without checking \u2014 the Moroccan regime has its own formalities and procedures change, so verify on the CNDP website and work from a <a href=\"https:\/\/arrowlancer.ma\/blog\/en\/morocco-cndp-law-09-08-compliance-checklist-2026\/\">Law 09-08 compliance checklist<\/a> before freezing your wording.<\/p>\n<h2>Mistakes that scare off good providers and attract bad ones<\/h2>\n<ul>\n<li><strong>The 60-page copy-paste document<\/strong> full of requirements unrelated to your business. It signals that nobody made decisions internally.<\/li>\n<li><strong>\u201cEtc.\u201d and \u201cnon-exhaustive list\u201d<\/strong>. Every occurrence is a blank cheque: good providers price the worst case, the others ignore it and invoice you later.<\/li>\n<li><strong>A 5-day response deadline<\/strong> on a 400,000 MAD project. You will only get recycled proposals.<\/li>\n<li><strong>Asking for free mockups or a free proof of concept<\/strong> as part of the tender. Teams with a full pipeline decline; the ones with free capacity often have it for a reason.<\/li>\n<li><strong>Inviting twelve providers<\/strong> \u201cto have options\u201d. Three to five serious candidates is better, and word travels fast between Casablanca teams.<\/li>\n<li><strong>No named contact and no question window<\/strong>. Without a Q&amp;A phase you receive quotes built on assumptions.<\/li>\n<li><strong>100% payment on delivery<\/strong>, or disproportionate late penalties. Solid firms walk away; what is left are the ones that accept anything and deliver accordingly.<\/li>\n<li><strong>Intellectual property left unsaid<\/strong>. State explicitly who owns the code, the designs and the data at the end.<\/li>\n<li><strong>Unweighted selection criteria<\/strong>. If \u201cprice 60%, references 20%, methodology 20%\u201d is not written down, everyone assumes it is 100% price and writes you the cheapest possible offer.<\/li>\n<\/ul>\n<h2>Questions to ask yourself before you send it<\/h2>\n<p>Reread the document as someone who knows neither your company nor your sector, and check:<\/p>\n<ol>\n<li>Could an outsider price this project without calling you? If not, what information is missing?<\/li>\n<li>Is every requirement verifiable at acceptance? How will you know it is met?<\/li>\n<li>Have I written what is <em>out<\/em> of scope, as clearly as what is in?<\/li>\n<li>Have I described a need, or accidentally imposed a technical solution?<\/li>\n<li>Who decides internally, and has that person actually read the document?<\/li>\n<li>Is the first year of run cost budgeted, not just the project?<\/li>\n<li>Does the data clause match what we really do with that data?<\/li>\n<li>Are the selection criteria written down and weighted?<\/li>\n<\/ol>\n<p>One last high-return check: have the person who will use the tool daily read it. They spot in ten minutes the requirements management forgot. And if the project is part of something larger, place it back inside your <a href=\"https:\/\/arrowlancer.ma\/blog\/en\/digital-transformation-morocco-smes-roadmap-2026\/\">digital transformation roadmap<\/a> before issuing the tender \u2014 it stops you buying the same building block three times. After that comes reading the offers, where our guide to <a href=\"https:\/\/arrowlancer.ma\/blog\/en\/morocco-it-services-company-how-to-choose-2026-guide\/\">choosing a Morocco IT services company<\/a> takes over.<\/p>\n<h2>What now?<\/h2>\n<p>Arrowlancer works with Moroccan SMEs on digital transformation consulting: diagnostic, roadmap, writing or reviewing the tender document, framing scope and data-processing clauses, then helping you read the offers you receive. We work upstream of the project, and we can stay out of the tender entirely if you prefer to keep advice and delivery separate.<\/p>\n<p>Send us your draft for a review, or start from a blank page with us: <a href=\"https:\/\/arrowlancer.ma\/en\/#contact\">let&#8217;s talk about your project<\/a>. Our <a href=\"https:\/\/arrowlancer.ma\/en\/#services\">services<\/a> can cover delivery afterwards, if and only if that makes sense for you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A clear IT RFP gets you comparable quotes and fewer surprises. Scope, budget disclosure, milestones, acceptance criteria and the CNDP clause, for Morocco 2026.<\/p>\n","protected":false},"author":0,"featured_media":117,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[54],"tags":[63,394,397,400,403],"class_list":["post-116","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital_transformation_strategy-en","tag-cndp-en","tag-it-consulting-en","tag-it-rfp-en","tag-morocco-sme-en","tag-tender-en"],"_links":{"self":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":1,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":119,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/posts\/116\/revisions\/119"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/media\/117"}],"wp:attachment":[{"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arrowlancer.ma\/blog\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}