<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Order Group</title>
    <description>The latest articles on DEV Community by Order Group (ordergroup).</description>
    <link>https://dev.to/ordergroup</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F15170%2F23f99c82-d8d9-465a-bebc-0bc6a3d30f6e.png</url>
      <title>DEV Community: Order Group</title>
      <link>https://dev.to/ordergroup</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ordergroup"/>
    <language>en</language>
    <item>
      <title>AMLR 2027 and KYC in Lending Apps: How Remote Onboarding Changes Before 10 July 2027</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Wed, 28 Oct 2026 01:05:13 +0000</pubDate>
      <link>https://dev.to/ordergroup/amlr-2027-and-kyc-in-lending-apps-how-remote-onboarding-changes-before-10-july-2027-3enj</link>
      <guid>https://dev.to/ordergroup/amlr-2027-and-kyc-in-lending-apps-how-remote-onboarding-changes-before-10-july-2027-3enj</guid>
      <description>&lt;p&gt;&lt;em&gt;The AMLR is Regulation (EU) 2024/1624 on preventing money laundering and terrorist financing, applied directly across the EU without a national act. It applies from 10 July 2027 and covers lenders, so it also reaches lending apps, including their remote onboarding.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On 1 October 2026 AMLA, the EU Anti-Money Laundering Authority, sent the Commission its final report with draft technical standards on customer due diligence, and from 10 July 2027 the AMLR applies to consumer lenders in the EU. The standards are not in force yet, and the technical details of remote identity verification in a lending app wait for the Commission to adopt them. This article reads the AMLR from the product side and is not legal advice. Which rules apply to you depends on your company's status, so confirm it with your lawyer. For the terms themselves, see the glossary entries on the &lt;a href="https://ordergroup.co/glossary/amlr/" rel="noopener noreferrer"&gt;AMLR&lt;/a&gt; and &lt;a href="https://ordergroup.co/glossary/kyc/" rel="noopener noreferrer"&gt;KYC&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the AMLR and does it apply to lenders?
&lt;/h2&gt;

&lt;p&gt;The AMLR is a regulation, so it applies as written in every member state from 10 July 2027 (Article 90). A later date, 10 July 2029, applies only to the entities named in Article 3(3)(n) and (o). Lenders fall under the main date.&lt;/p&gt;

&lt;p&gt;Two companion acts complete the EU anti-money laundering package. Directive (EU) 2024/1640 (AMLD6) must be transposed by 10 July 2027. Regulation (EU) 2024/1620 sets up the authority AMLA, which writes the technical standards that fill in the AMLR.&lt;/p&gt;

&lt;p&gt;Under Article 2(6), a financial institution includes a creditor within the meaning of Directive 2008/48/EC (consumer credit) and Directive 2014/17/EU (mortgage credit), and financial institutions are obliged entities, the companies that have to apply the rules. Credit intermediaries can be covered too, when their activity exposes them to money laundering risk. When an intermediary acts on behalf of a lender, recital 22 places the requirements on the lender. The details differ for a lending institution, a bank and an intermediary.&lt;/p&gt;

&lt;h2&gt;
  
  
  When does the AMLR apply, and what is still missing?
&lt;/h2&gt;

&lt;p&gt;The date of application is fixed, but the technical standards for remote verification are not final. The status below is as of October 2026 and changes quickly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;10 July 2027:&lt;/strong&gt; the AMLR applies (Article 90) and the transposition deadline for AMLD6 runs out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;9 February to 8 May 2026:&lt;/strong&gt; AMLA consulted on the draft regulatory technical standards (RTS) on customer due diligence (CDD) under Article 28(1) of the AMLR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 October 2026:&lt;/strong&gt; AMLA published the final report with the draft RTS (the document is dated 30 September 2026) and sent it to the European Commission for adoption. The standards become binding only after the Commission adopts them and they are published in the Official Journal of the EU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After adoption:&lt;/strong&gt; under the draft, the RTS enter into force on the 20th day after publication and apply six months later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The draft covers the requirements and information for standard, simplified and enhanced due diligence, the reliable and independent sources for verifying identity, and the attributes of electronic identification means and qualified trust services.&lt;/p&gt;

&lt;p&gt;The final report keeps the check of the authenticity of identity documents. Recital 8 requires checking that the document is authentic, including that it has not been forged or altered. Article 6(1)(d) requires security features in the document that confirm its authenticity.&lt;/p&gt;

&lt;p&gt;It also leaves room in sanctions screening. Lists may be checked with automated tools, manual checks or a combination of both, depending on the nature, risk and size of the entity (Article 25(2)(a)).&lt;/p&gt;

&lt;p&gt;For the team, this means the date is known, while the technical details of remote verification wait for the Commission. Keep the order of verification methods and the risk rules in backend configuration, so a change after the Commission's decision is a configuration change and not a rebuild.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does the AMLR change remote identity verification?
&lt;/h2&gt;

&lt;p&gt;The AMLR names two ways to verify a customer's identity, and the draft RTS add a fallback for people who cannot use either. Under Article 22(6), identity is verified in one of two ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;On the basis of a document:&lt;/strong&gt; an identity document, passport or equivalent, where relevant with information from reliable and independent sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With electronic identification:&lt;/strong&gt; electronic identification means at assurance level "substantial" or "high" under Regulation (EU) No 910/2014 (eIDAS), together with relevant qualified trust services.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recital 66 adds that obliged entities should accept electronic identification under eIDAS. Where it is not available, verification should rely on the relevant qualified trust services.&lt;/p&gt;

&lt;p&gt;The draft RTS count an electronic identification means whether or not it was notified, as long as it meets level "substantial" or "high" under Implementing Regulation (EU) 2015/1502. That includes the European Digital Identity Wallets (EUDI Wallet). Poland has a notified electronic identification scheme at levels "substantial" and "high" (notified on 19 April 2023, OJ EU 2023/C 136/02), which is reported to include the Polish government trusted profile and the electronic ID card.&lt;/p&gt;

&lt;h3&gt;
  
  
  The fallback in Article 7 of the draft RTS
&lt;/h3&gt;

&lt;p&gt;Article 7 of the draft RTS applies when a person cannot reasonably be expected to present a document in person and has no access to electronic identification or qualified trust services under Article 22(6)(b). The obliged entity then verifies identity on the basis of a document using alternative solutions that draw on reliable and independent sources. Five safeguards apply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the person presenting the document is checked to be its holder;&lt;/li&gt;
&lt;li&gt;the communication is protected for integrity and confidentiality;&lt;/li&gt;
&lt;li&gt;image, video, sound and data come in a readable format and quality that allow the person to be identified without doubt;&lt;/li&gt;
&lt;li&gt;the process stops when there is a technical fault, an unexpected interruption of the connection, or doubt about the identity or the integrity of the process;&lt;/li&gt;
&lt;li&gt;the verified data and documents are valid and up to date, and copies are stored with a timestamp, securely and in a form that allows verification after the fact.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An entity that uses such a solution must be able to explain why the customer was not verified with the methods of Article 22(6), and to show the supervisor that the solution meets Article 7.&lt;/p&gt;

&lt;p&gt;Article 7 describes the safeguards and names no specific technique, such as a selfie, liveness detection or video. According to the recitals of the draft, entities can keep using existing remote onboarding tools that meet these requirements. Article 27 adds a step for incomplete identity data: when an electronic identification means or a qualified trust service does not carry every attribute needed, the entity obtains and verifies the missing ones with other means that Article 22(6) allows. The minimum attributes are listed in Annex I.&lt;/p&gt;

&lt;h3&gt;
  
  
  Verification transfers and open banking
&lt;/h3&gt;

&lt;p&gt;A verification transfer (a small payment that confirms the customer owns the account) and account data obtained through open banking are not listed among the methods of identity verification, in Article 22(6) of the AMLR or in Articles 6 and 7 of the draft RTS. In our reading, they work as supporting signals: they confirm the bank account and help against fraud, and the identity itself is verified with a document or electronic identification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Polish lenders and the PESEL register
&lt;/h3&gt;

&lt;p&gt;A Polish lender has one more duty next to AML. Under Article 9b of the Consumer Credit Act, in force since 1 June 2024, the lender checks in the register of &lt;a href="https://ordergroup.co/glossary/pesel-restriction/" rel="noopener noreferrer"&gt;restricted PESEL&lt;/a&gt; numbers (PESEL is the Polish national ID number) whether the borrower's number is restricted before it concludes the credit or loan agreement. It is a separate step from identity verification and has its own record.&lt;/p&gt;

&lt;h3&gt;
  
  
  KYC vs eKYC
&lt;/h3&gt;

&lt;p&gt;KYC (know your customer) is the process of confirming a customer's identity at onboarding. eKYC is its digital, remote form. It usually combines a scan of the identity document with biometrics, such as comparing a selfie with the photo in the document, and screening against lists of politically exposed persons (PEP) and sanctions. eKYC is a method of performing KYC and leaves every legal duty in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes in a lending app's onboarding: a checklist for the CTO
&lt;/h2&gt;

&lt;p&gt;A lending app's onboarding needs a hierarchy of verification methods set in the backend, a log of why the fallback was used, a way to stop and resume a session, a step for completing missing attributes, timestamped copies, and versioned risk rules. The checklist below is made of our engineering recommendations and has no legal force.&lt;/p&gt;

&lt;p&gt;Verification routes under the AMLR and the draft RTS, and what the app must support&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Route&lt;/th&gt;
&lt;th&gt;Legal basis&lt;/th&gt;
&lt;th&gt;What the app must support&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Electronic identification, level substantial or high&lt;/td&gt;
&lt;td&gt;AMLR Article 22(6)(b)&lt;/td&gt;
&lt;td&gt;Integration with the eID scheme, a record of the assurance level&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qualified trust services&lt;/td&gt;
&lt;td&gt;AMLR Article 22(6)(b)&lt;/td&gt;
&lt;td&gt;Handling of the trust service result, a step that completes missing attributes (Article 27 of the draft RTS)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Document verified remotely, with safeguards (fallback)&lt;/td&gt;
&lt;td&gt;Article 7 of the draft RTS&lt;/td&gt;
&lt;td&gt;Check of the document holder, image quality, a stop on doubt, timestamped copies, a recorded reason for using the fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Answer each question with yes or no:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the app have a hierarchy of KYC methods (electronic identification first, a remote document check as the fallback) that is configured in the backend?&lt;/li&gt;
&lt;li&gt;Does the system record why the fallback was used, meaning why electronic identification was unavailable? Article 7 of the draft RTS requires the entity to be able to justify it to the supervisor.&lt;/li&gt;
&lt;li&gt;Does the remote verification stop on a fault, a dropped connection or a doubt, and can it be resumed without losing the application? (Article 7(d) of the draft RTS; see the AvaFin notes below.)&lt;/li&gt;
&lt;li&gt;Is there a step that completes the attributes missing from an electronic identification means? (Article 27 of the draft RTS.)&lt;/li&gt;
&lt;li&gt;Are copies of documents, images and recordings stored with a timestamp, and can they be reproduced for a check after the fact? (Article 7(e).)&lt;/li&gt;
&lt;li&gt;Is the customer risk assessment stored as versioned rules, so you can say which version of a rule produced which result?&lt;/li&gt;
&lt;li&gt;Is there an audit trail of which eKYC provider verified what, and when?&lt;/li&gt;
&lt;li&gt;Do the verification transfer and the account data serve as fraud signals next to a separate identity verification method?&lt;/li&gt;
&lt;li&gt;Can the team change the hierarchy of methods and the rules within days of the Commission adopting the RTS, without a new release in the App Store and Google Play?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;KYC logic should also stay consistent with the creditworthiness assessment and human intervention under CCD2, which we cover in &lt;a href="https://ordergroup.co/blog/ccd2-lending-app-loan-application-flow/" rel="noopener noreferrer"&gt;CCD2 for Lending Apps&lt;/a&gt;, and with the logs required by the AI Act, which we cover in EU AI Act and Credit Scoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  What KYC flows in lending apps teach us
&lt;/h2&gt;

&lt;p&gt;We build lending apps and integrate external verification services. The notes below come from Aasa24, and from AvaFin for the &lt;a href="https://ordergroup.co/glossary/open-banking/" rel="noopener noreferrer"&gt;bank account verification&lt;/a&gt; and the order of the application steps. Three things stand out: a clear status for each stage, retries, and a way back into an interrupted process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj35v7kmbccjnrzd6ughm.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj35v7kmbccjnrzd6ughm.webp" alt="Loan app KYC flow – bank account verification screens on two smartphones" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aasa24&lt;/strong&gt; is a lending app with card features that we develop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The online identity check for a card application runs on several levels: a KYC step with a scan of the identity document that the customer can repeat, PESEL with an SMS code, and a repeated or manual verification in difficult cases.&lt;/li&gt;
&lt;li&gt;A customer rejected after three failed KYC attempts can start verification again on a new application.&lt;/li&gt;
&lt;li&gt;KYC tasks are retried automatically, and the flag of a verified customer stays saved.&lt;/li&gt;
&lt;li&gt;After the customer taps "Next" on a pending application, the app checks the status of the KYC verification. This was added in October 2025.&lt;/li&gt;
&lt;li&gt;KYC is also part of the flow after the contract is signed.&lt;/li&gt;
&lt;li&gt;After a positive bank account verification through open banking, the card application moves to a separate KYC status.&lt;/li&gt;
&lt;li&gt;Releases ship every 3-4 weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AvaFin&lt;/strong&gt; is a lending app that we also build. The customer chooses one of two ways to verify the bank account: logging in to online banking, which gives the account history (Kontomatik), or a verification transfer (Autopay). The app monitors the status of the verification and handles a failure or a timeout without dropping the application. A central system sets the order of the application steps, so changing the order or the scope of the steps does not need a new app version.&lt;/p&gt;

&lt;p&gt;The verification providers in both apps are external and belong to the clients. More of our work in this area is on the &lt;a href="https://ordergroup.co/fintech-software-development/" rel="noopener noreferrer"&gt;fintech software development&lt;/a&gt; and &lt;a href="https://ordergroup.co/services/software-development/mobile-apps-development/" rel="noopener noreferrer"&gt;mobile app development&lt;/a&gt; pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the AMLR?
&lt;/h3&gt;

&lt;p&gt;The AMLR is Regulation (EU) 2024/1624 on preventing the use of the financial system for money laundering or terrorist financing. It applies directly in every EU member state from 10 July 2027, without a national act, and sets the customer due diligence rules for obliged entities, including consumer lenders.&lt;/p&gt;

&lt;h3&gt;
  
  
  When does the AMLR apply?
&lt;/h3&gt;

&lt;p&gt;The AMLR applies from 10 July 2027. AMLA published the final report with the draft technical standards on customer due diligence on 1 October 2026 (the document is dated 30 September) and passed it to the European Commission. Once adopted, the standards apply six months after entry into force.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does the AMLR apply to lenders and loan apps?
&lt;/h3&gt;

&lt;p&gt;Yes. Under Article 2(6), creditors for consumer credit and mortgage credit are financial institutions, so they are obliged entities. The details depend on the company's status, for example a &lt;a href="https://ordergroup.co/glossary/loan-institution/" rel="noopener noreferrer"&gt;loan institution&lt;/a&gt;, a bank or an intermediary, so confirm yours with a lawyer.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between KYC and eKYC?
&lt;/h3&gt;

