<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AMCORP Engineering Notes]]></title><description><![CDATA[Field notes on construction technology from Pakistan. Satellite connectivity, ERP across remote sites, BIM, and engineering software in hard conditions.]]></description><link>https://amcorp-engineering.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>AMCORP Engineering Notes</title><link>https://amcorp-engineering.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 15:05:29 GMT</lastBuildDate><atom:link href="https://amcorp-engineering.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Running Enterprise Software Over Satellite: Lessons From Construction Sites With No Internet]]></title><description><![CDATA[Most software assumes the network is there.
Not always, not perfectly, but there. Latency measured in tens of milliseconds. A dropped connection that comes back in seconds. A CDN somewhere nearby. Whe]]></description><link>https://amcorp-engineering.hashnode.dev/enterprise-software-over-satellite</link><guid isPermaLink="true">https://amcorp-engineering.hashnode.dev/enterprise-software-over-satellite</guid><category><![CDATA[distributed systems]]></category><category><![CDATA[architecture]]></category><category><![CDATA[offline first]]></category><category><![CDATA[Devops]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Muhammad]]></dc:creator><pubDate>Tue, 01 Sep 2026 05:31:31 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a965eac470f2e61b14591eb/63b2a3ba-8528-4a15-80a9-198b420cee71.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Most software assumes the network is there.</p>
<p>Not always, not perfectly, but there. Latency measured in tens of milliseconds. A dropped connection that comes back in seconds. A CDN somewhere nearby. When engineers talk about designing for failure, they usually mean a service going down, not the physical link to the outside world being a dish pointed at a satellite in geostationary orbit.</p>
<p><a href="https://www.amcorp.com.pk/">We build things.</a> Roads, gas plants, grid stations, port terminals. Our <a href="https://www.amcorp.com.pk/portfolio">project portfolio</a> gives a sense of the range, but the relevant part here is where a lot of that work happens. A lot of that work happens in places where there is no fibre, no reliable cellular coverage, and no prospect of either arriving before the project ends. Our sites connect to head office through Ku-band VSAT terminals: a 1.2 metre antenna, a 3-watt block upconverter, an LNB, and an iDirect modem, backhauled through a satellite hub to the enterprise network.</p>
<p>That constraint changes how you think about software. Some of what we learned running engineering and ERP systems on that link maps directly onto problems developers deal with in other contexts.</p>
<h3>Geostationary latency is a floor you cannot optimise below</h3>
<p>A geostationary satellite sits roughly 35,786 km above the equator. A signal goes up and comes back down, which is about 71,500 km of travel. At the speed of light that is around 240 milliseconds one way, so a round trip is close to half a second before any equipment does anything at all.</p>
<p>You cannot cache your way out of that. You cannot buy a better modem to fix it. It is physics.</p>
<p>What that means in practice is that anything chatty over the wire falls apart. A protocol that needs six round trips to complete a handshake now takes three seconds. An ERP screen that fires a dozen sequential requests to render feels broken even when nothing is wrong. Database connections that assume sub-100ms response times start timing out under default configuration.</p>
<p>The engineering response is the same one you would apply to any high-latency environment: reduce round trips, batch aggressively, and move validation to the client. But most enterprise software is not written with that in mind, and you often cannot change it. So the work becomes configuration and architecture around the application rather than inside it.</p>
<h3>Bandwidth is shared, finite, and does not care about your priorities</h3>
<p>Terrestrial connections degrade gracefully under load. Satellite links do not, in the same way. Bandwidth is allocated, contended, and expensive per megabyte in a way most developers have not thought about since mobile data caps were a real concern.</p>
<p>A remote site running a hundred people generates a lot of traffic that has nothing to do with the work. Windows updates. Antivirus definitions. Cloud sync clients quietly uploading. Video calls. Left alone, all of that competes with the traffic that actually matters: the ERP transaction, the drawing revision, the daily progress report.</p>
<p>The lesson here is one that applies well beyond satellite: if you do not classify and prioritise traffic explicitly, the least important thing on the network will consume the capacity the most important thing needs. Quality of service rules are not optional in this environment. They are the difference between a functioning site and one where nobody can submit a purchase requisition.</p>
<p>There is a design implication for anyone writing software that might run in constrained environments. Make your sync behaviour configurable. Let an administrator schedule it. Do not assume that "sync continuously in the background" is a reasonable default everywhere, because in some places it is actively hostile.</p>
<h3>Weather is a dependency</h3>
<p>Ku-band is susceptible to rain fade. Heavy rainfall attenuates the signal, and the link degrades or drops entirely until the weather passes. In the Thar Desert this is rarely a problem. During monsoon in Sindh it is a scheduled outage you do not get to schedule.</p>
<p>This is worth sitting with for a moment, because it is genuinely unfamiliar to most software engineers. Your uptime is partially a function of atmospheric conditions. No amount of redundancy in your application layer helps, because the physical medium is what fails.</p>
<p>What you do instead is accept it and design for the outage. Which brings us to the thing that actually matters.</p>
<h3>Offline-first is not a feature, it is the only viable architecture</h3>
<p>We implemented ERP across the business in 2014, running inventory management, procurement, and the general ledger with receivables and payables. The hard part was never the modules. It was that a storekeeper at a well site in interior Sindh needs to record a material issue whether or not the satellite link happens to be up at that moment.</p>
<p>If the answer to "what happens when the network is down" is "the user waits," the system will not be used. People will keep paper records and reconcile later, which means your ERP data is now a lagging, incomplete reflection of reality, and every report built on it is wrong in ways nobody can quantify.</p>
<p>So the requirements become:</p>
<p>Local writes must succeed without a server round trip. The transaction is recorded locally and queued.</p>
<p>The queue must survive a reboot, a power cut, and a machine being switched off for the weekend. Durable local storage, not an in-memory buffer.</p>
<p>Reconciliation must handle conflicts deterministically. Two sites issuing from the same stock, a head office adjustment landing while a site was disconnected, a sequence number allocated twice. You need rules for these decided in advance, not resolved by whoever calls support first.</p>
<p>Sync must be resumable. A 40-minute rain fade in the middle of a batch upload should not mean starting over.</p>
<p>None of this is novel. It is the same problem set that mobile applications solved for intermittent connectivity, and that CRDTs and event sourcing address more formally. What is different is the failure duration. A mobile app assumes connectivity returns in seconds or minutes. We plan for hours.</p>
<h3>The engineering software has a different problem entirely</h3>
<p>The ERP side is transactional and reconcilable. The design and analysis tools are not.</p>
<p>We run AutoCAD, STAAD-Pro for structural analysis, PLAXIS 3D and WALLAP for geotechnical work, and Primavera P6 for scheduling, alongside BIM tooling for coordination. These produce large binary files that multiple people need to work on, and they have essentially no concept of distributed collaboration. A .dwg file is a file. Two people editing it in two locations produces two divergent files and a manual merge that a human has to perform by comparing drawings.</p>
<p>Version control as software developers understand it does not exist here. There is no diff for a 3D geotechnical model. There is no merge for a structural analysis file. The industry's answer is process discipline: file locking, a single source of truth, and a naming convention everyone follows because the tooling will not enforce it for them.</p>
<p>Over a satellite link, this gets worse. Transferring a large model file is a scheduled operation, not something you do casually. Which means the coordination question becomes "who has the file today" rather than "who has the file right now."</p>
<p>BIM is meant to solve this, and it does, partially. A shared model with defined workflows is a genuine improvement over emailing drawings. But it assumes bandwidth, and the bandwidth assumption is exactly what does not hold on a remote site.</p>
<p>If you have ever wondered why construction software adoption lags other industries, part of the answer is that a lot of it was designed for an office with an office's network.</p>
<h3>What transfers</h3>
<p>The specific situation is unusual. The lessons are not.</p>
<p>Latency you cannot fix forces you to design around round trips rather than optimise within them. Finite shared bandwidth forces explicit prioritisation, because implicit prioritisation always favours the wrong thing. And an unreliable physical layer forces genuine offline-first design, where local state is authoritative until it can be reconciled rather than treated as a cache of remote truth.</p>
<p>Most software gets to ignore all three because the network is usually fine. That is a reasonable bet in most places. It is not a reasonable bet everywhere, and the systems that hold up in difficult conditions are the ones that treated connectivity as a variable rather than a constant from the beginning.</p>
<p>The site does not care that your architecture assumed a working connection. The concrete pour is happening either way.</p>
]]></content:encoded></item></channel></rss>