<?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: Lohith Lalesh</title>
    <description>The latest articles on DEV Community by Lohith Lalesh (@lohith_lalesh_76ef3d876b3).</description>
    <link>https://dev.to/lohith_lalesh_76ef3d876b3</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%2Fuser%2Fprofile_image%2F4232664%2F920ed35b-5960-48c6-b03f-0478e45bddd7.png</url>
      <title>DEV Community: Lohith Lalesh</title>
      <link>https://dev.to/lohith_lalesh_76ef3d876b3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lohith_lalesh_76ef3d876b3"/>
    <language>en</language>
    <item>
      <title>Building a warehouse training scenario: when is it a digital twin?</title>
      <dc:creator>Lohith Lalesh</dc:creator>
      <pubDate>Sat, 07 Nov 2026 19:01:49 +0000</pubDate>
      <link>https://dev.to/lohith_lalesh_76ef3d876b3/building-a-warehouse-training-scenario-when-is-it-a-digital-twin-4ppg</link>
      <guid>https://dev.to/lohith_lalesh_76ef3d876b3/building-a-warehouse-training-scenario-when-is-it-a-digital-twin-4ppg</guid>
      <description>&lt;p&gt;A detailed 3D warehouse is not automatically a digital twin. For training, the first useful version may be a simulation with accurate routes, equipment clearances, task order and hazards. It becomes a digital twin when the training model is connected to a defined real-world facility, kept current from trusted data, and used to inspect or rehearse changes in that facility.&lt;/p&gt;

&lt;p&gt;That distinction affects cost and design. A safety lesson may not need live sensor feeds. A facility planner testing a new picking route may need a current layout, equipment positions and movement data. Decide what decision the model must support before asking for full fidelity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with one teachable decision
&lt;/h2&gt;

&lt;p&gt;Suppose new warehouse staff must respond to a blocked forklift route. The learner should identify the obstruction, stop at the correct point, choose a safe alternate route, alert the right person and document the exception. That is a better brief than “make an immersive warehouse.” Write the expected action and the unsafe alternatives first. Then determine what the learner must see, hear and interact with.&lt;/p&gt;

&lt;p&gt;Map the real process with warehouse supervisors and HSE staff. Capture the route, pedestrian crossings, visibility limits, signage, equipment speed assumptions and escalation rules. Use photographs, floor plans or BIM where available, but verify dimensions and current operating practice on site. A visually impressive scene with the wrong stopping distance teaches the wrong behaviour.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the smallest interactive model
&lt;/h2&gt;

&lt;p&gt;Represent the environment as reusable zones, racks, vehicles, people and hazard states. In a VR implementation, interactors and interactables can handle selecting an object, using controls and moving through the scene; Unity's XR Interaction Toolkit provides those primitives. Keep the scenario logic separate from the visual model so trainers can change a route or hazard without rebuilding the entire experience.&lt;/p&gt;

&lt;p&gt;A basic scenario needs: a trigger, observable cues, choices, consequences, feedback and a reset. Record which cue was noticed, what action was chosen, the response time, and whether the learner followed the correct escalation path. Keep assessment criteria visible to instructors and give trainees a chance to practise again. Do not equate headset time with competence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add a live data connection only for a reason
&lt;/h2&gt;

&lt;p&gt;A digital-twin layer may pull approved layout revisions, asset status or simulated operational data from a warehouse system. Identify the authoritative source and refresh interval for each feed. Label data as live, delayed, synthetic or manually maintained. A stale route rendered as current is more dangerous than a plainly labelled training scenario.&lt;/p&gt;

&lt;p&gt;A sensible first pilot compares one training module with the current method. Look for missed hazards, wrong route choices, instructor corrections, time to complete the task and trainee feedback. Do not claim injury reduction from a short pilot; that would require a much stronger evaluation.&lt;/p&gt;

&lt;p&gt;I work at OneBonsAI Gulf. For teams deciding between a simulation and a connected facility model, our &lt;a href="https://obgulf.com/services/digital-twins-simulation" rel="noopener noreferrer"&gt;digital twins and simulation service&lt;/a&gt; explains the scope.&lt;/p&gt;