&lt;p&gt;KYC is the confirmation of a customer's identity at onboarding. eKYC is its digital, remote version, usually built from a scan of the identity document, biometrics such as a selfie comparison, and screening against PEP and sanctions lists. eKYC is a method of performing KYC and leaves every legal duty in place.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is video identification still allowed under the AMLR?
&lt;/h3&gt;

&lt;p&gt;The draft RTS, which the Commission has not adopted yet, allow remote verification of a document as a fallback when the customer has no access to electronic identification. Article 7 sets safeguards: checking that the person is the document holder, image and sound quality, stopping on doubt, and timestamped copies. It names no specific technique.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the AMLA RTS on customer due diligence?
&lt;/h3&gt;

&lt;p&gt;The RTS are regulatory technical standards under Article 28(1) of the AMLR. They specify what information to collect at each level of due diligence and which sources and electronic identification means count for verifying identity. The final report dated 30 September 2026 now waits for adoption by the European Commission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a verification transfer enough for KYC under the AMLR?
&lt;/h3&gt;

&lt;p&gt;The identity verification methods in the AMLR and the draft RTS are a document, or electronic identification with qualified trust services. A verification transfer is not named among them, so we treat it as a supporting signal that confirms the account and helps against fraud. This is our reading of the texts.&lt;/p&gt;

&lt;h3&gt;
  
  
  What changes for KYC in a lending app?
&lt;/h3&gt;

&lt;p&gt;A lending app needs a hierarchy of verification methods set in the backend, a log of why the fallback was used, a way to stop and resume a session, a step for completing missing attributes, timestamped copies, and versioned risk rules. The checklist above lists each of these.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does the AMLR relate to CCD2 and the AI Act?
&lt;/h3&gt;

&lt;p&gt;CCD2 regulates the credit process and consumer rights, and the AI Act covers credit scoring. The AMLR covers the identification and due diligence of the customer. In an app they meet in the application flow, so the three share data and logs. See our articles on &lt;a href="https://ordergroup.co/blog/ccd2-lending-app-loan-application-flow/" rel="noopener noreferrer"&gt;CCD2&lt;/a&gt; and the AI Act and credit scoring.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/blog/amlr-kyc-lending-apps/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
      <category>business</category>
    </item>
    <item>
      <title>IoT Architecture: Layers, Diagram and How Industrial Systems Are Built</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Tue, 27 Oct 2026 01:13:05 +0000</pubDate>
      <link>https://dev.to/ordergroup/iot-architecture-layers-diagram-and-how-industrial-systems-are-built-8l1</link>
      <guid>https://dev.to/ordergroup/iot-architecture-layers-diagram-and-how-industrial-systems-are-built-8l1</guid>
      <description>&lt;p&gt;&lt;em&gt;An IoT architecture moves data from devices through connectivity, an edge gateway and a cloud platform to the application, and sends commands back the same way. This guide compares the 3-layer and 5-layer models and lists what to check so that a dropped connection does not go unnoticed in production.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An IoT architecture carries data through a chain of layers: devices and sensors, connectivity, an edge gateway, a cloud platform that ingests, processes and stores the data, and the application people work in. Commands travel back to the devices the same way. Textbooks compress this into three layers (perception, network, application) or five (perception, transport, processing, application, business).&lt;/p&gt;

&lt;p&gt;Most guides draw the same boxes. The difference between a diagram and a production system shows up when the connection drops: an MQTT client with a clean session loses its subscriptions without any error, and an edge device that has gone offline can still look healthy in the portal. The examples come from industrial and energy systems we have built for Skyfri, Zeronest and KYOTO as part of our &lt;a href="https://ordergroup.co/iot-software-development/" rel="noopener noreferrer"&gt;industrial IoT services&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  IoT architecture layers: the 3-layer and 5-layer models
&lt;/h2&gt;

&lt;p&gt;The two models you will meet most often have three layers and five. The three-layer model has a perception layer (the physical devices and sensors), a network layer (connectivity) and an application layer (the service delivered to the user). The five-layer model splits the network layer into transport and processing and adds a business layer on top, which manages the whole system and its business and profit models.&lt;/p&gt;

&lt;p&gt;The study &lt;a href="https://arxiv.org/abs/2004.12936" rel="noopener noreferrer"&gt;"Internet of Things Architectures: A Comparative Study"&lt;/a&gt; (dos Santos et al., 2020, arXiv 2004.12936) describes both models and notes that sources name the middle layers differently. The same study points out that the five-layer model leaves security and privacy out. That is why search results show anything from four to six layers. For the basic terms, see the &lt;a href="https://ordergroup.co/glossary/iot/" rel="noopener noreferrer"&gt;IoT glossary entry&lt;/a&gt; and our explainer on &lt;a href="https://ordergroup.co/blog/what-is-industrial-iot/" rel="noopener noreferrer"&gt;what industrial IoT is&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When you build a system, it helps more to know what each layer does and how it fails. The table below uses the layers you actually deploy.&lt;/p&gt;

&lt;p&gt;IoT architecture layers, what each does, a typical risk in production (with the source named where it comes from external documentation) and an example from our projects.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Typical risk in production&lt;/th&gt;
&lt;th&gt;Example from our projects&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Devices and sensors&lt;/td&gt;
&lt;td&gt;Read values from equipment and accept commands&lt;/td&gt;
&lt;td&gt;The data path depends on the manufacturer's cloud or the household Wi-Fi&lt;/td&gt;
&lt;td&gt;Zeronest: device wired to the inverter over RS485/Modbus, reporting over LTE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connectivity&lt;/td&gt;
&lt;td&gt;Moves messages between device, gateway and platform&lt;/td&gt;
&lt;td&gt;An MQTT client with a clean session loses its subscriptions after a disconnect (HiveMQ, ThingsBoard)&lt;/td&gt;
&lt;td&gt;Zeronest: MQTT with TLS 1.2 to AWS IoT Core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Edge gateway&lt;/td&gt;
&lt;td&gt;Runs local logic and buffers messages during outages&lt;/td&gt;
&lt;td&gt;Buffered messages expire after the TTL (7200 s by default on Azure IoT Edge) or when the disk fills (Microsoft Learn)&lt;/td&gt;
&lt;td&gt;Skyfri: EMS control decisions made locally on Azure IoT Edge, so the EMS could run fully offline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud platform (ingestion, processing, storage)&lt;/td&gt;
&lt;td&gt;Receives, processes and stores data for the whole fleet&lt;/td&gt;
&lt;td&gt;On AWS IoT Core, a persistent session expires after one hour by default and QoS 2 is not supported (AWS docs)&lt;/td&gt;
&lt;td&gt;Zeronest: AWS IoT Core; Skyfri: Azure IoT Hub as the cloud side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Application&lt;/td&gt;
&lt;td&gt;Dashboards, alerts, reports and integrations&lt;/td&gt;
&lt;td&gt;On Azure IoT Edge, a device that went offline can still show as healthy (200 OK) because the agent stops reporting (Microsoft Learn)&lt;/td&gt;
&lt;td&gt;Skyfri: monitoring runs as a separate layer in Skyfri Intelligence&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The application layer is where &lt;a href="https://ordergroup.co/blog/industrial-iot-analytics/" rel="noopener noreferrer"&gt;industrial IoT analytics&lt;/a&gt; and &lt;a href="https://ordergroup.co/blog/industrial-iot-dashboard-design/" rel="noopener noreferrer"&gt;dashboard design&lt;/a&gt; come in.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the extra layers in the 5-layer model change
&lt;/h3&gt;

&lt;p&gt;In the three-layer model, "network" covers both moving the data and making sense of it. The five-layer model separates transport (getting messages from the device to the platform) from processing (storing, filtering and analysing them). In a real system those are often different services with different owners. The business layer adds questions of system management and profit that the three-layer model does not ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  IoT architecture diagram: a reference industrial system
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2w8px71wpxcz1nypg0xw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2w8px71wpxcz1nypg0xw.webp" alt="IoT architecture diagram: device over Modbus, edge gateway, MQTT broker, storage and application, with the command path running back" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A reference IoT architecture diagram for an industrial system has two paths. Telemetry goes up from the device, and commands come back down.&lt;/p&gt;

&lt;p&gt;Telemetry path, from device to application:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Device or sensor. Reads values from equipment, such as an inverter, a battery or a meter, often over a fieldbus such as RS485 with Modbus.&lt;/li&gt;
&lt;li&gt;Edge gateway. Collects readings locally, runs logic that cannot wait for the cloud and buffers messages when the uplink is down.&lt;/li&gt;
&lt;li&gt;Broker and ingestion. An MQTT broker or a managed service such as AWS IoT Core or Azure IoT Hub receives messages over a secure connection.&lt;/li&gt;
&lt;li&gt;Processing and storage. Rules, stream processing and time-series storage turn raw readings into state and history.&lt;/li&gt;
&lt;li&gt;Application. Dashboards, alerts, reports and integrations used by operators and the business.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Command path, from application to device: a setpoint or schedule leaves the application, passes through the platform and the broker, reaches the edge gateway and is written to the device. Most generic diagrams leave this path out, and it is the one with the strictest requirements, because a command that arrives late or twice can change how equipment behaves.&lt;/p&gt;

&lt;h3&gt;
  
  
  A real chain: Zeronest
&lt;/h3&gt;

&lt;p&gt;In the Zeronest system, a device wired to the inverter over RS485/Modbus sent readings over LTE, using MQTT with TLS 1.2, to AWS IoT Core. The device, the Bzyk D200, is Zeronest's own hardware, and the LTE link kept the data path independent of the inverter manufacturer's cloud and of the household Wi-Fi. Customer data stayed in the EU. Every minute the system decided whether to charge, discharge or sell energy. It worked with [[f:zn-brands]] and ran on &lt;a href="https://dev.toas%20of%20April%202026"&gt;[f:zn-inst]&lt;/a&gt;. The &lt;a href="https://ordergroup.co/case-studies/zeronest-solar-panel-monitoring-app/" rel="noopener noreferrer"&gt;Zeronest case study&lt;/a&gt; describes the platform built on this chain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Edge or cloud: where should the logic run?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk08fdtfkha254g8a2k58.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk08fdtfkha254g8a2k58.webp" alt="Data centre hall with rows of server cabinets and overhead cable trays" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run the logic that has to keep working without the internet at the edge, and send everything that benefits from fleet-wide data to the cloud. Control decisions for physical equipment usually belong at the edge. Analytics, reporting and comparisons across many sites belong in the cloud.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://ordergroup.co/glossary/ems/" rel="noopener noreferrer"&gt;energy management system&lt;/a&gt; (EMS) we built for &lt;a href="https://ordergroup.co/case-studies/skyfri-solar-asset-management-platform/" rel="noopener noreferrer"&gt;Skyfri's solar and battery platform&lt;/a&gt; went into production in June 2024 at [[f:sk-plants]] and controlled [[f:sk-mwh]] of battery storage. The EMS made its control decisions locally on Azure IoT Edge, so it could run fully offline, with Azure IoT Hub as the cloud side. It worked with batteries and inverters from several manufacturers. Monitoring runs as a separate layer in Skyfri's own product, Skyfri Intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  What offline really means on Azure IoT Edge
&lt;/h3&gt;

&lt;p&gt;Microsoft's documentation, &lt;a href="https://learn.microsoft.com/en-us/azure/iot-edge/offline-capabilities" rel="noopener noreferrer"&gt;"Operate Azure IoT Edge devices offline"&lt;/a&gt; on Microsoft Learn, sets out the details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After the first sync with IoT Hub, an edge device can work without a connection indefinitely.&lt;/li&gt;
&lt;li&gt;The edge hub buffers outgoing messages and, when the connection returns, sends them in the original order.&lt;/li&gt;
&lt;li&gt;How long messages survive depends on the time-to-live setting and free disk space. The default TTL is 7200 seconds, or two hours.&lt;/li&gt;
&lt;li&gt;While offline, the agent does not report status, so the portal can keep showing the device as healthy (200 OK).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an outage can last longer than the buffer TTL, raise it and size the disk, or accept that older readings will be lost. And do not treat a green status as proof that the device is online.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which protocols connect the IoT architecture layers: MQTT, Modbus, OPC UA, HTTP?
&lt;/h2&gt;

&lt;p&gt;Modbus links devices to the gateway, OPC UA carries data with its information model on the factory floor, MQTT moves messages from the gateway to the cloud, and HTTP serves polling and REST integrations. Each fits a different boundary between layers.&lt;/p&gt;

&lt;p&gt;Protocols that connect the IoT architecture layers and where each fits.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Where it fits&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Modbus&lt;/td&gt;
&lt;td&gt;Fieldbus protocol, often over RS485&lt;/td&gt;
&lt;td&gt;Device to gateway&lt;/td&gt;
&lt;td&gt;The register map (which value sits at which address) differs between manufacturers, so someone has to own those maps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OPC UA&lt;/td&gt;
&lt;td&gt;Data with an information model&lt;/td&gt;
&lt;td&gt;Factory floor, especially brownfield plants&lt;/td&gt;
&lt;td&gt;In the VDMA 2025 study of German machinery and plant makers, 57% of companies used it in production and about half of new products already supported it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MQTT&lt;/td&gt;
&lt;td&gt;Lightweight publish/subscribe&lt;/td&gt;
&lt;td&gt;Gateway to cloud; devices with limited resources and unreliable networks&lt;/td&gt;
&lt;td&gt;Three QoS levels: 0 (at most once), 1 (at least once), 2 (exactly once)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP&lt;/td&gt;
&lt;td&gt;Request/response&lt;/td&gt;
&lt;td&gt;Polling and REST integrations&lt;/td&gt;
&lt;td&gt;Less suited to a continuous stream of telemetry&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The OPC UA figures come from the VDMA 2025 interoperability study of German machinery and plant makers, reported by fertigungstechnik.de on 28 November 2025. The MQTT quality-of-service levels are defined in the OASIS specification.&lt;/p&gt;

&lt;h3&gt;
  
  
  MQTT or OPC UA?
&lt;/h3&gt;

&lt;p&gt;You often use both. In an OPC Foundation article, &lt;a href="https://opcconnect.opcfoundation.org/2021/12/opc-ua-mqtt-and-information-interoperability/" rel="noopener noreferrer"&gt;"OPC UA, MQTT and Information Interoperability"&lt;/a&gt;, Erich Barnstedt, Chief Architect Standards &amp;amp; Consortia for Azure IoT at Microsoft, describes OPC UA as the payload and MQTT as the transport. OPC UA gives the data its meaning; MQTT moves it efficiently to the cloud.&lt;/p&gt;

&lt;p&gt;Check the platform limits too. According to the &lt;a href="https://docs.aws.amazon.com/iot/latest/developerguide/mqtt.html" rel="noopener noreferrer"&gt;AWS IoT Core Developer Guide&lt;/a&gt;, AWS IoT Core supports QoS 0 and 1 but not QoS 2. A persistent session stores subscriptions and unacknowledged QoS 1 messages. By default it expires after one hour. In MQTT 3 that is an account-wide setting; in MQTT 5 you can raise the limit to seven days. If your design depends on exactly-once delivery, it has to come from your own application logic, such as idempotent commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  What breaks in production: an IoT architecture checklist for CTOs
&lt;/h2&gt;

&lt;p&gt;Many production failures happen at the joins between layers, often when a connection drops. One industry pattern, described by HiveMQ in &lt;a href="https://www.hivemq.com/mqtt-essentials-part-7-persistent-session-queuing-messages/" rel="noopener noreferrer"&gt;"MQTT Essentials part 7"&lt;/a&gt;, by ThingsBoard in &lt;a href="https://thingsboard.io/docs/mqtt-broker/pe/user-guide/clean-persistent-sessions/" rel="noopener noreferrer"&gt;"Non-persistent and persistent sessions"&lt;/a&gt; and in the AWS IoT documentation, shows how this goes unnoticed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An MQTT client that connects with a clean session loses its subscriptions when the connection drops and has to subscribe again after reconnecting.&lt;/li&gt;
&lt;li&gt;With a persistent session (clean session set to false), the broker keeps the subscriptions and queues messages for the same client ID.&lt;/li&gt;
&lt;li&gt;In MQTT 5, Clean Start and Session Expiry Interval replace the clean session flag. The expiry interval defaults to 0, so the session ends when the client disconnects.&lt;/li&gt;
&lt;li&gt;The client should keep its own list of subscriptions and restore them after reconnecting, whatever the broker does.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A client that reconnects without resubscribing looks connected and receives nothing. Combine that with an edge status that stays green while offline, and a device can go quiet without anyone noticing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checklist: before you approve an IoT architecture
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;What works without the internet? List the functions that must keep running offline and confirm they run at the edge.&lt;/li&gt;
&lt;li&gt;How much can the buffer hold? Check the message TTL and free disk space against the longest outage you expect.&lt;/li&gt;
&lt;li&gt;Does the MQTT client resume the connection and its subscriptions? Use a persistent session or keep your own subscription list and restore it.&lt;/li&gt;
&lt;li&gt;Does device status tell the truth when offline? Make sure a device that stopped reporting does not still show as healthy.&lt;/li&gt;
&lt;li&gt;Who owns the Modbus register maps and the devices? Decide who maintains the maps for each manufacturer and model.&lt;/li&gt;
&lt;li&gt;How do you update devices? Plan staged rollouts rather than updating the whole fleet at once.&lt;/li&gt;
&lt;li&gt;Where does the data live? Confirm the regions, for example that customer data stays in the EU.&lt;/li&gt;
&lt;li&gt;What depends on the manufacturer's cloud? Identify every function that stops if a vendor's cloud or the household Wi-Fi goes down.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For the security side of these decisions, see our guide to &lt;a href="https://ordergroup.co/blog/iot-security/" rel="noopener noreferrer"&gt;IoT security&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose an IoT architecture before you build
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjutd8t3vqhb74gr310vy.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjutd8t3vqhb74gr310vy.webp" alt="Analytics dashboard on a tablet" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose an IoT architecture by settling your constraints first: the devices and protocols on site, offline behaviour, response times, updates and security boundaries. Answer these questions before anyone draws a diagram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which devices and protocols are already on site, and which will be added?&lt;/li&gt;
&lt;li&gt;What has to keep working during an outage, and for how long?&lt;/li&gt;
&lt;li&gt;Which decisions need a response in seconds, and which can wait for the cloud?&lt;/li&gt;
&lt;li&gt;How will devices be updated and replaced over the life of the system?&lt;/li&gt;
&lt;li&gt;Where are the security boundaries between the device network, the platform and the users?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://ordergroup.co/case-studies/kyoto-digital-twin-software/" rel="noopener noreferrer"&gt;KYOTO&lt;/a&gt; shows how an architecture grows. Its MVP started as UX/UI work and, over three and a half years of work on industrial IoT and a &lt;a href="https://ordergroup.co/glossary/digital-twin/" rel="noopener noreferrer"&gt;digital twin&lt;/a&gt; of a &lt;a href="https://ordergroup.co/glossary/thermal-energy-storage/" rel="noopener noreferrer"&gt;thermal energy storage&lt;/a&gt; system, grew into a SCADA-based building management system (BMS) that monitors and controls energy flow in real time. More projects are in our &lt;a href="https://ordergroup.co/blog/industrial-iot-examples/" rel="noopener noreferrer"&gt;industrial IoT examples&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Our work covers the software architecture of these systems. We do not write microcontroller firmware (C/C++), embedded Linux or Bluetooth Low Energy (BLE), and PCB design goes to a hardware partner.&lt;/p&gt;

&lt;p&gt;To map this before anything is built, we run a &lt;a href="https://ordergroup.co/contact-us/" rel="noopener noreferrer"&gt;free discovery workshop&lt;/a&gt; that covers hardware, protocols, offline behaviour, updates and security boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  IoT architecture: frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What are the layers of IoT architecture?
&lt;/h3&gt;

&lt;p&gt;The three-layer model has perception (devices and sensors), network (connectivity) and application (the service for the user). The five-layer model splits the network into transport and processing and adds a business layer. In a deployed system the layers are devices, connectivity, edge gateway, cloud platform and application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between 3-layer and 5-layer IoT architecture?
&lt;/h3&gt;

&lt;p&gt;The five-layer model divides the three-layer network layer into transport, which moves messages, and processing, which stores and analyses them. It also adds a business layer for managing the system and its business and profit models. Sources name the middle layers differently, so counts of four to six layers are common.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should IoT data be processed at the edge or in the cloud?
&lt;/h3&gt;

&lt;p&gt;Process at the edge anything that must keep working without the internet, such as control of physical equipment. Send to the cloud whatever gains from fleet-wide data, such as analytics and reporting. The EMS we built for Skyfri made its control decisions locally on Azure IoT Edge, so it could run fully offline.&lt;/p&gt;

&lt;h3&gt;
  
  
  MQTT or OPC UA for industrial IoT?
&lt;/h3&gt;

&lt;p&gt;Often both. OPC UA is common on the factory floor because it carries an information model with the data, while MQTT is a lightweight publish/subscribe transport to the cloud. Microsoft's Erich Barnstedt describes OPC UA as the payload and MQTT as the transport in an OPC Foundation article.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens to an IoT system when the internet connection drops?
&lt;/h3&gt;

&lt;p&gt;Azure IoT Edge keeps working offline, buffers outgoing messages for up to 7200 seconds by default and, when the connection returns, sends them in the original order. An MQTT client with a clean session loses its subscriptions and must resubscribe. While offline, device status may still look healthy in the portal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;If you are planning a connected system and want the layers, protocols and offline behaviour settled before development starts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ordergroup.co/iot-software-development/" rel="noopener noreferrer"&gt;Industrial IoT services and device software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ordergroup.co/case-studies/skyfri-solar-asset-management-platform/" rel="noopener noreferrer"&gt;Read the Skyfri case study&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ordergroup.co/contact-us/" rel="noopener noreferrer"&gt;Book a free discovery workshop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/blog/iot-architecture/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>iot</category>
    </item>
    <item>
      <title>MCP vs API: What We Learned Running an MCP Server in Production</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Mon, 26 Oct 2026 03:11:04 +0000</pubDate>
      <link>https://dev.to/ordergroup/mcp-vs-api-what-we-learned-running-an-mcp-server-in-production-4fpm</link>
      <guid>https://dev.to/ordergroup/mcp-vs-api-what-we-learned-running-an-mcp-server-in-production-4fpm</guid>
      <description>&lt;p&gt;&lt;em&gt;How MCP differs from a classic API, when to use each, the attacks an MCP server faces and the server-side gates we run in production.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An API gives a programmer a fixed contract of endpoints, while MCP lets an AI agent ask a server which tools it offers and choose among them by their descriptions. &lt;a href="https://www.anthropic.com/news/model-context-protocol" rel="noopener noreferrer"&gt;Anthropic introduced the Model Context Protocol (MCP)&lt;/a&gt; on 25 November 2024 as "an open standard that enables developers to build secure, two-way connections between their data sources and AI-powered tools".&lt;/p&gt;

&lt;p&gt;Since 9 July 2026 we have run a production &lt;a href="https://ordergroup.co/glossary/model-context-protocol/" rel="noopener noreferrer"&gt;MCP server&lt;/a&gt; for our own CMS, built on Wagtail. AI agents can call 164 tools on it, and no agent can publish a page whose brief a person has not approved.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MCP works: host, client and server
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzwicstg1ozulmanjzbs.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftzwicstg1ozulmanjzbs.webp" alt="Claude Code terminal windows, an example of an MCP host and client on a developer machine" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MCP uses a client-host-server architecture. The host is the AI application the user works in. It creates and coordinates several clients and enforces security policies and user consent. Each client connects to exactly one server, and each server exposes capabilities to the model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwsfugmb0zyix8ty8uvw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwsfugmb0zyix8ty8uvw.webp" alt="MCP architecture diagram: a host with MCP clients connected over JSON-RPC to MCP servers that expose tools, resources and prompts" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The protocol runs on JSON-RPC. A server can be a local process on the developer's machine or a remote service reached over the network. &lt;a href="https://modelcontextprotocol.io/specification/2026-07-28/architecture" rel="noopener noreferrer"&gt;The specification dated 2026-07-28&lt;/a&gt; describes MCP as stateless: every request carries its own protocol version and capabilities, with no session at the protocol level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tools, resources and prompts
&lt;/h3&gt;

&lt;p&gt;A server offers three kinds of building blocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; are functions the model can call, such as "create a page" or "list case studies".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resources&lt;/strong&gt; are passive data the model can read, for example a log file or a database schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompts&lt;/strong&gt; are ready-made templates for a type of interaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Capability negotiation and isolation
&lt;/h3&gt;

&lt;p&gt;Client and server declare which features they support. In the 2026-07-28 specification the client attaches its capabilities to every request and the server announces its own in response to &lt;code&gt;server/discover&lt;/code&gt;. Our public endpoint declares the earlier versions 2025-06-18, 2025-03-26 and 2024-11-05, so it does not use &lt;code&gt;server/discover&lt;/code&gt; or stateless requests.&lt;/p&gt;

&lt;p&gt;By design, a server should not see the whole conversation or look into other servers. The full history stays with the host, and a server only learns what the host passes to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who maintains MCP
&lt;/h3&gt;

&lt;p&gt;Since December 2025 MCP has belonged to the Agentic AI Foundation, hosted by the Linux Foundation, after &lt;a href="https://www.anthropic.com/news/donating-the-model-context-protocol-and-establishing-of-the-agentic-ai-foundation" rel="noopener noreferrer"&gt;Anthropic donated it&lt;/a&gt;; governance of the project did not change. Anthropic, Block and OpenAI co-founded the foundation, with support from Google, Microsoft, AWS, Cloudflare and Bloomberg, among others. The first adopters named in the November 2024 announcement were Block and Apollo, plus the developer tools Zed, Replit, Codeium and Sourcegraph. Anthropic's December 2025 announcement counted more than 10,000 active public MCP servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs API: the difference
&lt;/h2&gt;

&lt;p&gt;A traditional API exposes fixed endpoints and assumes that the programmer knows in advance which operations to call. An MCP server publishes a list of tools, each with a name, a description and a typed input schema; the client asks what is available and passes those descriptions to the model, which picks the tool it needs. Comparisons such as Codecademy's &lt;a href="https://www.codecademy.com/article/mcp-vs-api-architecture-and-use-cases" rel="noopener noreferrer"&gt;"Model Context Protocol (MCP) vs. APIs: Architecture &amp;amp; Use Cases"&lt;/a&gt; and TrueFoundry's &lt;a href="https://www.truefoundry.com/blog/mcp-vs-api" rel="noopener noreferrer"&gt;"MCP vs API"&lt;/a&gt; describe the difference the same way.&lt;/p&gt;

&lt;p&gt;How a traditional API and an MCP server differ for the client that uses them.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Traditional API&lt;/th&gt;
&lt;th&gt;MCP server&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who discovers what is available&lt;/td&gt;
&lt;td&gt;The programmer, from the documentation&lt;/td&gt;
&lt;td&gt;The AI client, by asking the server for its tools&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract&lt;/td&gt;
&lt;td&gt;Fixed endpoints&lt;/td&gt;
&lt;td&gt;A list of tools, resources and prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Description of operations&lt;/td&gt;
&lt;td&gt;Written for people in the docs&lt;/td&gt;
&lt;td&gt;Name, description and typed input schema read by the model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main user&lt;/td&gt;
&lt;td&gt;Application code written by a developer&lt;/td&gt;
&lt;td&gt;An AI agent working inside a host application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication and consent&lt;/td&gt;
&lt;td&gt;Handled by the integrating application&lt;/td&gt;
&lt;td&gt;The host enforces user consent and policies; the server can offer a public scope and a token-only scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When the contract changes&lt;/td&gt;
&lt;td&gt;The client code has to change&lt;/td&gt;
&lt;td&gt;The client reads the updated tool list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical use&lt;/td&gt;
&lt;td&gt;System-to-system integration&lt;/td&gt;
&lt;td&gt;AI assistants and agents working with your system&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Show all rows (7)Show fewer rows&lt;/p&gt;

&lt;p&gt;MCP does not replace APIs. In many production systems the MCP server calls an existing API underneath, so the API marks the boundary of the service and MCP marks the boundary of the agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use MCP and when an API is enough
&lt;/h2&gt;

&lt;p&gt;Use a plain API when a programmer writes the integration and knows the operations up front. That covers most system-to-system work with a stable contract.&lt;/p&gt;

&lt;p&gt;MCP makes sense when an AI agent or assistant (ChatGPT, Claude, Cursor) will use your system and has to choose tools from their descriptions. It also helps when one server should serve many AI clients at once, because each client reads the same tool list instead of getting its own integration.&lt;/p&gt;

&lt;p&gt;MCP is not tied to Claude. According to Anthropic's December 2025 announcement, ChatGPT, Cursor, Gemini, Microsoft Copilot and Visual Studio Code support it too.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP server security: what can go wrong
&lt;/h2&gt;

&lt;p&gt;The main risks for an MCP server are confused deputy, token passthrough, server-side request forgery, state handle hijacking, compromise of a local server and unvalidated OAuth authorization URLs. Part of MCP security sits in the protocol itself. The host enforces user consent and policies, and a server sees neither the full conversation nor other servers. The rest depends on how you build and deploy the server.&lt;/p&gt;