&lt;p&gt;Further reading: &lt;a href="https://docs.unity3d.com/6000.0/Documentation/Manual/com.unity.xr.interaction.toolkit.html" rel="noopener noreferrer"&gt;Unity XR Interaction Toolkit&lt;/a&gt; and &lt;a href="https://docs.aws.amazon.com/iot-twinmaker/latest/guide/what-is-twinmaker.html" rel="noopener noreferrer"&gt;AWS IoT TwinMaker overview&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>vr</category>
      <category>unity3d</category>
      <category>digitaltwin</category>
    </item>
    <item>
      <title>Syncing CRM and ERP data through one API layer</title>
      <dc:creator>Lohith Lalesh</dc:creator>
      <pubDate>Sat, 07 Nov 2026 18:53:57 +0000</pubDate>
      <link>https://dev.to/lohith_lalesh_76ef3d876b3/syncing-crm-and-erp-data-through-one-api-layer-5acb</link>
      <guid>https://dev.to/lohith_lalesh_76ef3d876b3/syncing-crm-and-erp-data-through-one-api-layer-5acb</guid>
      <description>&lt;p&gt;A CRM and an ERP rarely mean the same thing by “customer.” The CRM may own the relationship and sales pipeline; the ERP may own billing identity, tax details, credit limits and invoices. A single API layer helps when it makes those ownership rules explicit. A gateway alone does not solve inconsistent data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decide which system owns each field
&lt;/h2&gt;

&lt;p&gt;Write a field map before writing code. For every identifier, name, address, tax number, payment term and status, record the owner, allowed editors, validation rule and conflict rule. Give each customer a stable cross-system ID. Do not assume that matching on company name or email will remain reliable after a rename, merger or duplicate import.&lt;/p&gt;

&lt;p&gt;Example: a salesperson changes the trading name in the CRM. The integration can update the ERP display name, but it should not silently overwrite a verified legal name or tax registration. That difference belongs in the contract of the API, not in an exception buried in a script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a narrow domain API
&lt;/h2&gt;

&lt;p&gt;Expose operations such as &lt;code&gt;createCustomerDraft&lt;/code&gt;, &lt;code&gt;approveBillingIdentity&lt;/code&gt;, &lt;code&gt;syncContact&lt;/code&gt; and &lt;code&gt;getInvoiceStatus&lt;/code&gt;. Avoid exposing every ERP table and every CRM object through a generic proxy. The API layer should translate each system's payload into a stable domain model, validate it, apply authorisation, and record the outcome. Keep adapters for the CRM and ERP behind that contract so either vendor can change without forcing every caller to change.&lt;/p&gt;

&lt;p&gt;For writes, choose whether the call is synchronous or queued. A queued integration can return a tracking ID while the ERP processes the change. The caller can then check &lt;code&gt;pending&lt;/code&gt;, &lt;code&gt;applied&lt;/code&gt; or &lt;code&gt;failed&lt;/code&gt; rather than assuming a successful HTTP response means the ERP record exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design for retries and conflicts
&lt;/h2&gt;

&lt;p&gt;Networks fail. Webhooks can arrive twice or out of order. Give every business event an immutable ID and every write an idempotency key. Store the last accepted version from each system. If the same event arrives again, return the prior result; if an older version arrives, reject or quarantine it. Do not use “last write wins” for credit limits, bank details or legal identity.&lt;/p&gt;

&lt;p&gt;Keep a dead-letter queue with a named owner. Log the source record ID, destination record ID, operation, timestamp, validation errors and retry count, while limiting sensitive data in logs. Build a reconciliation report that compares important fields across both systems daily. Monitoring only API uptime will miss semantic failures such as a customer mapped to the wrong account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roll out one object at a time
&lt;/h2&gt;

&lt;p&gt;Start with one direction and one object, such as approved CRM opportunities becoming ERP sales-order drafts. Test duplicates, updates, deletions, missing tax data, permission failures and ERP downtime using synthetic records. Then add the reverse flow for invoice status. Measure successful sync rate, exception age, manual corrections and time saved. These are more useful than a diagram showing two connected logos.&lt;/p&gt;

&lt;p&gt;Microsoft's API design guidance recommends domain-oriented contracts and explicit idempotency for side-effecting operations. Those principles apply whether the integration runs on Azure, another cloud or a private network.&lt;/p&gt;

&lt;p&gt;I work at OneBonsAI Gulf. Our &lt;a href="https://obgulf.com/services/system-integration" rel="noopener noreferrer"&gt;system integration service&lt;/a&gt; covers scoping the ownership, APIs and operational controls around existing business systems.&lt;/p&gt;