&lt;p&gt;The official MCP guide &lt;a href="https://modelcontextprotocol.io/docs/2026-07-28/tutorials/security/security_best_practices" rel="noopener noreferrer"&gt;"Security Best Practices" (version 2026-07-28)&lt;/a&gt; describes the main attacks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Confused deputy.&lt;/strong&gt; A server with its own privileges acts on behalf of a client that should not have them, for example through a shared OAuth client.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token passthrough.&lt;/strong&gt; The server accepts a token that was not issued for it and forwards it to downstream services, which breaks audit and access control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side request forgery (SSRF).&lt;/strong&gt; The server is tricked into requesting internal addresses it can reach and the attacker cannot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State handle hijacking.&lt;/strong&gt; An attacker reuses or guesses a handle that ties requests to an earlier interaction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local MCP server compromise.&lt;/strong&gt; A server running on the user's machine is started or controlled by an untrusted party.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unvalidated OAuth authorization URLs.&lt;/strong&gt; A malicious server sends the client to an authorization address it should not trust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The guide also covers stdio transport in setups with a proxy, several OAuth topics (mix-up attacks, localhost redirect impersonation, trust policies for Client ID Metadata Documents) and scope minimization. Scope minimization means asking for the minimal read scope first and raising permissions only when an operation needs them. The guide gives mitigations for each.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned running an MCP server in production
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsi3u3mpf5eirm7yg4je7.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsi3u3mpf5eirm7yg4je7.webp" alt="Developer working at a monitor with code in a dark office" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On our production MCP server, three server-side gates decide what an AI agent can create, write and publish. The server connects AI agents to the CMS that runs this website. Its 164 tools (as of 20 October 2026) cover pages, content, SEO and GEO (generative engine optimization, that is, visibility in AI answers), schema.org, media, menus, redirects, Search Console and GA4 analytics, and leads. Access tokens and the call log are managed in the Wagtail admin panel. We have no business metrics from this deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checklist for CTOs: hard gates on an MCP server exposed to AI agents
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No page without a strategy brief.&lt;/strong&gt; Calling &lt;code&gt;create_page&lt;/code&gt; without a strategy, which ties the page to a goal in our content plan and to its role in the sales funnel, returns HTTP 400.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No content before human approval.&lt;/strong&gt; Writing content while the brief has not been approved by a person returns HTTP 409.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No publication while the audit has errors.&lt;/strong&gt; Publishing returns HTTP 409 when the audit finds facts outside the approved checklist, client names covered by an NDA or no verdict from an independent critic agent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No tool on the server has a parameter that skips these gates. The gates have two exceptions: a correction mode for pages that are already live, which publishes a draft only when its audit finds nothing worse than the live version, and manual publication by a person in the Wagtail admin panel.&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP security best practices from our production server
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Put the rules the agent must not break in the server.&lt;/strong&gt; An instruction in the prompt asks the model to follow a rule; a response code or a validation step on the server enforces it. We keep the rules in HTTP codes and validation, and the prompt only explains them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give every agent its own token and log every call.&lt;/strong&gt; Each agent gets its own token, so every entry in the call log points to one agent and answers the question "which agent did what".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Split the public scope from the authenticated one.&lt;/strong&gt; Since 8 October 2026 we have also run a public MCP endpoint for AI assistants at &lt;a href="https://ordergroup.co/mcp" rel="noopener noreferrer"&gt;https://ordergroup.co/mcp&lt;/a&gt;. It needs no token and offers only reading and contact, through two tools: &lt;code&gt;list_case_studies&lt;/code&gt; and &lt;code&gt;submit_project_enquiry&lt;/code&gt;. It is listed in the official MCP registry as &lt;a href="https://registry.modelcontextprotocol.io/v0/servers?search=co.ordergroup/public" rel="noopener noreferrer"&gt;co.ordergroup/public&lt;/a&gt; (status active, version 1.0.0, published 8 October 2026). Writing to the CMS is possible only with a token, so an agent without authorization can read and send an enquiry and nothing more.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs API: frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is the difference between MCP and an API?
&lt;/h3&gt;

&lt;p&gt;An API exposes fixed endpoints for a programmer who knows the operations in advance. An MCP server publishes a list of tools, each with a name, a description and an input schema, and an AI client asks what is available and lets the model choose. In production the two usually work together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does MCP replace APIs?
&lt;/h3&gt;

&lt;p&gt;No. MCP adds a layer for AI agents on top of the systems you already have. In many production setups the MCP server calls an existing API underneath, so the API stays the boundary of the service and MCP becomes the boundary of the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  When should you use MCP instead of an API?
&lt;/h3&gt;

&lt;p&gt;Use MCP when an AI agent or assistant such as ChatGPT, Claude or Cursor will work with your system and has to pick tools from their descriptions, or when one server should serve many AI clients. When a programmer writes a system-to-system integration with a stable contract, an API is enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is MCP secure?
&lt;/h3&gt;

&lt;p&gt;The protocol builds in some protection: the host enforces user consent and policies, and a server does not see the full conversation or other servers. The rest depends on the server. The official guide lists attacks such as confused deputy, token passthrough and server-side request forgery, each with mitigations.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are MCP security best practices?
&lt;/h3&gt;

&lt;p&gt;Keep the rules an agent must not break on the server as response codes and validation. Give every agent its own token and log every call. Separate a public read-only scope from the authenticated one, and ask for the smallest scope first, raising permissions only when an operation needs them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is MCP only for Claude?
&lt;/h3&gt;

&lt;p&gt;No. Anthropic created MCP, but in December 2025 it handed the protocol to the Agentic AI Foundation, hosted by the Linux Foundation. According to the same announcement, ChatGPT, Cursor, Gemini, Microsoft Copilot and Visual Studio Code also support MCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next steps
&lt;/h2&gt;

&lt;p&gt;If you are deciding whether your product needs an MCP server, an API or both, see our &lt;a href="https://ordergroup.co/ai-software-development/mcp-server-development/" rel="noopener noreferrer"&gt;MCP server development services&lt;/a&gt;, our &lt;a href="https://ordergroup.co/ai-software-development/ai-agent-development/" rel="noopener noreferrer"&gt;AI agent development services&lt;/a&gt;, our &lt;a href="https://ordergroup.co/ai-software-development/" rel="noopener noreferrer"&gt;AI software development services&lt;/a&gt; or &lt;a href="https://ordergroup.co/contact-us/" rel="noopener noreferrer"&gt;book a free consultation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/blog/mcp-vs-api/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
    </item>
    <item>
      <title>CCD2 for Lending Apps: What Changes in Your Loan Application Flow on 20 November 2026</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Sun, 18 Oct 2026 01:30:47 +0000</pubDate>
      <link>https://dev.to/ordergroup/ccd2-for-lending-apps-what-changes-in-your-loan-application-flow-on-20-november-2026-k9n</link>
      <guid>https://dev.to/ordergroup/ccd2-for-lending-apps-what-changes-in-your-loan-application-flow-on-20-november-2026-k9n</guid>
      <description>&lt;p&gt;&lt;em&gt;CCD2 is the common name for Directive (EU) 2023/2225 of 18 October 2023 on credit agreements for consumers, which replaces Directive 2008/48/EC. National rules are due to apply from 20 November 2026, but several member states, Poland among them, will not have a law in place by then. Most of the changes land in the digital product: application screens, consents, messages and automated decisions. That puts CCD2 on the product team's roadmap as much as on the legal department's desk.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Below, each requirement is mapped to the screen, process or data in a loan app that it changes, so a product team can see where the work lands. We stay on the product side: which rules apply to your product, and how, is for your lawyer to judge.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is CCD2 (the Consumer Credit Directive 2)?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ordergroup.co/glossary/ccd2/" rel="noopener noreferrer"&gt;CCD2&lt;/a&gt; is Directive (EU) 2023/2225, published in the Official Journal on 30 October 2023. Member states had until 20 November 2025 to write it into national law and must apply those rules from 20 November 2026 (Article 48).&lt;/p&gt;

&lt;p&gt;It is a directive, not a regulation. It does not work on its own: each country writes it into national law, so details differ from market to market.&lt;/p&gt;

&lt;h3&gt;
  
  
  CCD1 vs CCD2: what moved in the scope
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Upper limit:&lt;/strong&gt; CCD1 covered credit from EUR 200 to EUR 75,000. CCD2 excludes credit above EUR 100,000 (Article 2(2)(c)), with one exception: unsecured loans above that amount taken to renovate a residential property stay in scope (Article 2(3)).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small amounts:&lt;/strong&gt; CCD2 has no lower limit, so credit under EUR 200 is now covered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interest-free credit:&lt;/strong&gt; credit granted free of interest and without other charges is in scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buy now, pay later:&lt;/strong&gt; credit repaid within three months with only insignificant charges, which describes most BNPL products, is in scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighter regime for these categories:&lt;/strong&gt; for small, interest-free and three-month credit, member states may switch off a limited set of provisions (Article 2(8)), but the products stay inside the directive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your product used to sit outside the consumer credit law, for example a micro-loan under EUR 200 or a deferred payment at checkout, it now goes through the same process as an ordinary loan.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does CCD2 change in a digital loan application flow?
&lt;/h2&gt;

&lt;p&gt;CCD2 changes four parts of a loan app: advertising, the application, the credit decision and the handling of customers in difficulty.&lt;/p&gt;

&lt;p&gt;The items follow the customer journey from the first ad to repayment trouble. For each one: the article, the change in the app, and where that change lives (content, process, or backend and data).&lt;/p&gt;

&lt;h3&gt;
  
  
  Advertising and acquisition
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost warning (Article 8(1)):&lt;/strong&gt; advertising must carry the warning "Caution! Borrowing money costs money" or equivalent wording. In specific, justified cases where an electronic medium cannot show the standard information clearly, part of it may be reached by clicking, scrolling or swiping (Article 8(6)). In the app: the warning and a link to the full data in banners, the calculator, landing pages and push notifications. Where it lives: content; the warning text sits in configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No "credit will fix your finances" (Article 8(7)(a)):&lt;/strong&gt; advertising may not suggest that credit would improve the consumer's financial situation. In the app: a review of in-app copy and push campaigns. A line like "solve your money problems" has to go. Where it lives: content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Application
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-contractual information (Article 10, Annex I):&lt;/strong&gt; the Standard European Consumer Credit Information form must be clearly legible, take into account the technical constraints of the medium and display properly across channels (Article 10(6)). Recital 37 adds that the key elements belong in the first part of the form and that the form should work on mobile phone screens. In the app: the form rendered natively from offer data, not only as a PDF. Where it lives: backend and data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personalized price (Articles 10(3)(m) and 13):&lt;/strong&gt; if the price was personalized on the basis of automated processing, including profiling, the pre-contractual information must say so, and the consumer must be told clearly. In the app: a "personalized offer" flag stored as a field on the offer, which every screen reads. Where it lives: backend and data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tying banned, bundling allowed (Article 14(1)):&lt;/strong&gt; you can sell a package, but you cannot make the credit conditional on an extra product. In the app: an add-on such as insurance can be unchecked without blocking the application. Where it lives: process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No inferred consent (Article 15):&lt;/strong&gt; default options, including pre-ticked boxes, do not count as agreement; consent needs a clear affirmative act. In the app: zero pre-ticked checkboxes, including in cross-sell and limit-increase screens. Where it lives: process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No unsolicited credit (Article 17):&lt;/strong&gt; credit cannot be granted without the consumer's prior request and explicit agreement. In the app: a "pre-approved" offer or a limit increase does not start a credit without the customer's action. Where it lives: process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Decision
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Creditworthiness assessment (Article 18(1)):&lt;/strong&gt; the creditor must carry out a thorough assessment in the consumer's interest. In the app: every decision can be reconstructed from its input data, the version of the rules or model, and the result. Where it lives: backend and data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated decisions and human intervention (Article 18(8)):&lt;/strong&gt; when the assessment uses automated processing of personal data, the consumer can request human intervention. That covers a clear explanation of the assessment with the logic and risks involved, the chance to express their point of view, and a review of the assessment and the decision. In the app: a button that starts the request, a queue for an analyst and a record of who changed the decision and when. A clause in the terms and conditions does not give the customer that button. Where it lives: process, backend and data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  After the contract: customers in difficulty
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Early detection, debt advice and forbearance (Articles 35(1), 36(2) and 36(3)):&lt;/strong&gt; creditors need processes to spot consumers in financial difficulty early and to refer them to accessible debt advisory services, and they must apply reasonable forbearance, where appropriate, before enforcement. In the app: signals such as late payments or extension requests captured as data, plus an "I need help" path in the app. Where it lives: backend and data, plus process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two items on this list are content changes: warnings and copy. Three are process changes: consents, paths and queues. The other five need backend and data work, such as the offer engine and the decision record, two of them together with process changes. Only that last group cannot be added in a week.&lt;/p&gt;

&lt;h3&gt;
  
  
  What else lands in the same flow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Directive (EU) 2023/2673 on financial services contracts concluded at a distance applies from 19 June 2026 and requires, among other things, a withdrawal function for contracts concluded through an online interface. Poland has not transposed it yet.&lt;/li&gt;
&lt;li&gt;Under the European Accessibility Act, Directive (EU) 2019/882, accessibility requirements for consumer banking services, including consumer credit, apply from 28 June 2025. In Poland they sit in the act of 26 April 2024 on ensuring compliance with accessibility requirements.&lt;/li&gt;
&lt;li&gt;Credit scoring of natural persons is a high-risk AI system under the EU AI Act. We cover what that means for lending apps in EU AI Act and Credit Scoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where does transposition stand (and why Poland is a special case)?
&lt;/h2&gt;

&lt;p&gt;State as of October 2026: the transposition deadline passed on 20 November 2025, and member states are at very different stages. The status changes quickly, so check it before you plan a release.&lt;/p&gt;

&lt;p&gt;Sweden is an example of a country that is ready. Its new Consumer Credit Act (Konsumentkreditlag, SFS 2026:1011) was adopted by the Riksdag on 27 May 2026 and enters into force on 20 November 2026.&lt;/p&gt;

&lt;p&gt;Poland is a special case. The timeline so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;7 July 2025:&lt;/strong&gt; the consumer protection office (UOKiK) publishes the first draft of a new consumer credit act.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;20-21 January 2026:&lt;/strong&gt; inter-ministerial consultation meeting on the draft.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;5 March 2026:&lt;/strong&gt; a version dated 25 February 2026 appears on the government legislation portal (RCL).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;18 May 2026:&lt;/strong&gt; the Prime Minister withdraws the UOKiK President's authorization to lead the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;22 May 2026:&lt;/strong&gt; the government announces that the draft will be written again from scratch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The work is now led by the Ministry of Justice together with the Ministry of Finance, and the new act is meant to transpose CCD2 and Directive 2023/2673 at the same time. Poland will not transpose the directive by 20 November 2026 and has told the European Commission so; the aim is to pass the act before the end of the Polish parliament's current term in autumn 2027. At the time of writing, the ministry's draft has not been published; you can follow it in the &lt;a href="https://www.gov.pl/web/premier/wplip-rm" rel="noopener noreferrer"&gt;Council of Ministers' list of legislative work&lt;/a&gt;. Until a new act enters into force, the Consumer Credit Act of 12 May 2011 applies in Poland.&lt;/p&gt;

&lt;p&gt;What this means for a product team, without legal interpretation: in Poland the date is unknown, and the final shape of the rules will arrive at short notice. If you operate in several EU countries, you will run the same product under different requirements in different markets for a while. That calls for per-market configuration on one codebase. Whether the directive has any direct effect in a country without a national law is a legal question; ask your lawyer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a backend-driven application flow makes CCD2 easier to absorb
&lt;/h2&gt;

&lt;p&gt;A backend-driven flow lets you add a consent screen, a message or a path to an analyst without a new app version or store review.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5dr062jo8r9rxlthfnjn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5dr062jo8r9rxlthfnjn.webp" alt="Person using a banking app on a smartphone with a payment card next to a laptop" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have not "implemented CCD2" and we do not claim that the apps below are CCD2-compliant. They are lending apps we build and maintain, and their architecture shows where the requirements from the list above would land.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AvaFin&lt;/strong&gt; is an iOS and Android app built in React Native that we have been building since January 2026.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AvaFin's central system decides the order of the application steps. After each step the app fetches the current state and works out what to show next, so changing the order or scope of the steps does not need a new app version. That is where a new consent screen, information about a personalized offer or a path to an analyst would go.&lt;/li&gt;
&lt;li&gt;When a change does have to ship in code, a minimum-version threshold in Firebase Remote Config forces the update. Once national rules are announced, old versions do not stay in circulation.&lt;/li&gt;
&lt;li&gt;The first loan after registration and the next loan for a returning customer run on the same engine. A new requirement changes in one place.&lt;/li&gt;
&lt;li&gt;The calculator uses the same pricing engine as the central system, so the amount in the app is the amount in the contract. Advertising, the information form and the contract show the same number.&lt;/li&gt;
&lt;li&gt;Analytics and attribution SDKs are off from the first launch and switch on only after the user decides. In September 2026 we adjusted how Crashlytics and Firebase Analytics start to meet the requirements of the client's legal team. Article 15 applies the same principle to credit consents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Aasa24&lt;/strong&gt; is a mobile lending app with card features, developed since 2023 by a dedicated team.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calculator parameters, documents and messages are managed from an admin panel without a new store version, and card features are switched on remotely with flags. The Article 8 warning and new pre-contractual content become a change in the panel.&lt;/li&gt;
&lt;li&gt;Releases ship every 3-4 weeks on average, and production hotfixes ship within days. When a national law lands at short notice, the change goes into the next release or a hotfix instead of waiting for a quarterly cycle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pre-contractual content is data and templates, so we test it on edge cases such as empty values or a repeat loan versus a first loan, not only on the happy path. More of this work is described on our &lt;a href="https://ordergroup.co/fintech-software-development/" rel="noopener noreferrer"&gt;fintech software development&lt;/a&gt; and &lt;a href="https://ordergroup.co/services/software-development/mobile-apps-development/" rel="noopener noreferrer"&gt;mobile app development&lt;/a&gt; pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  A CCD2 readiness checklist for your loan app
&lt;/h2&gt;

&lt;p&gt;A CCD2 readiness check for a loan app covers three areas: content, process, and data and architecture. Answer each question with yes or no; where a question maps to an article, the number is in brackets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57l86l34qpmxv7e4oc20.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57l86l34qpmxv7e4oc20.webp" alt="Usability testing session on a phone app (Unsplash)" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Content
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can you change the "Borrowing money costs money" warning, and the full advertising data behind a click or scroll, without a new app version? (Article 8(1) and 8(6))&lt;/li&gt;
&lt;li&gt;Is your in-app and push copy free of suggestions that a loan will improve the customer's finances? (Article 8(7)(a))&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Process
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does the backend decide the order of application steps and the scope of fields, so a change skips App Store and Google Play review?&lt;/li&gt;
&lt;li&gt;Is every consent box unchecked by default, including in cross-sell, and can an add-on be removed without blocking the application? (Articles 14 and 15)&lt;/li&gt;
&lt;li&gt;Does every pre-approved offer and limit increase wait for the customer's action before any credit starts? (Article 17)&lt;/li&gt;
&lt;li&gt;Does the customer have a path to a person after an automated decision, handled from a queue that records who changed the decision and when? (Article 18(8))&lt;/li&gt;
&lt;li&gt;Can a customer in difficulty find a path to forbearance and debt advice in the app? (Articles 35 and 36)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data and architecture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Does the information form render legibly on a phone from offer data, not only as a PDF? (Article 10(6))&lt;/li&gt;
&lt;li&gt;Do the calculator, the information form and the contract take the price from one engine, and does the offer carry a "personalized" flag? (Articles 10(3)(m) and 13)&lt;/li&gt;
&lt;li&gt;Can you reconstruct a creditworthiness decision: input data, version of the rules or model, result? (Article 18)&lt;/li&gt;
&lt;li&gt;Do products that used to sit outside the law, such as small amounts and deferred payments, go through the same process? (Article 2)&lt;/li&gt;
&lt;li&gt;Can you handle different national requirements through per-market configuration and ship a change in days, not quarters?&lt;/li&gt;
&lt;li&gt;Are analytics SDKs off until the user decides?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you answered "no" or "I don't know" to more than three questions, &lt;a href="https://ordergroup.co/contact-us/" rel="noopener noreferrer"&gt;let's talk about a review of your application flow&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is CCD2?
&lt;/h3&gt;

&lt;p&gt;CCD2 is the common name for Directive (EU) 2023/2225 on credit agreements for consumers. It replaces the 2008 Consumer Credit Directive (2008/48/EC), widens its scope and adds new rules on advertising, consent, creditworthiness assessment and automated decisions. Each EU member state has to write it into national law.&lt;/p&gt;

&lt;h3&gt;
  
  
  When does CCD2 apply?
&lt;/h3&gt;

&lt;p&gt;Member states had to transpose CCD2 by 20 November 2025 and must apply the national rules from 20 November 2026, under Article 48 of the directive. Several countries, Poland among them, will miss that date, so in practice the start depends on when each national law enters into force.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between CCD1 and CCD2?
&lt;/h3&gt;

&lt;p&gt;CCD2 covers credit up to EUR 100,000 with no lower limit, including buy now, pay later. It requires an information form that is legible on a phone and a cost warning in advertising. It bans pre-ticked consent, tying and unsolicited credit, and gives consumers a right to human intervention when an automated system assesses their creditworthiness.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does CCD2 apply to buy now, pay later?
&lt;/h3&gt;

&lt;p&gt;Yes. Interest-free credit without other charges, and credit repaid within three months with only insignificant charges, both fall within CCD2. Member states may switch off a limited set of provisions for these products under Article 2(8), but the products stay inside the directive and its core rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is CCD2 a directive or a regulation?
&lt;/h3&gt;

&lt;p&gt;CCD2 is a directive, so it needs national laws to take effect in each member state. Until a national law enters into force, the existing consumer credit rules of that country still apply. In Poland, that is the Consumer Credit Act of 12 May 2011.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does CCD2 mean for a mobile lending app?
&lt;/h3&gt;

&lt;p&gt;A mobile lending app needs an information form that is legible on a phone, cost warnings in its messages, no default consents, a flag for personalized offers and a path to human intervention after an automated decision. If the backend drives the application flow, most of these changes ship without a new store version.&lt;/p&gt;

&lt;h3&gt;
  
  
  Has Poland implemented CCD2?
&lt;/h3&gt;

&lt;p&gt;No. At the time of writing (October 2026), the Ministry of Justice and the Ministry of Finance are preparing a new draft, and the aim is to pass it before the end of the Polish parliament's current term in autumn 2027. Until then, Poland's Consumer Credit Act of 12 May 2011 applies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does CCD2 require human review of automated credit decisions?
&lt;/h3&gt;

&lt;p&gt;When a creditworthiness assessment relies on automated processing of personal data, the consumer can ask for human intervention: an explanation of the assessment, a chance to give their view and a review of the decision (Article 18(8)). In a product, that means a request path in the app and a review queue behind it; a line in the terms and conditions does not provide either.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/blog/ccd2-lending-app-loan-application-flow/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
      <category>business</category>
    </item>
    <item>
      <title>Battery Energy Storage System (BESS): How It Works and What Software It Needs</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Wed, 14 Oct 2026 01:08:02 +0000</pubDate>
      <link>https://dev.to/ordergroup/battery-energy-storage-system-bess-how-it-works-and-what-software-it-needs-3bd5</link>
      <guid>https://dev.to/ordergroup/battery-energy-storage-system-bess-how-it-works-and-what-software-it-needs-3bd5</guid>
      <description>&lt;p&gt;&lt;em&gt;A battery energy storage system (BESS) is a set of batteries, a power conversion system (PCS), a battery management system (BMS) and an energy management system (EMS) that stores electricity and releases it when it is needed. The IEA counted 108 GW of new BESS capacity in 2025, up 40%. In a BESS, software decides whether storage does its job.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a battery energy storage system (BESS)?
&lt;/h2&gt;

&lt;p&gt;A &lt;a href="https://ordergroup.co/glossary/bess/" rel="noopener noreferrer"&gt;battery energy storage system&lt;/a&gt; is a complete installation that charges from the grid or a renewable source, holds the energy in battery cells and discharges it on command. Batteries alone do not make a BESS. Without a PCS to convert current, a BMS to protect the cells and an EMS to decide when to charge and discharge, a rack of batteries cannot serve the grid or a building.&lt;/p&gt;

&lt;p&gt;The 108 GW figure for 2025, 40% more than in 2024, comes from the &lt;a href="https://www.iea.org/reports/global-energy-review-2026/technology-battery-storage" rel="noopener noreferrer"&gt;IEA Global Energy Review 2026&lt;/a&gt;. An &lt;a href="https://www.iea.org/commentaries/battery-storage-is-scaling-up-and-taking-on-a-larger-system-role" rel="noopener noreferrer"&gt;IEA commentary from 29 May 2026&lt;/a&gt; breaks it down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Around 87 GW of that capacity, roughly four-fifths, was utility-scale. The remaining 21 GW or so was installed behind the meter by businesses and households.&lt;/li&gt;
&lt;li&gt;China added just over 63 GW, the United States 19 GW and Europe about 6.2 GW. Europe's total was slightly lower than in 2024, yet its utility-scale additions more than doubled to about 4.6 GW.&lt;/li&gt;
&lt;li&gt;The 108 GW added in a single year beat the historical record for annual gas-fired capacity additions, about 107 GW in 2002.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why grids need storage in the first place is covered in our article on &lt;a href="https://ordergroup.co/blog/surplus-renewable-energy-storage/" rel="noopener noreferrer"&gt;managing surplus renewable energy&lt;/a&gt;. The rest of our energy work is collected in the &lt;a href="https://ordergroup.co/energy-hub/" rel="noopener noreferrer"&gt;Energy Hub&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  MW vs MWh: power and capacity
&lt;/h3&gt;

&lt;p&gt;A BESS has two ratings that are easy to confuse. Power, in megawatts (MW), says how fast the system can charge or discharge. Capacity, in megawatt-hours (MWh), says how much energy it can hold. Divide capacity by power and you get the duration: a 2 MW battery with 4 MWh of capacity can discharge at full power for about two hours.&lt;/p&gt;

&lt;p&gt;Durations are getting longer. The IEA commentary reports that the average duration of projects commissioned in 2025 was about three hours, up from about two hours in 2023, with a rising share of projects offering four hours or more.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a BESS work?
&lt;/h2&gt;

&lt;p&gt;A BESS works in a loop: it takes AC power from the grid or a solar plant, converts it to DC to charge the cells, then converts it back to AC when it discharges. The PCS does the conversion in both directions. Each layer has its own job in that loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The BMS watches the cells: voltage, temperature and &lt;a href="https://ordergroup.co/glossary/state-of-charge/" rel="noopener noreferrer"&gt;state of charge (SoC)&lt;/a&gt;. It can stop the system if a cell goes out of its safe range.&lt;/li&gt;
&lt;li&gt;The EMS decides when to charge, when to discharge and at what power, based on prices, site load, grid operator requests and the limits the BMS reports.&lt;/li&gt;
&lt;li&gt;The PCS carries out the EMS setpoint and handles the actual flow of power.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most systems also expose an operating mode that a person can switch. In the EMS we built for &lt;a href="https://ordergroup.co/case-studies/zeronest-solar-panel-monitoring-app/" rel="noopener noreferrer"&gt;zeronest&lt;/a&gt;'s prosumer storage, for example, storage control has three modes: Off, Manual and Automatic. Off parks the battery, Manual lets an engineer set charge and discharge by hand, and Automatic hands the decisions to the EMS logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the main components of a BESS?
&lt;/h2&gt;

&lt;p&gt;The main BESS components are battery cells grouped into modules and racks, a container or enclosure, the PCS, the BMS, the EMS, energy meters and a SCADA and communication layer. The term "BESS battery" usually refers to the cells and racks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cells, modules and racks: cells are assembled into modules, and modules into racks. The rack is the unit you see in photos of a BESS.&lt;/li&gt;
&lt;li&gt;The BESS container: utility-scale systems usually ship in containers with racks, fire protection and HVAC that keeps the cells in their temperature window.&lt;/li&gt;
&lt;li&gt;PCS (inverter): converts AC to DC and back, and executes the power setpoint.&lt;/li&gt;
&lt;li&gt;BMS: protects the cells and reports their state.&lt;/li&gt;
&lt;li&gt;EMS: makes the charge and discharge decisions for the whole site.&lt;/li&gt;
&lt;li&gt;Meters: measure what the site, the solar plant and the battery actually produce and consume. The EMS can only control what it can measure.&lt;/li&gt;
&lt;li&gt;SCADA and communication: collect data, show it to people and pass commands between the site, the cloud and the grid operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Which battery chemistry do BESS projects use?
&lt;/h3&gt;

&lt;p&gt;Most new BESS projects use lithium iron phosphate (LFP) cells. According to the IEA Global Energy Review 2026, LFP accounts for around 90% of deployments, while five years earlier its share was well below 50%. LFP cells are less energy-dense than the chemistries common in electric vehicles, but they are cheaper and better suited to frequent cycling, and a storage system cycles every day. The IEA commentary also notes that battery costs fell by more than 90% between 2010 and 2025.&lt;/p&gt;

&lt;h2&gt;
  
  
  BMS vs EMS vs SCADA: who controls what in a BESS?
&lt;/h2&gt;

&lt;p&gt;The BMS protects the cells, the PCS moves the power, the EMS decides what the battery should do and SCADA lets people see and supervise all of it. The layers work on different time scales and usually come from different suppliers, so the interfaces between them have to be designed and tested together. Our article on what BMS means covers the BMS layer in more detail.&lt;/p&gt;

&lt;p&gt;BESS control layers compared:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BMS: protects cells (voltage, temperature, SoC, balancing). Time scale: milliseconds to seconds. Usually supplied by the battery manufacturer.&lt;/li&gt;
&lt;li&gt;PCS: converts AC/DC and executes power setpoints. Time scale: milliseconds. Usually supplied by the inverter manufacturer.&lt;/li&gt;
&lt;li&gt;EMS: decides when to charge and discharge, within site, market and grid limits. Time scale: seconds to hours. Supplied by an integrator, a software house or the battery vendor.&lt;/li&gt;
&lt;li&gt;SCADA and monitoring: collects data, shows it to people, logs alarms and passes commands. Time scale: seconds to days. Supplied by the asset owner's platform or an integrator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl1wpe4gsh6y8z0end2pd.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl1wpe4gsh6y8z0end2pd.webp" alt="BESS control stack: BMS, PCS, EMS, SCADA" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For &lt;a href="https://ordergroup.co/case-studies/skyfri-solar-asset-management-platform/" rel="noopener noreferrer"&gt;Skyfri&lt;/a&gt;, which ran a solar and battery asset management platform, Order Group designed the architecture and built the whole EMS. You can read more in the EMS we built for Skyfri. The EMS went into production in June 2024 and controlled 7 plants, with more than 4 MW of battery power and more than 5 MWh of battery capacity.&lt;/p&gt;