&lt;p&gt;Further reading: &lt;a href="https://learn.microsoft.com/en-us/azure/architecture/microservices/design/api-design" rel="noopener noreferrer"&gt;Microsoft Azure Architecture Center: API design&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>api</category>
      <category>architecture</category>
      <category>backend</category>
    </item>
    <item>
      <title>A human approval step for an LLM agent: the boundary that matters</title>
      <dc:creator>Lohith Lalesh</dc:creator>
      <pubDate>Sat, 07 Nov 2026 18:52:37 +0000</pubDate>
      <link>https://dev.to/lohith_lalesh_76ef3d876b3/a-human-approval-step-for-an-llm-agent-the-boundary-that-matters-3jc2</link>
      <guid>https://dev.to/lohith_lalesh_76ef3d876b3/a-human-approval-step-for-an-llm-agent-the-boundary-that-matters-3jc2</guid>
      <description>&lt;p&gt;An agent can prepare a change without being allowed to make it. That distinction is the simplest way to get useful automation into an enterprise workflow while keeping a person accountable for consequential actions.&lt;/p&gt;

&lt;p&gt;Consider a supplier onboarding assistant. It reads a request, checks whether mandatory fields are present, compares the supplier against an approved registry, and prepares an ERP record. It must not create the supplier or release a payment on its own. The approval step belongs between &lt;em&gt;prepare&lt;/em&gt; and &lt;em&gt;execute&lt;/em&gt;, not as a polite question the model asks after it has already called the write API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Split the workflow into explicit states
&lt;/h2&gt;

&lt;p&gt;A practical state machine is &lt;code&gt;received → validated → proposed → awaiting_review → approved/rejected → executed → reconciled&lt;/code&gt;. Persist the proposal and its source references before asking for approval. An approver should see the original request, the exact fields to be written, the evidence used, uncertainty, and any policy warnings. The approval decision should refer to a versioned proposal ID, so an edited proposal cannot inherit an earlier approval.&lt;/p&gt;

&lt;p&gt;The write operation should be a separate service endpoint. Give the agent read access and permission to create a proposal, while the execution service accepts only a valid approval token from the workflow system. A prompt such as “always ask before writing” is helpful guidance, but it is not an access control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make approval specific
&lt;/h2&gt;

&lt;p&gt;“Looks good” is too vague. Ask the reviewer to approve the exact action: create supplier &lt;code&gt;S-1042&lt;/code&gt; with the displayed bank and tax details, or send the displayed reply to a named recipient. Show a diff against the current record. Let the reviewer edit, reject or escalate. For financial, identity, personal-data or regulated decisions, the appropriate reviewer and evidence may differ; encode those rules outside the model.&lt;/p&gt;

&lt;p&gt;A minimal approval record contains the proposal ID and version, actor identity, action type, target system, payload hash, reviewer identity, decision, timestamp, reason, and execution result. Set an expiry and do not reuse the approval for a later attempt with a changed payload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle failures after the click
&lt;/h2&gt;

&lt;p&gt;Approval is not proof that the write succeeded. The executor needs an idempotency key so a retry does not create two suppliers. Record the target system's response and reconcile it with the intended change. If execution fails, leave the item in an exception queue rather than asking the model to invent a recovery path. Test the rejected, expired, modified, duplicate and unavailable-system paths before a pilot.&lt;/p&gt;

&lt;p&gt;Microsoft's Agent Framework documentation describes a related pattern: an approval-required tool pauses the workflow and emits a request that an external reviewer can approve or reject. The exact SDK is optional; the durable pause and the separate authorisation boundary are the important parts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start small:&lt;/strong&gt; choose one low-volume workflow, one write action and one reviewer group. Measure time from proposal to decision, reviewer corrections, false positives, and failed executions. Those measures tell you whether the agent reduced work or merely moved it to the approval queue.&lt;/p&gt;

&lt;p&gt;I work at OneBonsAI Gulf. For teams planning a bounded agent with human oversight, see our &lt;a href="https://obgulf.com/services/agentic-ai-implementation" rel="noopener noreferrer"&gt;agentic AI implementation service&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Further reading: &lt;a href="https://learn.microsoft.com/en-us/agent-framework/workflows/human-in-the-loop" rel="noopener noreferrer"&gt;Microsoft Agent Framework human-in-the-loop workflows&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>security</category>
    </item>
  </channel>
</rss>