&lt;p&gt;The Skyfri EMS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;connects to many types of batteries and inverters and handles several batteries and inverters on one site,&lt;/li&gt;
&lt;li&gt;runs fully offline, with no internet connection required to keep controlling the battery,&lt;/li&gt;
&lt;li&gt;covers site-level logic: a maximum site load limiter, peak shaving, energy trading and requests from the distribution system operator (DSO).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its stack is a Python asyncio backend, a React frontend and Azure IoT Edge with IoT Hub, and it was validated at the Socomec battery laboratory in Strasbourg. The monitoring layer above it, SolarSCADA and Skyfri Intelligence, was Skyfri's own product.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does BESS control software have to handle in practice?
&lt;/h2&gt;

&lt;p&gt;BESS control software has to keep the battery inside its physical limits, follow grid operator commands and still do what the owner bought it for. A CTO evaluating an EMS can check it against the functions below. They come from EMS projects we have worked on, including one for a PV and battery operator with sites in Germany and Canada (15 MWh of BESS, 5 MW of PV). The last three are in progress on that project.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SoC limits: the battery should never be pushed above or below the state-of-charge band the owner and the warranty allow.&lt;/li&gt;
&lt;li&gt;Deep discharge protection: a separate guard that stops discharging before the cells reach a damaging level, even if a trading or peak shaving rule asks for more.&lt;/li&gt;
&lt;li&gt;Active power range: the battery has to stay within the active power range that the PCS and the grid connection allow.&lt;/li&gt;
&lt;li&gt;DSO commands and limits: the grid operator can send a direct command or a power limit, and those override trading and peak shaving logic.&lt;/li&gt;
&lt;li&gt;Standby loss coverage: a battery that sits idle still loses energy, and the EMS has to cover those losses so the SoC does not drift.&lt;/li&gt;
&lt;li&gt;Safety controller: a controller that throttles battery power when measurements leave the safe range.&lt;/li&gt;
&lt;li&gt;Site load limiter: the EMS caps the total site load so the connection is never overloaded.&lt;/li&gt;
&lt;li&gt;Manual and direct control: engineers need to take over by hand during commissioning and faults.&lt;/li&gt;
&lt;li&gt;Simulator: a simulator with manual BESS control lets the team test the logic before it touches a real site.&lt;/li&gt;
&lt;li&gt;PID correction of battery power: real batteries do not hit their setpoint exactly, so a PID controller corrects the inaccuracy in delivered power.&lt;/li&gt;
&lt;li&gt;Edge plus cloud: the EMS runs on site on edge hardware (a Revolution Pi industrial computer, RevPi) and sends its data to the cloud.&lt;/li&gt;
&lt;li&gt;Separate BESS and meter views: web monitoring shows the battery and the meters as separate items.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An off-the-shelf EMS may cover some of these functions and leave out the rest, which is where the build or buy question below starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does a BESS make money?
&lt;/h2&gt;

&lt;p&gt;A BESS earns money by shifting energy in time, cutting peaks and selling flexibility to the grid. According to the IEA commentary, energy shifting was the main application in more than 90% of new projects in 2025, compared with around 40% in 2015.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Energy shifting (arbitrage): charge when electricity is cheap or abundant, discharge when it is expensive. Our &lt;a href="https://ordergroup.co/blog/energy-trading-platforms/" rel="noopener noreferrer"&gt;guide to energy trading platforms&lt;/a&gt; explains the market side.&lt;/li&gt;
&lt;li&gt;Peak shaving: discharge during the site's highest demand to lower capacity charges.&lt;/li&gt;
&lt;li&gt;Demand side response (DSR): change consumption or discharge on request in exchange for payment.&lt;/li&gt;
&lt;li&gt;Balancing services: the frequency containment reserve (FCR) and the automatic and manual frequency restoration reserves (aFRR, mFRR) that the grid operator buys to keep frequency stable.&lt;/li&gt;
&lt;li&gt;Co-location with renewables: about 24 GW of new utility-scale storage in 2025, just under 30%, was built alongside renewable plants, according to the IEA.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Build or buy: when does a BESS need custom software?
&lt;/h2&gt;

&lt;p&gt;A BESS can run on the manufacturer's EMS when it has one battery brand, one inverter brand, standard operating modes and a stable internet connection. A custom or extended EMS becomes necessary when any of those assumptions breaks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Several battery and inverter brands on one site or across a portfolio.&lt;/li&gt;
&lt;li&gt;A requirement to keep working offline.&lt;/li&gt;
&lt;li&gt;Integration with energy markets and with DSO commands.&lt;/li&gt;
&lt;li&gt;Your own control logic, such as a site load limiter or PID power correction.&lt;/li&gt;
&lt;li&gt;Your own platform for end customers, with monitoring and reporting on top of the EMS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Software we have built and support controls [[f:zn-mwh]] of zeronest's prosumer storage, and the EMS behind it supports 16 confirmed inverter brands. It also controls [[f:gg-mwh]] in the BESS of the PV and battery operator mentioned above. Talk to us about &lt;a href="https://ordergroup.co/services/software-development/custom-software-development/" rel="noopener noreferrer"&gt;custom software development&lt;/a&gt; for your storage project, or see the rest of our energy work in the &lt;a href="https://ordergroup.co/energy-hub/" rel="noopener noreferrer"&gt;Energy Hub&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does BESS stand for?
&lt;/h3&gt;

&lt;p&gt;BESS stands for battery energy storage system. The term covers the whole installation: battery cells, the power conversion system, the battery management system and the &lt;a href="https://ordergroup.co/glossary/ems/" rel="noopener noreferrer"&gt;energy management system&lt;/a&gt; that controls charging and discharging.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between MW and MWh in a battery storage system?
&lt;/h3&gt;

&lt;p&gt;MW is power: how fast the battery can charge or discharge. MWh is capacity: how much energy it holds. A 2 MW battery with 4 MWh of capacity can discharge at full power for about two hours.&lt;/p&gt;

&lt;h3&gt;
  
  
  How does a BESS container work?
&lt;/h3&gt;

&lt;p&gt;A BESS container holds battery racks together with fire protection and HVAC that keeps the cells at the right temperature. It connects to a PCS, and the BMS and EMS control it from inside or next to the container.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between BMS and EMS?
&lt;/h3&gt;

&lt;p&gt;The BMS protects the battery cells by watching voltage, temperature and state of charge. The EMS decides what the battery does: when to charge, when to discharge and at what power, within the limits the BMS reports.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long can a BESS discharge?
&lt;/h3&gt;

&lt;p&gt;It depends on the ratio of capacity to power. The IEA reports that projects commissioned in 2025 had an average duration of about three hours, and a growing share of projects offer four hours or more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can a BESS work without an internet connection?
&lt;/h3&gt;

&lt;p&gt;Yes, if its EMS runs locally. The EMS we built for Skyfri ran fully offline and kept controlling batteries and inverters without an internet connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is energy storage only about batteries?
&lt;/h3&gt;

&lt;p&gt;No. Energy can also be stored as heat. Our &lt;a href="https://ordergroup.co/case-studies/kyoto-digital-twin-software/" rel="noopener noreferrer"&gt;KYOTO case study&lt;/a&gt; describes Industrial IoT and a &lt;a href="https://ordergroup.co/glossary/digital-twin/" rel="noopener noreferrer"&gt;digital twin&lt;/a&gt; for a &lt;a href="https://ordergroup.co/glossary/thermal-energy-storage/" rel="noopener noreferrer"&gt;thermal energy storage&lt;/a&gt; system.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/blog/battery-energy-storage-system/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
      <category>energy</category>
    </item>
    <item>
      <title>Comparing Ionic, NativeScript &amp; React Native</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:39:17 +0000</pubDate>
      <link>https://dev.to/ordergroup/comparing-ionic-nativescript-react-native-322h</link>
      <guid>https://dev.to/ordergroup/comparing-ionic-nativescript-react-native-322h</guid>
      <description>&lt;p&gt;&lt;em&gt;When it comes to creating apps with JavaScript, there are multiple approaches, and none is more popular than React Native. Some of the biggest apps on both the App Store &amp;amp; Play Store rely on React Native, Ionic is quite popular as well, and NativeScript is behind the two. We also use Meta's framework for creating cross-platform native apps. Curious why?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://reactnative.dev/" rel="noopener noreferrer"&gt;React Native&lt;/a&gt; is currently the most popular JavaScript framework for creating mobile apps. Neither Ionic nor NativeScript can match its popularity. Its popularity comes from the fact that it was tied to React from the start, while both Ionic and NativeScript were Angular-first (the bet did not pay off for the two).&lt;/p&gt;

&lt;p&gt;The framework allows developers to build mobile apps using JavaScript &amp;amp; TypeScript and React's JSX syntax, so you can build rich user interfaces that feel native. You may even reuse the same libraries you are used to from web React, such as &lt;a href="https://formik.org/" rel="noopener noreferrer"&gt;Formik&lt;/a&gt;, &lt;a href="https://redux.js.org/" rel="noopener noreferrer"&gt;Redux&lt;/a&gt;, &lt;a href="https://tanstack.com/query/latest/docs/framework/react/react-native" rel="noopener noreferrer"&gt;react-query&lt;/a&gt; or even &lt;a href="https://www.nativewind.dev/" rel="noopener noreferrer"&gt;tailwind&lt;/a&gt; (provided you install an additional plugin for handling utility classes).&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use It
&lt;/h3&gt;

&lt;p&gt;In our view, if you're choosing between those three, you can't go wrong with React Native. It's flexible, the community support is great, and there are a ton of libraries and resources available. If the bare workflow does not suit you, you have &lt;a href="https://expo.dev/" rel="noopener noreferrer"&gt;Expo&lt;/a&gt; at your disposal - a great project that extends Meta's framework and adds many indispensable goodies.&lt;/p&gt;

&lt;p&gt;What's becoming more important is that the number of React Native projects is huge, which means tools such as &lt;a href="https://medium.com/tribalscale/using-github-copilot-with-react-native-134ce8e7765b" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=5Y_t6NRl_xI" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt;, and others have more repositories to scrape, so suggestions for your code &lt;strong&gt;should&lt;/strong&gt; be better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ionic
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ionicframework.com/" rel="noopener noreferrer"&gt;Ionic&lt;/a&gt; allows the creation of hybrid applications using web technologies like HTML, CSS, and JavaScript. The framework wraps the web application in a native container using &lt;a href="https://capacitorjs.com/" rel="noopener noreferrer"&gt;Capacitor&lt;/a&gt;, thanks to which you may access native APIs from the comfort of the DOM. Because of that, however, apps will be much slower.&lt;/p&gt;

&lt;p&gt;Of the 3 frameworks, Ionic will be the easiest to switch to for a web developer, because React Native and NativeScript have some gotchas you need to keep in mind. How many you hit depends on how deep you go, but there are definitely some.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use It
&lt;/h3&gt;

&lt;p&gt;Ionic is great if you want to create quick prototypes or a quick mobile app version of your website, and don't need a performance beast. It's also great for reusing as much code as you can between your web and mobile app.&lt;/p&gt;

&lt;p&gt;If your company is primarily a &lt;a href="https://ionicframework.com/docs/vue/overview" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt; or &lt;a href="https://ionicframework.com/docs/angular/overview" rel="noopener noreferrer"&gt;Angular&lt;/a&gt; development company, you're effectively choosing between Ionic and NativeScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  NativeScript
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://nativescript.org/" rel="noopener noreferrer"&gt;NativeScript&lt;/a&gt; (originally called &lt;em&gt;Telerik NativeScript&lt;/em&gt;) enables developers to create truly native mobile applications using JavaScript or TypeScript. Unlike Ionic, it does not use WebView but accesses native APIs directly. If you know you will need plenty of third-party libraries, NativeScript isn't for you. The community isn't huge, and it likely won't grow; at least nothing indicates it will. A huge pro is that it has first-party integration with many frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use It
&lt;/h3&gt;

&lt;p&gt;NativeScript is the least popular of the 3, but it's still not a bad option. You will have significantly fewer third-party plugins and libraries at your disposal, but maybe you won't mind. Furthermore, &lt;a href="https://docs.nativescript.org/guide/creating-a-project" rel="noopener noreferrer"&gt;it offers integrations with 6 different web&lt;/a&gt; frameworks, not counting the option of vanilla JavaScript &amp;amp; TypeScript.&lt;/p&gt;

&lt;p&gt;If your company primarily uses &lt;a href="https://docs.nativescript.org/tutorials/build-a-master-detail-app-with-vue" rel="noopener noreferrer"&gt;Vue.js&lt;/a&gt;, &lt;a href="https://docs.nativescript.org/tutorials/build-a-master-detail-app-with-angular" rel="noopener noreferrer"&gt;Angular&lt;/a&gt;, &lt;a href="https://docs.nativescript.org/tutorials/build-a-master-detail-app-with-svelte" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt;, or &lt;a href="https://stackblitz.com/edit/nativescript-solid?file=app/app.jsx" rel="noopener noreferrer"&gt;Solid&lt;/a&gt;, go for it. If you know ahead of time that you won't be using many third-party UI components and such, it's safe to pick. If you do expect to use them, consider a different framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  React Native vs Ionic vs NativeScript
&lt;/h2&gt;

&lt;p&gt;While choosing the tool matters less than other business decisions, it's still an important decision that &lt;strong&gt;could&lt;/strong&gt; make or break your project. Depending on the type of your app, it can have a big impact on the user experience you deliver.&lt;/p&gt;

&lt;h3&gt;
  
  
  User Experience
&lt;/h3&gt;

&lt;p&gt;React Native provides a truly native look and feel, as it uses native components for rendering. This results in smoother animations and transitions, making it ideal for performance-sensitive applications.&lt;/p&gt;

&lt;p&gt;NativeScript also offers a native experience, allowing direct access to native APIs, which can enhance the app's responsiveness and overall user satisfaction.&lt;/p&gt;

&lt;p&gt;Ionic, while capable of creating visually appealing applications, often resembles mobile websites more than native apps because it relies on &lt;a href="https://en.wikipedia.org/wiki/WebView" rel="noopener noreferrer"&gt;WebView&lt;/a&gt;. This can limit performance in complex applications, and the user interfaces look similar to native ones but feel slightly off.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development Speed
&lt;/h3&gt;

&lt;p&gt;Ionic is generally faster in development for developers familiar with web technologies (HTML, CSS, JavaScript), making it a preferred choice for rapid prototyping and simpler applications that aren't performance critical.&lt;/p&gt;

&lt;p&gt;React Native and NativeScript may require more time to master due to their more complex setups and the need for understanding native mobile development concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;p&gt;React Native and NativeScript are designed for high performance close to that of native applications. If you're developing graphics-intensive, complex applications, choose one of these two. You should also choose one of them if smooth 60 frames per second is a priority.&lt;/p&gt;

&lt;p&gt;Ionic, while effective for simpler apps, can struggle with performance under heavy loads or when utilizing extensive animations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Community and Ecosystem
&lt;/h3&gt;

&lt;p&gt;Both &lt;a href="https://stackoverflow.com/questions/tagged/react-native" rel="noopener noreferrer"&gt;React Native&lt;/a&gt; and &lt;a href="https://stackoverflow.com/questions/tagged/ionic" rel="noopener noreferrer"&gt;Ionic&lt;/a&gt; have large communities with plenty of resources, libraries, and third-party plugins that can speed up development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackoverflow.com/questions/tagged/nativescript" rel="noopener noreferrer"&gt;NativeScript&lt;/a&gt; has a smaller community but still offers useful resources and support, particularly for developers who want to use native capabilities.&lt;/p&gt;

&lt;p&gt;In the &lt;a href="https://survey.stackoverflow.co/2024/technology" rel="noopener noreferrer"&gt;2024 Stack Overflow Developer Survey&lt;/a&gt;, 9% of professional developers declared they're using React Native, 2.8% declared they are using Ionic, and... NativeScript wasn't there. According to the same survey, 56.5% of professional developers "admired" React Native, while 39.6% "admired" Ionic.&lt;/p&gt;

&lt;p&gt;When it comes to popularity on GitHub, &lt;a href="https://github.com/facebook/react-native" rel="noopener noreferrer"&gt;React Native's repository&lt;/a&gt; has 119k stars, &lt;a href="https://github.com/NativeScript/NativeScript" rel="noopener noreferrer"&gt;NativeScript's repo&lt;/a&gt; has 24.2k stars, while &lt;a href="https://github.com/ionic-team/ionic-framework" rel="noopener noreferrer"&gt;Ionic's&lt;/a&gt; has more than double that with 51.1k.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cross-Platform Compatibility
&lt;/h3&gt;

&lt;p&gt;All three frameworks allow for cross-platform development, but the extent of code reuse varies. React Native and NativeScript can share a significant portion of code between iOS and Android. Meta's mobile app framework has one significant pro: &lt;a href="https://microsoft.github.io/react-native-windows/" rel="noopener noreferrer"&gt;you may also create desktop apps for macOS &amp;amp; Windows.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ionic allows broader code reuse across web, mobile, and desktop platforms but may require additional adjustments for optimal performance on mobile phones. Keep in mind that desktop apps created with Ionic are based on Electron, which is great for development speed but uses too many resources. For example, Slack, a popular messaging app, will easily use 500 MB of your RAM without breaking a sweat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ful86aui2b16h01mahrh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ful86aui2b16h01mahrh8.png" alt="React Native" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The three frameworks approach mobile app development differently, each catering to different developer groups and companies. React Native focuses on creating high-performance, native-like applications using React only. It's ideal for teams &amp;amp; companies familiar with React that want to use native capabilities. Ionic uses web technologies (HTML, CSS, JavaScript) to build hybrid applications that run in a WebView. It's best for rapid prototyping and simpler applications where development speed matters more than native performance, and it's great for web developers moving to mobile. Performance can be a limitation for more complex apps, but it is very accessible for web developers. Lastly, NativeScript provides a way to create truly native apps using JavaScript or TypeScript, accessing native APIs directly. It's suitable for applications that make extensive use of native features, and while it offers a good balance between performance and flexibility, it may not have as large a community or ecosystem as React Native or Ionic.&lt;/p&gt;

&lt;p&gt;The choice among React Native, Ionic, and NativeScript should depend on your project requirements, team expertise, and desired user experience. Each framework has its own strengths and weaknesses and its own ratio of development time to UX, so understanding your goals will help you make the best decision for your mobile app.&lt;/p&gt;

&lt;p&gt;For us, as well as for a large portion of other companies, there is no better choice than React Native. We love React, and we have created apps using both the native version and the web one. &lt;a href="https://l.ordergroup.co/contact" rel="noopener noreferrer"&gt;If you need an experienced React &amp;amp; React Native development company, feel free to contact us&lt;/a&gt;. &lt;a href="https://github.com/ordergroup/boilerplate-react-native-expo" rel="noopener noreferrer"&gt;You can also see our Expo setup on GitHub.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/resources/article-business-and-technical/comparing-ionic-nativescript-react-native/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
    </item>
    <item>
      <title>Supercharging PoC Development with AI: A Smarter, Faster Approach</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:39:16 +0000</pubDate>
      <link>https://dev.to/ordergroup/supercharging-poc-development-with-ai-a-smarter-faster-approach-325f</link>
      <guid>https://dev.to/ordergroup/supercharging-poc-development-with-ai-a-smarter-faster-approach-325f</guid>
      <description>&lt;p&gt;&lt;em&gt;Being able to validate ideas quickly and bring concepts to life matters a lot in software development. Proof of Concept (PoC) development lets you test hypotheses, gather feedback, and make informed decisions before committing significant resources. However, traditional PoC processes can be time-consuming, often getting bogged down in repetitive tasks and coordination problems between frontend and backend teams.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI-assisted development changes this. New tools can drastically accelerate the prototyping phase, allowing teams to iterate faster and focus on core value propositions. Today, we'll look at a workflow that uses two such tools: &lt;strong&gt;v0.dev&lt;/strong&gt; for frontend generation and &lt;strong&gt;Cursor IDE&lt;/strong&gt; for backend implementation. This combination promises speed and a more streamlined path from idea to functional prototype.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Challenge: Bridging the Frontend-Backend Gap in PoCs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One common bottleneck in PoC development is the synchronization between the user interface (UI) and the underlying logic and data handling (backend). Often, frontend development proceeds based on initial assumptions, only to require significant backend adjustments later, or vice-versa. This friction slows down iteration cycles and can obscure the core concept being tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introducing the AI-Powered Duo&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;v0.dev: Your AI Frontend Kick-starter&lt;/strong&gt;
v0.dev, from the creators of Next.js (Vercel), is a generative AI tool built for creating web UIs. From simple text prompts or even Figma designs, v0 generates production-quality React components based on popular libraries like Shadcn UI and Tailwind CSS. It is good at turning ideas into interactive interfaces quickly, so you can see and iterate on them right away. Need a complex dashboard layout or a multi-step onboarding form? Describe it to v0, and it will generate the initial code, often surprisingly close to what you need. Its Figma integration also speeds up the process for design-driven teams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cursor IDE: The AI-Native Code Environment&lt;/strong&gt;
Cursor is an AI-first code editor built on VS Code. It integrates Large Language Models (LLMs) directly into the development workflow, with features that go well beyond simple code completion. Cursor understands the context of your entire codebase, so it can generate code, refactor existing logic, debug errors, and even answer questions about your project. Its "Agent" functionality, now the default interaction mode, lets developers delegate tasks to the AI in natural language, which significantly speeds up work that would traditionally require manual coding. Cursor offers access to various models; Anthropic's Claude 3.7 Sonnet provides a strong balance of performance and reasoning, while Google's Gemini 2.5 Pro is also available for complex coding challenges.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Workflow: Frontend-First, AI-Accelerated&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Our proposed workflow uses both tools one after the other, with a tight integration between them:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Crafting the UI with v0.dev&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prompt or Design:&lt;/strong&gt; Start by describing the desired UI components or pages to v0.dev using natural language prompts. Alternatively, import existing Figma designs to provide a visual starting point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate &amp;amp; Iterate:&lt;/strong&gt; v0 generates React code (typically using Shadcn UI/Tailwind CSS) and, importantly, provides an &lt;strong&gt;interactive preview&lt;/strong&gt; alongside the code. You can immediately see how the generated components look and feel, which gives you fast visual feedback. Refine the UI by providing follow-up prompts, tweaking styles, or modifying component structures directly in the preview or code until the frontend closely matches the PoC requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export Code:&lt;/strong&gt; Once satisfied, copy the generated React code. Besides the visual layer, this code implicitly defines the data requirements and interactions needed from the backend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Building Backend Endpoints with Cursor IDE&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Import &amp;amp; Contextualize:&lt;/strong&gt; Bring the v0-generated frontend code into your Cursor IDE project. Cursor's AI can analyze this code, understanding the component props, state management, and data fetching needs. You can use features like @codebase or tag specific files to give the AI the necessary context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate Endpoints:&lt;/strong&gt; Use Cursor's Agent or inline editing features (Cmd+K/Ctrl+K) to generate the corresponding backend API endpoints. For example, you might select a frontend form component and instruct the Agent: &lt;em&gt;"Generate a Python/Django API endpoint to handle the submission of this form data, including validation based on the component's props."&lt;/em&gt; The Agent can directly modify files, run commands, and even iterate on errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refine &amp;amp; Connect:&lt;/strong&gt; Cursor will generate the backend code (e.g., Django views/serializers, FastAPI endpoints). Review and refine the generated code, adding specific business logic or database interactions as needed. Cursor can help with this refinement as well, keeping the frontend and backend in sync.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why This Workflow Excels for PoCs&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unprecedented Speed:&lt;/strong&gt; AI handles much of the boilerplate for both the frontend UI (with immediate visual feedback via interactive previews in v0) and basic backend scaffolding, which drastically reduces development time. Teams can build and test concepts in days rather than weeks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Friction:&lt;/strong&gt; The frontend-first approach ensures the backend is built to directly support the UI's actual needs, minimizing integration issues and rework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on Core Logic:&lt;/strong&gt; By automating UI generation and basic endpoint creation, developers can concentrate on the unique business logic and core functionality that differentiates the PoC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency:&lt;/strong&gt; v0 often uses standardized component libraries (like Shadcn UI), which keeps the UI consistent, while Cursor can be guided to follow project-specific coding standards using .cursorrules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improved Collaboration:&lt;/strong&gt; Designers can see their visions translated into interactive code faster with v0, while developers can bridge the gap to backend functionality more efficiently with Cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster Validation &amp;amp; Iteration:&lt;/strong&gt; The speed gained allows for quicker feedback loops and rapid iteration based on stakeholder input or testing results.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Future is Collaborative AI&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Tools like &lt;strong&gt;v0.dev&lt;/strong&gt;and &lt;strong&gt;Cursor IDE&lt;/strong&gt;do more than replace manual coding: they move developers toward a more collaborative relationship with AI. They act as assistants that handle repetitive tasks, so people can focus on higher-level problem-solving and innovation.&lt;/p&gt;

&lt;p&gt;For managers, this means faster time-to-market for new ideas, lower risk thanks to quick validation, and development teams that work more efficiently. For developers, it means working with current technology, doing less tedious work, and spending more time on the creative and challenging parts of software engineering.&lt;/p&gt;

&lt;p&gt;Teams that adopt these AI-powered workflows put themselves at the forefront of software development and can build faster.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/resources/article-business-and-technical/supercharging-poc-development/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
    </item>
    <item>
      <title>Backend Development in Python. When to Use Django?</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:26:27 +0000</pubDate>
      <link>https://dev.to/ordergroup/backend-development-in-python-when-to-use-django-14bo</link>
      <guid>https://dev.to/ordergroup/backend-development-in-python-when-to-use-django-14bo</guid>
      <description>&lt;p&gt;&lt;em&gt;Django is one of the most popular web backend frameworks for Python, and for good reason. The project's website says it all in one sentence: "Django makes it easier to build better web apps more quickly and with less code."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;When developing a web backend in Python, &lt;a href="https://wiki.python.org/moin/WebFrameworks" rel="noopener noreferrer"&gt;you have many good choices&lt;/a&gt;. Among full-stack frameworks, there are Django, Masonite, TurboGears, and web2py. If you're looking for something with a smaller footprint, you can choose between FastAPI, Flask, Bottle, and Pyramid.&lt;/p&gt;

&lt;p&gt;At some point, you may ask yourself: when should I use Django, then? With so many choices, should I be using it at all?&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Django?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rapid Development
&lt;/h3&gt;

&lt;p&gt;Developing with Django is fast. Seriously fast. &lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;"Django was designed to help developers take applications from concept to completion as quickly as possible."&lt;/a&gt; This speed is largely due to its built-in features, such as the admin dashboard, the ORM, easily customizable authentication and authorization, form handling with CSRF protection, and more. The foundations are already in place, so you can move faster without sacrificing much quality.&lt;/p&gt;

&lt;p&gt;Furthermore, Django encourages the "Don't Repeat Yourself" (DRY) principle, allowing developers to write less code while achieving more functionality. This is particularly helpful for projects with tight deadlines, where rapid iteration and deployment are essential. It also keeps the project structure consistent, since the framework suggests a typical solution for most problems, so there is no need to reinvent the wheel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scalable Applications
&lt;/h3&gt;

&lt;p&gt;If you think Django won't work at a large scale just because Python is a relatively slow language, think again. "&lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;Some of the busiest sites on the web leverage Django's ability to quickly and flexibly scale.&lt;/a&gt;" The framework is designed to handle high-traffic applications with ease. Some of the features that contribute to Django's scalability include:&lt;/p&gt;

&lt;h4&gt;
  
  
  Caching Framework
&lt;/h4&gt;

&lt;p&gt;Django includes &lt;a href="https://docs.djangoproject.com/en/5.1/topics/cache/" rel="noopener noreferrer"&gt;a robust caching framework&lt;/a&gt; that makes it a breeze to cache content, views, and entire pages. This caching mechanism helps reduce the load on the server and improves the application's performance. It also integrates with the most common tools, such as &lt;a href="https://fly.io/django-beats/caching-in-django-with-redis/" rel="noopener noreferrer"&gt;Redis&lt;/a&gt; and &lt;a href="https://blog.sentry.io/django-performance-improvements-part-4-caching-in-django-applications/#memory-caching" rel="noopener noreferrer"&gt;Memcached&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Asynchronous Tasks
&lt;/h4&gt;

&lt;p&gt;Django supports &lt;a href="https://docs.djangoproject.com/en/5.1/topics/async/" rel="noopener noreferrer"&gt;asynchronous tasks&lt;/a&gt; through integrations with &lt;a href="https://medium.com/django-unleashed/how-to-use-celery-with-django-c4c341997704" rel="noopener noreferrer"&gt;task queues like Celery&lt;/a&gt;. Developers can offload time-consuming tasks to background workers, so the main application stays responsive and scalable.&lt;/p&gt;

&lt;h4&gt;
  
  
  Load Balancing
&lt;/h4&gt;

&lt;p&gt;Django applications can be easily &lt;a href="https://stackoverflow.com/questions/61268051/implementing-load-balancing-in-django" rel="noopener noreferrer"&gt;load-balanced across multiple servers&lt;/a&gt; using standard load balancing techniques, such as round-robin or least-connection algorithms. This allows the application to handle increased traffic by distributing the load across multiple servers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security in Django
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.djangoproject.com/" rel="noopener noreferrer"&gt;"Django takes security seriously and helps developers avoid many common security mistakes."&lt;/a&gt; Security is a critical part of web development, and the team behind the framework makes sure their creation is secure. Django provides built-in protection against various types of attacks. Some of its main security features include:&lt;/p&gt;

&lt;h4&gt;
  
  
  Cross-Site Scripting (XSS) Protection
&lt;/h4&gt;

&lt;p&gt;Django's template engine automatically escapes all user-provided input, &lt;a href="https://docs.djangoproject.com/en/5.1/topics/security/#cross-site-scripting-xss-protection" rel="noopener noreferrer"&gt;preventing XSS attacks&lt;/a&gt; where malicious scripts could be injected into web pages. This feature helps protect the application and its users from potential harm.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cross-Site Request Forgery (CSRF) Protection
&lt;/h4&gt;

&lt;p&gt;Django includes &lt;a href="https://docs.djangoproject.com/en/5.1/howto/csrf/#using-csrf" rel="noopener noreferrer"&gt;a robust CSRF protection mechanism&lt;/a&gt; that helps prevent unauthorized actions on behalf of a user. This protection is automatically enabled for all POST, PUT, and DELETE requests, making it difficult for attackers to perform unauthorized actions.&lt;/p&gt;

&lt;h4&gt;
  
  
  SQL Injection Protection
&lt;/h4&gt;

&lt;p&gt;Django's ORM automatically sanitizes database queries, preventing SQL injection attacks. By using parameterized queries and escaping user input, Django ensures that malicious SQL code cannot be executed on the database.&lt;/p&gt;

&lt;h4&gt;
  
  
  Secure Password Hashing
&lt;/h4&gt;

&lt;p&gt;Django uses secure password hashing algorithms, such as Argon2, to store user passwords. These algorithms are designed to be computationally expensive, making it difficult for attackers to brute-force or crack the hashed passwords.&lt;/p&gt;

&lt;h4&gt;
  
  
  Secure Headers
&lt;/h4&gt;

&lt;p&gt;Django &lt;a href="https://docs.djangoproject.com/en/5.1/topics/security/#host-header-validation" rel="noopener noreferrer"&gt;sets several security-related HTTP headers&lt;/a&gt; by default, such as &lt;em&gt;X-Content-Type-Options, X-Frame-Options&lt;/em&gt;, and &lt;em&gt;Referrer-Policy&lt;/em&gt;. These headers help protect the application and its users by enforcing security policies in web browsers.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Development
&lt;/h2&gt;

&lt;p&gt;On its own, Django is already very good for API development. You define a model, then define a view that uses &lt;em&gt;JsonResponse&lt;/em&gt; from &lt;em&gt;django.http&lt;/em&gt;, and on the surface there's usually not much more to it.&lt;/p&gt;

&lt;p&gt;If you want, you can also use Django Rest Framework. &lt;a href="https://www.django-rest-framework.org/" rel="noopener noreferrer"&gt;The addition to Django&lt;/a&gt; is a common choice among web app developers who want to write a front-end in, say, Next.js, and also develop a mobile app, among other reasons.&lt;/p&gt;

&lt;p&gt;Django REST Framework is really easy to integrate, with the site's documentation listing only three steps to get started: installing it with pip or poetry, adding "rest_framework" to your INSTALLED_APPS setting, and, to get started quickly, adding REST framework's login and logout views to your root "urls.py" file. Django Rest Framework makes building complex APIs easy and fast by providing built-in tools, such as serializers, base views, viewsets and mixins. Combining the last two lets you add endpoints or features simply by adding mixins to your viewset class inheritance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Companies Use Django?
&lt;/h2&gt;

&lt;p&gt;Django is in use at companies that scaled to operate on petabytes of data every day:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instagram. Django is in use at &lt;a href="https://engineering.fb.com/2023/09/07/culture/threads-inside-story-metas-newest-social-app/" rel="noopener noreferrer"&gt;both Instagram and Threads&lt;/a&gt;, running on &lt;a href="https://github.com/facebookincubator/cinder" rel="noopener noreferrer"&gt;Cinder&lt;/a&gt;, a custom CPython version developed at Meta. Fun fact: Instagram was able to sustain 30 million users &lt;a href="https://instagram-engineering.com/web-service-efficiency-at-instagram-with-python-4976d078e366" rel="noopener noreferrer"&gt;with only 3 engineers.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.clubhouse.com/reining-in-the-thundering-herd-with-django-and-gunicorn/" rel="noopener noreferrer"&gt;Clubhouse.&lt;/a&gt; The popular app was able to handle 1 million requests per minute with only two backend engineers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stackshare.io/sentry/how-sentry-receives-20-billion-events-per-month-while-preparing-to-handle-twice-that" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;. The popular SaaS handles 20 billion events per month from some of the biggest services, while preparing to handle twice that.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://stackshare.io/disqus/disqus" rel="noopener noreferrer"&gt;Disqus.&lt;/a&gt; The immensely popular user engagement platform runs on Django. You can only imagine how many comments and other items the back-end Python framework must handle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you need more proof that Django can work for you and your business, look at &lt;a href="https://builtwithdjango.com/projects/" rel="noopener noreferrer"&gt;this webpage&lt;/a&gt;. It lists a multitude of projects of all sizes built with this full-stack framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We use Django because it is scalable, secure, and efficient for developers, even though ticking all these boxes at the same time can seem impossible. It's all thanks to the solid foundations you can easily build on. We have successfully developed many projects using this Python framework and have no plans to give up on it. It lets us write great services quickly while maintaining high quality. If you'd like to discuss working together, &lt;a href="https://l.ordergroup.co/contact" rel="noopener noreferrer"&gt;do not hesitate to contact us.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/resources/article-business-and-technical/backend-development-in-python-when-to-use-django/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
    </item>
    <item>
      <title>What Does BMS Mean? Battery &amp; Building Management Systems Explained</title>
      <dc:creator>Filip Szamborski</dc:creator>
      <pubDate>Thu, 08 Oct 2026 09:07:02 +0000</pubDate>
      <link>https://dev.to/ordergroup/what-does-bms-mean-battery-building-management-systems-explained-3g9d</link>
      <guid>https://dev.to/ordergroup/what-does-bms-mean-battery-building-management-systems-explained-3g9d</guid>
      <description>&lt;p&gt;&lt;em&gt;BMS most often stands for Battery Management System: the hardware and software that keep a battery or energy store safe, balanced and within its limits. In facility management, the same three letters mean Building Management System, the controller that runs a building's heating, ventilation and access. This guide settles both meanings in the first minute, then digs into the battery and energy-storage side, because that is where we have shipped real systems.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  BMS Meaning: What Does BMS Stand For?
&lt;/h2&gt;

&lt;p&gt;BMS has two common meanings, and the right one depends on the industry you work in.&lt;/p&gt;

&lt;p&gt;In energy, electric vehicles and grid storage, BMS means &lt;strong&gt;Battery Management System&lt;/strong&gt;: the layer of hardware and software that keeps a battery or energy store working safely. In buildings and facilities, BMS means &lt;strong&gt;Building Management System&lt;/strong&gt;: the control system that runs heating, ventilation, air conditioning, lighting and access across a site.&lt;/p&gt;

&lt;p&gt;Here is the fast way to tell them apart:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Battery Management System&lt;/strong&gt; - monitors and protects an energy store; found in EVs, solar-plus-storage, grid batteries and industrial energy plants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Building Management System&lt;/strong&gt; - supervises building services such as HVAC and lighting; found in offices, factories, hospitals and commercial property.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this article is about the Battery Management System, because that is the system our engineers design and build. The building-management sense gets its own short, honest section below, where we have no project to claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a Battery Management System (BMS)?
&lt;/h2&gt;

&lt;p&gt;A Battery Management System is the control layer that keeps an energy store safe, balanced and inside its operating limits.&lt;/p&gt;

&lt;p&gt;The store might be a pack of lithium-ion cells in a car, a container of grid batteries, or something far less obvious. Whatever it holds, the BMS has the same job: measure the true state of the store, protect it from damage, and report clean data to the systems above it. In practice that breaks down into a few concrete functions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fry1t7z2z4wumgbthnc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fry1t7z2z4wumgbthnc.jpg" alt="A lithium battery module being pulled from a storage rack - the kind of energy store a BMS keeps safe and balanced" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State of charge&lt;/strong&gt; - how much energy is available right now, so operators and higher-level software can plan around it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cell and zone balancing&lt;/strong&gt; - stopping individual cells or regions from drifting apart, which shortens life and creates hot spots.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Thermal protection&lt;/strong&gt; - watching temperature and triggering cooling or a slowdown before anything overheats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety cut-off&lt;/strong&gt; - isolating the store the moment a reading crosses a hard limit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication&lt;/strong&gt; - passing structured data up to a SCADA system or an energy management layer that makes the commercial calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;General references such as Wikipedia and battery-hardware vendors describe these functions for chemical cells. The part most guides skip is what a BMS looks like when the store it protects is not a chemical battery at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Getting a BMS Right Is Hard
&lt;/h2&gt;

&lt;p&gt;A BMS is safety-critical software that has to be right every second, not most of the time.&lt;/p&gt;

&lt;p&gt;A dashboard can lag and no one gets hurt. A management system for a large energy store cannot afford that luxury; a missed temperature spike or a late cut-off can damage expensive hardware or worse. That raises the bar in three ways that shape the whole build.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Real time&lt;/strong&gt; - readings arrive continuously, and the system has to react inside tight windows rather than on a human's schedule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration&lt;/strong&gt; - the BMS has to talk to industrial hardware and to the plant's control systems, which often speak older, unforgiving protocols.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust&lt;/strong&gt; - operators act on what the system tells them, so the data has to be accurate and the alarms have to be believable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why a BMS is rarely a stand-alone app. It is embedded in a larger platform, and it lives or dies on how well it is wired into everything around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How We Built a BMS for Large-Scale Energy Storage
&lt;/h2&gt;

&lt;p&gt;We built a battery management system for a store that holds no chemical battery at all.&lt;/p&gt;

&lt;p&gt;The client was &lt;a href="https://ordergroup.co/case-studies/kyoto-digital-twin-software/" rel="noopener noreferrer"&gt;Kyoto Group&lt;/a&gt;, a Euronext-listed energy company. The store was a thermal energy store based on molten salt, sitting at a concentrated solar power (CSP) plant. Instead of cells and voltages, the "battery" here is heat held in salt. The control problem, though, is the one every BMS solves: know the state of the store, keep it safe, and give accurate data to the systems that run the plant.&lt;/p&gt;

&lt;p&gt;Because it is a heat store and not a chemical battery, the precise label for what we delivered is an energy-storage management system, even though the project itself uses the term BMS. We integrated it directly with the plant's &lt;strong&gt;SCADA&lt;/strong&gt; layer, which supervises and controls the industrial process, so storage decisions and plant operations stayed in step.&lt;/p&gt;

&lt;p&gt;Alongside it we built a second system: an intelligent surveillance and safety layer using &lt;strong&gt;infrared (IR) cameras&lt;/strong&gt; and image recognition. It works with the BMS and SCADA to catch anomalies that a single sensor reading would miss, such as a hot surface or an object where none should be.&lt;/p&gt;

&lt;p&gt;The goal was to manage energy production at the plant, use the thermal store well, and let the operator get more value from the same hardware. You can read the full build - its core elements, the technology behind it, and the outcome - in the &lt;a href="https://ordergroup.co/case-studies/kyoto-digital-twin-software/" rel="noopener noreferrer"&gt;Kyoto industrial IoT and digital twin case study&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  BMS vs EMS: What Is the Difference?
&lt;/h2&gt;

&lt;p&gt;A BMS protects and reports on the store itself; an EMS decides when to charge, discharge or trade the stored energy.&lt;/p&gt;

&lt;p&gt;The BMS keeps the asset healthy. The Energy Management System, or EMS, puts it to commercial use. They sit side by side and swap data all day, yet they answer different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BMS&lt;/strong&gt; - Is the store safe, and what is its exact state right now?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EMS&lt;/strong&gt; - Given prices, demand and forecasts, when should we charge, discharge or sell?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We have built the EMS side too. For Skyfri, another energy client, we delivered an Energy Management System that cuts energy costs through trading and peak shaving. If you want the short version of how these acronyms relate, we recorded a plain-language explainer of &lt;a href="https://ordergroup.co/resources/video/vpp-ems-bms/" rel="noopener noreferrer"&gt;VPP, EMS and BMS&lt;/a&gt; that untangles all three in a few minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Battery Management Systems Fit in Industrial IoT
&lt;/h2&gt;

&lt;p&gt;A BMS rarely works alone. It is one embedded subsystem inside a larger industrial IoT platform.&lt;/p&gt;

&lt;p&gt;In the project above, the battery management system was part of a wider system that also carried a digital twin of the plant, weather and energy-price data, and a control interface for operators. That is the shape of most heavy-industry work: sensors and controllers at the edge, a dependable data pipeline in the middle, and software on top that turns raw readings into decisions.&lt;/p&gt;

&lt;p&gt;Designing that full chain - the embedded control, the SCADA integration, and the analytics above it - is what we do in our &lt;a href="https://ordergroup.co/iot-software-development/" rel="noopener noreferrer"&gt;IoT and device software&lt;/a&gt; practice and our &lt;a href="https://ordergroup.co/energy-hub/" rel="noopener noreferrer"&gt;energy platform&lt;/a&gt; practice. A BMS is usually the point where the two meet.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Other BMS: Building Management Systems
&lt;/h2&gt;

&lt;p&gt;If you arrived here from the facility side, a Building Management System is the software that runs a building's HVAC, lighting, metering and access from one console.&lt;/p&gt;

&lt;p&gt;It shares the BMS name and the same broad idea, one control layer over many devices, but it is a separate field with its own vendors and standards. We do not build facility BMS software, and we would rather say so than pretend. Our work sits on the energy and battery side described above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Questions About BMS
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What does BMS mean in engineering?
&lt;/h3&gt;

&lt;p&gt;In engineering, BMS almost always means Battery Management System: the electronics and software that monitor and protect a battery or energy store. Context tells you whether someone means that sense or the building-automation one.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is BMS the same as EMS?
&lt;/h3&gt;

&lt;p&gt;No. A BMS keeps the energy store safe and reports its state, while an EMS decides when to charge, discharge or trade that energy. They work together but solve different problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  What does BMS mean in a building?
&lt;/h3&gt;

&lt;p&gt;In a building, BMS means Building Management System: the central controller for heating, ventilation, air conditioning, lighting and access. Beyond the shared acronym, it has nothing to do with batteries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who builds custom BMS software?
&lt;/h3&gt;

&lt;p&gt;Software teams with real energy and industrial IoT experience build custom BMS software. We have delivered a SCADA-integrated BMS for a large-scale thermal energy store and an EMS for an energy trading client, and we are glad to talk through your case.&lt;/p&gt;

&lt;p&gt;Working on energy storage, a solar or grid project, or an industrial control system that needs a dependable BMS? &lt;a href="https://ordergroup.co/energy-hub/" rel="noopener noreferrer"&gt;Talk to our energy team&lt;/a&gt; about a free technical consultation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://ordergroup.co/resources/article-business-and-technical/what-does-bms-mean/" rel="noopener noreferrer"&gt;ordergroup.co&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>technical</category>
      <category>energy</category>
      <category>iot</category>
    </item>
  </channel>
</rss>
