<?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: Amazon Developer</title>
    <description>The latest articles on DEV Community by Amazon Developer (amazonappdev).</description>
    <link>https://dev.to/amazonappdev</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%2F6299%2F2db197c7-bac0-4e6f-9fa0-bd658e9c1adb.png</url>
      <title>DEV Community: Amazon Developer</title>
      <link>https://dev.to/amazonappdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/amazonappdev"/>
    <language>en</language>
    <item>
      <title>Release and Operations Excellence</title>
      <dc:creator>Ashutosh Joglekar</dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:59:40 +0000</pubDate>
      <link>https://dev.to/amazonappdev/release-and-operations-excellence-2a6g</link>
      <guid>https://dev.to/amazonappdev/release-and-operations-excellence-2a6g</guid>
      <description>&lt;p&gt;Every engineering team has a release that did not go to plan: the build that looked clean in pre-release testing and broke in production, the feature that passed the test suite and failed for a sample of viewers on one device family, the hotfix that needed its own hotfix. These outcomes show up when release and operations discipline has not kept pace with engineering ambition.&lt;/p&gt;

&lt;p&gt;The earlier pillars in the Blueprint describe what a streaming app does. This one describes how each new version of the app reaches viewers, and how the team responds when something goes wrong once it is there. Release and operations work decides whether the quality investments in the other five pillars are preserved across every update or quietly eroded by the way changes are shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a bad release costs on Fire TV
&lt;/h2&gt;

&lt;p&gt;A regression introduced by an application release affects the customer sitting down to watch something at 8pm, the viewer who paid for a subscription and cannot reach the content they expected, and the one-star review that becomes part of the public record of the app on the Amazon Appstore. These are the moments when viewers most expect the app to simply work.&lt;/p&gt;

&lt;p&gt;Reacting to regressions introduced has an impact on the velocity of development teams, who must spend time investigating and releasing hot fixes to address issues from the previous release.&lt;/p&gt;

&lt;p&gt;For the quality owner, this pillar is the system that protects every other quality investment over time. Good telemetry only matters if someone acts on it during a release. A 200ms startup gain only matters if the next deployment does not give it back. A stability budget held to two decimal places only matters if a single bad rollout cannot break it. The release and operations layer is where those investments either compound or quietly leak.&lt;/p&gt;

&lt;p&gt;A useful first assessment is two questions: when did team last rehearse our rollback procedure end to end, and can team articulate the go/no-go criteria for the current release before deployment begins? If neither has a defined answer, that is the place to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is different about Fire TV
&lt;/h2&gt;

&lt;p&gt;Teams with strong release discipline on mobile sometimes assume the same approach carries over to Fire TV. The shape of the work is the same; the mechanics are not, and the differences expose gaps that were not visible before.&lt;/p&gt;

&lt;p&gt;Update propagation is the most consequential difference. On Fire TV, devices on older platform versions, devices that are powered on intermittently, and devices on slow or congested home networks all update on different cadences. The window in which the active viewer base is split across several app versions is longer than mobile teams typically expect. Treat that version fragmentation as the normal operating state for monitoring, alerting, and rollback procedures, not an edge case.&lt;/p&gt;

&lt;p&gt;Rollback also behaves differently. The Amazon Appstore lets you pause or abandon a staged rollout &lt;a href="https://developer.amazon.com/apps-and-games/blogs/2023/09/guide-to-staged-rollouts" rel="noopener noreferrer"&gt;[2]&lt;/a&gt;, which stops new devices receiving the version, but it does not retroactively revert devices that have already updated. That requires a new submission that supersedes the broken one. The rollback clock starts when the replacement version passes Appstore review, not when the decision to roll back is made. Build incident timelines around that reality, including a realistic estimate for the review window on a streaming-app submission, and confirm that estimate periodically against actual recent submissions rather than assuming it has not changed.&lt;/p&gt;

&lt;p&gt;Newer Fire TV apps built on Vega app platform &lt;a href="https://developer.amazon.com/docs/vega/vega.html" rel="noopener noreferrer"&gt;[1]&lt;/a&gt; add further consideration. A JavaScript bundle change can interact with the runtime, layout engine, or native bridge in ways that pre-release testing on reference devices does not always exercise. Treat platform compatibility as a deliberate gate before each release, not an inheritance from the previous one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The release machinery that holds the other pillars together
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Staged rollouts with explicit gates
&lt;/h3&gt;

&lt;p&gt;Every update should reach viewers gradually, with defined stages, soak times at each stage, and go/no-go criteria written down before deployment begins. A common starting pattern is 1% → 10% → 50% → 100% with a large enough sample of viewers at each stage long enough to at least cover an evening of peak viewing. Criteria need to cover the full set of quality dimensions and agreed SLOs (Service level objective) across the Blueprint. The SLO should include startup latency, frame rate, memory, crash rate, ANR rate, playback success, and in-app purchase success. A regression that quietly degrades startup on the Fire TV Stick Lite, or breaks purchases on a single platform version, will not show up in crash data and will pass the gate unless someone has thought to look for it. Pre-release builds should also go through Amazon's Live App Testing program, so opted-in viewers on real devices exercise the build before the staged rollout begins.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Make sure you have staged rollout as part of release strategy and monitoring mechanisms to review data points during this stage. Also have clear entry and exit criteria for staged rollout.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tested rollback paths
&lt;/h3&gt;

&lt;p&gt;Rehearse the rollback once per major release cycle. The first time the procedure is executed should not be during a live incident. Document the steps, hold access to abandon a rollout or submit a replacement build with more than one named person, retain build artifacts for the last known-good version somewhere reachable, and time the end-to-end mechanics under realistic conditions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Implementing a well defined rollback strategy which is periodically reviewed and kept up to date.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Controlling enabling/disabling of risky features
&lt;/h3&gt;

&lt;p&gt;Treat feature flags and server side control of enabling features as operational safety, not product convenience. Any feature that carries production risk — a new player integration, an authentication change, a purchasing flow change, or a third-party SDK upgrade — should be controllable on server-side without a new app submission. Design a safe-mode configuration in which the app runs only its core functions: browse, authenticate, play, with non-essential features disabled. Safe mode is the option of last resort during an operational crisis, and the act of defining it forces the team to decide what is essential to a viewer's evening.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Implement feature flags and/or server side control of features that have potential of adverse impact to customer experience on rollout.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring across three layers, with alerts and alarms for quick reaction
&lt;/h3&gt;

&lt;p&gt;Effective monitoring on Fire TV covers three layers.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;App health: crash rate, ANR rate, startup failure, segmented by app version and device model.&lt;/li&gt;
&lt;li&gt;Quality of experience: playback startup time, rebuffering frequency, playback errors, purchase success rate.&lt;/li&gt;
&lt;li&gt;Fire TV-specific signals: deep link resolution from voice commands, catalog ingestion status, and platform version distribution across the active base. Mobile-trained teams routinely miss the third layer because mobile has no equivalent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Alerts have to be selective. Fifty alerts a day teach the on-call engineer to ignore the channel, which is the same operational outcome as having no alerts at all. Scope each alert to a condition that, when it fires, unambiguously means a viewer-impacting problem requiring action in the next thirty minutes. Everything else belongs on a dashboard reviewed on a regular cadence. Alert routing must be unambiguous: at any hour, a named individual receives the alert and holds the access and authority to take the first mitigation steps without waiting for approval.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Cohesive monitoring and alarming mechanisms for all features and stability data points.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Practiced incident response
&lt;/h3&gt;

&lt;p&gt;The quality of an incident response is determined almost entirely by decisions made before the incident occurred. Write runbooks for the most likely categories: crash spike after a deployment, playback failure elevation, in-app purchase outage, voice deep-link failure. Keep them where the on-call engineer can reach them without elevated access. Define escalation paths and make sure everyone in the rotation knows them. Customer communication needs an explicit owner, otherwise the brief honest status update viewers are looking for never gets posted because everyone in the room assumes someone else is handling it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Well documented runbooks and mechanisms to respond to incidents and alarms.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Postmortems where the action items get done
&lt;/h3&gt;

&lt;p&gt;A blameless postmortem is the working session that produces the changes needed to prevent or contain a recurrence. The action items are the part that creates operational value; everything else is context for the action items. The common point of failure is not writing the action items; it is completing them. Track open postmortem actions on the same backlog as feature work, with the same attention from quality owner, and treat an action open across two quarters as a quality debt that has matured into a release risk.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Always have a process of retrospectives and Correction of Error document (COR) which focuses on prevention rather than finding blame.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality owner questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Staged rollouts and deployment
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What are our rollout stages, soak times, and go/no-go criteria for the current release, and were they written down before deployment began?&lt;/li&gt;
&lt;li&gt;Can the team name a specific instance where a staged rollout caught a regression before full deployment, and what changed in our process as a result?&lt;/li&gt;
&lt;li&gt;Do third-party SDK updates go through the same staged rollout discipline as our own code, or are any of them fast-tracked?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Rollback and feature control
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;When did the team last rehearse our rollback procedure end to end, meaning executing the steps and timing the result, not just reviewing the document?&lt;/li&gt;
&lt;li&gt;Which features now in production carry meaningful failure risk and lack a remote kill switch?&lt;/li&gt;
&lt;li&gt;Does the team have a defined safe mode? Is the team confident it would work if needed tonight?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monitoring, alerting, and on call
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do our alerts cover all three monitoring layers: app health, quality of experience, and Fire TV-specific signals?&lt;/li&gt;
&lt;li&gt;Is there a named individual on call right now with the access and authority to abandon a rollout, toggle a flag, or escalate without waiting for approval?&lt;/li&gt;
&lt;li&gt;In the last ninety days, what fraction of our alerts were true positives that required action, and what is the plan for the rest?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Incident response and learning
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;For our most significant incident in the last six months, what was the time from beginning to detection, and from detection to mitigation, and how do those compare to our targets?&lt;/li&gt;
&lt;li&gt;How many postmortem action items from the last two quarters are still open, and are any of them about preventing a recurrence that the team have already seen?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Pre-release gates and quality culture
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Are performance signals — startup time, frame rate, memory — part of our automated pre-release gate, or only checked manually?&lt;/li&gt;
&lt;li&gt;In the last year, has a release been delayed because it failed a quality gate? If not, does that reflect the quality of our releases or the strength of our gates?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this pillar makes the others easier
&lt;/h2&gt;

&lt;p&gt;Release and operations work is the mechanism that preserves the investments in the earlier pillars across every update. Insight and telemetry feed the rollout gates. Performance and stability budgets become the criteria those gates evaluate. The streaming experience and accessibility commitments are protected by the rollback and feature-flag layers that stop a regression from reaching every viewer at once. As this layer matures, the other five become easier to hold steady, because the feedback it produces tells the team specifically where the next investment will pay back.&lt;/p&gt;

&lt;p&gt;The question for the quality owner to ask is not whether the app works today, it is whether the app will still work after the next release, and after the one shipped under time pressure three months from now. The answer is determined less by the quality of the code than by the quality of the practices that surround how that code reaches viewers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the series
&lt;/h2&gt;

&lt;p&gt;Release and Operations Excellence is the sixth and final pillar of the Blueprint. This post concludes the series and equips the App development teams and quality owners with guidance on mechanisms for quality apps. These mechanisms ensure that your app is able to deliver high quality customer experience to viewers with every single release.&lt;/p&gt;

</description>
      <category>firetv</category>
      <category>fireos</category>
      <category>vegaos</category>
    </item>
    <item>
      <title>Streaming Experience on Amazon Fire TV</title>
      <dc:creator>Mayur Ahir</dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:57:40 +0000</pubDate>
      <link>https://dev.to/amazonappdev/streaming-experience-on-amazon-fire-tv-4ahn</link>
      <guid>https://dev.to/amazonappdev/streaming-experience-on-amazon-fire-tv-4ahn</guid>
      <description>&lt;p&gt;How your app handles the stream itself decides whether viewers stay. A stall, a slow start, or a broken ad break reads to them as a fault in the app. This pillar covers five things that decide whether the stream feels good on Fire TV. Three are about playback itself: how fast it starts (viewers feel this first), how smoothly it continues (stalls cost more than lower resolution), and how it survives a failed dependency. The other two are how the app carries ads without losing trust, how easily viewers find it, and how clearly your team can see it failing. When one delivery dependency fails, viewers should see at most a brief quality dip rather than a blank screen, and your team should be able to see what went wrong.&lt;/p&gt;

&lt;p&gt;These principles apply across all Fire TV devices, from Fire OS on smart TVs to Vega OS on the newest streaming media players (SMPs).&lt;/p&gt;

&lt;p&gt;Use it to check your own app against the Blueprint. Each section closes with a short summary of what good looks like, and the questions near the end let you score your app against that quality bar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Startup latency: how fast your app starts
&lt;/h2&gt;

&lt;p&gt;Playback should start quickly enough that viewers never think about it. In a widely-cited 2012 measurement study, each additional second of startup delay beyond the first two seconds increased viewer abandonment by 5.8% [1]. Startup time is the metric viewers feel first, and the one that correlates most strongly with abandonment.&lt;/p&gt;

&lt;p&gt;Treat the startup path as a time budget, and own video startup as a cross-team metric rather than a side effect of feature work. For app launch, Amazon’s Fire TV requirements set time to first frame (TTFF) under 2 seconds on a cold start, and enforce it. Treat the published figure as the live bar to measure against, since the target tightens as hardware evolves [2].&lt;/p&gt;

&lt;p&gt;Digital rights management (DRM) licence acquisition is one of the largest hidden costs here, and it can add noticeable latency to every stream start. Pre-fetch licences before the viewer presses play, where licence policy and concurrency rules permit, to move that cost off the critical path. The same discipline applies to manifest caching at the content delivery network (CDN) edge. Anything that does not have to happen before the first frame should not block it.&lt;/p&gt;

&lt;p&gt;On Fire TV, supporting more than one DRM system compounds this. Widevine has the broadest device coverage on Fire TV. PlayReady is required by some content owners, particularly for premium UHD where studio terms mandate hardware DRM. Each path your app implements needs its own testing and sign-off across Fire TV SMPs and Fire TV smart TVs. Secure decode on lower-tier hardware also consumes CPU that would otherwise serve user-interface (UI) rendering and adaptive-bitrate (ABR) logic. Startup discipline therefore pays back throughout the session, not only at the start.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Startup time carries a published budget per device family.&lt;/li&gt;
&lt;li&gt;DRM licences and manifests are pre-fetched off the critical path.&lt;/li&gt;
&lt;li&gt;Startup is tracked as a first-class metric, not squeezed in after feature work.&lt;/li&gt;
&lt;li&gt;TTFF is tracked against the published Fire TV requirement [2] and your own trend in the App Health Insights dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;→ Device-side app launch optimisation is covered in the Performance and Efficiency pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Playback continuity: how smoothly it keeps going
&lt;/h2&gt;

&lt;p&gt;Once playback begins, continuity matters more than peak quality. Viewers forgive lower resolution more readily than they forgive stalls. Analysis of 370 million video plays on a major US network put the cost of a single rebuffering event at around $85,500 in lost revenue [3]. Across hundreds of millions of plays, those losses compound.&lt;/p&gt;

&lt;p&gt;Interruption frequency also matters, not just total stall time. Three one-second stalls feel worse than a single three-second stall, because each fresh stall resets the viewer’s sense of continuous playback. That should shape how you tune your ABR algorithm: favour stable quality over aggressive upscaling. A viewer who stays at 720p (HD) has a better experience than one who bounces between 1080p (FHD) and 480p (SD) chasing bandwidth.&lt;/p&gt;

&lt;p&gt;Codec choice affects both bandwidth and quality. AV1 is the royalty-free codec from the Alliance for Open Media, the open alternative to High Efficiency Video Coding (HEVC, also known as H.265). In Netflix’s production deployment, AV1 uses about one-third less bandwidth than both H.264 and HEVC at equivalent quality [4]. AV1 cuts bandwidth but demands more decode capability than HEVC, so it pays off where hardware AV1 decode exists and can hurt on lower-tier devices. That is exactly why the fallback ladder matters: the codec choice should follow the device, not override it.&lt;/p&gt;

&lt;p&gt;Cross-device continuity sits one level above this. A viewer who pauses on a phone and resumes on Fire TV at the same timestamp, with the same audio and subtitle track, experiences a single session. Get this wrong and they experience two disconnected apps. Build it as infrastructure, with centralised session state and low-latency global replication, not as a per-device feature toggle.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ABR favours a consistent picture over peak resolution.&lt;/li&gt;
&lt;li&gt;Rebuffering ratio is tracked and trending down against your own baseline and the App Health Insights dashboard.&lt;/li&gt;
&lt;li&gt;AV1 ships with an HEVC and H.264 fallback ladder.&lt;/li&gt;
&lt;li&gt;Resume-across-devices reads from shared session state.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;→ Sustained playback stability (memory leaks, decoder crashes, application not responding (ANR) events) is covered in the Stability and Resilience pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivery resilience: how it survives a failed dependency
&lt;/h2&gt;

&lt;p&gt;Delivery dependencies fail in production. The goal is an architecture where those failures rarely reach the viewer. In November 2025, a major CDN provider’s outage disrupted core traffic for nearly six hours [5]. The trigger was not an external attack but an internal database permissions change, a reminder that even your largest delivery dependencies fail in ways you cannot prevent.&lt;/p&gt;

&lt;p&gt;Resilience starts with not depending on one CDN. A traffic-steering layer scores the CDNs and hands the player an ordered list of delivery sources. Both major formats, MPEG Dynamic Adaptive Streaming over HTTP (MPEG-DASH) and HTTP Live Streaming (HLS), carry several sources in the manifest, so the player fails over without stopping playback. That protects against a whole-CDN outage, the failure mode the November 2025 incident illustrates.&lt;/p&gt;

&lt;p&gt;A separate failure domain is the origin behind a given CDN. For a CloudFront distribution, CloudFront Origin Groups add automatic failover from a primary to a secondary origin. Origin Shield, a CloudFront-internal regional cache layer, can reduce origin load for that CDN’s traffic but does not span independently operated CDNs.&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%2Fctrl25hlxu1q409uxv4g.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%2Fctrl25hlxu1q409uxv4g.png" alt="Topology based on the AWS CloudFront multi-CDN reference architecture" width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Image 1: Topology based on the AWS CloudFront multi-CDN reference architecture [6].&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;With a traffic-steering layer for CDN-plane resilience and origin-group failover behind each CDN, an outage at any single dependency stays recoverable. The viewer sees at most a brief quality dip.&lt;/p&gt;

&lt;p&gt;AWS reported a multi-CDN deployment achieving around a 26% reduction in origin load after enabling Origin Shield [6]. Gains vary by traffic pattern. That is a configuration change, not a re-architecture.&lt;/p&gt;

&lt;p&gt;Build redundancy and test failover deliberately, rather than discovering the gaps during a live incident.&lt;/p&gt;

&lt;p&gt;Live content raises the stakes, because a delivery failure during a live event cannot be recovered later. Low-Latency HLS (LL-HLS) brings end-to-end latency into the 2-to-8-second range on devices with capable players, against the 24 to 30 seconds typical of traditional HLS [7]. Reaching the low end requires chunked CMAF delivery and CDN support along the whole path, not only a capable player. That gap matters for sports, news, and any content where a social-media spoiler arrives before the play does. Free ad-supported streaming TV (FAST) channels depend on this same resilient, low-latency delivery. Live delivery needs the same failover paths tested ahead of the event.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every delivery dependency has a tested failover path.&lt;/li&gt;
&lt;li&gt;Multi-CDN and origin failover are exercised before incidents force them.&lt;/li&gt;
&lt;li&gt;A single dependency outage degrades gracefully rather than going to black.&lt;/li&gt;
&lt;li&gt;Failover drill dates and measured viewer impact are tracked, so the answer is not “we have not tested recently”.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;→ Safe deployment of CDN configuration changes ties directly to the Release and Operations Excellence pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ad experience and monetisation: how it carries ads without losing trust
&lt;/h2&gt;

&lt;p&gt;Ads should monetise the stream without damaging trust in it. A 2024 consumer survey found that roughly 37% of US consumers have cancelled a subscription because of the ad experience [8]. The complaint was about delivery, not the presence of ads.&lt;/p&gt;

&lt;p&gt;Poor ad delivery does measurable commercial harm. Clumsy delivery, long or mistimed breaks, and ad-related latency all reduce viewers’ perception of the programme, the ads, and the advertised brands. Effects vary by genre and break placement, but the direction holds: poor delivery erodes the commercial value of the ad itself.&lt;/p&gt;

&lt;p&gt;With server-side ad insertion (SSAI), ads are stitched at the origin, which avoids the client-side handoff that causes the buffering, frame drops, and visible stalls common with client-side insertion. Managed services such as AWS Elemental MediaTailor, or an equivalent from your own provider, offer both SSAI and a server-guided ad insertion (SGAI) mode [9]. SGAI keeps the manifest server-guided but lets the client fetch and render ads, improving personalisation and tracking fidelity at the cost of reintroducing a client handoff. When an ad fails to deliver, a clean fallback keeps the break timing natural rather than dropping the viewer to a black screen. Own that fallback behaviour as a team.&lt;/p&gt;

&lt;p&gt;On Fire TV, Amazon Publisher Services (APS) connects ad-enabled apps to unified demand through the Transparent Ad Marketplace (TAM) [10]. Designing for APS and TAM from the outset, rather than retrofitting them later, avoids costly rework.&lt;/p&gt;

&lt;p&gt;Loud ads against quiet content are one of the oldest trust complaints in television, and regulators are now closing it for streaming. In the US, the Advanced Television Systems Committee standard (ATSC A/85) governs broadcast loudness. California’s Senate Bill 576 (SB 576) extends those rules to streaming services from 1 July 2026 [11]. Confirm scope and timing with your own legal team. Europe’s equivalent is the European Broadcasting Union recommendation (EBU R128). Normalising ad loudness to content is becoming a compliance requirement, not just a courtesy.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ads run server-side with a tested fallback chain.&lt;/li&gt;
&lt;li&gt;Breaks start without black screens or stalls.&lt;/li&gt;
&lt;li&gt;Loudness is normalised to ATSC A/85 or EBU R128.&lt;/li&gt;
&lt;li&gt;The app is built for APS and TAM from day one.&lt;/li&gt;
&lt;li&gt;Maximum black-screen time on ad failure and ad fill rate are tracked against your own trend in the App Health Insights dashboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Observability and discoverability: how viewers find it and how you watch it
&lt;/h2&gt;

&lt;p&gt;Two kinds of signal matter here: whether viewers can find your content, and whether you can see what is happening when they try to watch it. Get the first wrong and your streams are never attempted. Get the second wrong and you cannot tell which streams are failing.&lt;/p&gt;

&lt;p&gt;Discoverability starts with the health of your video-on-demand (VOD) and linear catalog metadata. Stale metadata makes good streams irrelevant: voice commands stop resolving and your content becomes invisible no matter how well it plays [12]. Treat catalog freshness as a launch-critical metric your team owns, not a submission chore. The failure mode is silent: a feed can pass ingestion yet still drop titles from search, so monitoring the outcome matters as much as monitoring for errors. One partner’s catalog upload returned no errors, yet their flagship series vanished from Fire TV search and Alexa voice results. Investigation showed the availability window had been set with an end date already in the past, leaving the title with no valid offer. From the system’s perspective the feed was clean, but the content had nothing to surface.&lt;/p&gt;

&lt;p&gt;Observability is about connecting these streaming signals to a single session. The Insight and Telemetry pillar covers the telemetry model and session tracing in full. What matters here is that the streaming-specific signals (startup, rebuffering, CDN failover, ad continuity, catalog ingestion) resolve to the same session trace. A streaming failure should point at a cause, not just a symptom.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Catalog data is submitted ahead of launches and monitored for ingestion errors.&lt;/li&gt;
&lt;li&gt;Catalog resolvability and ingestion error rate are tracked against your own trend in the App Health Insights dashboard.&lt;/li&gt;
&lt;li&gt;Streaming signals resolve to a single session trace, so a failure points at a cause.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;→ This guardrail ties directly to the Insight and Telemetry pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality owner questions
&lt;/h2&gt;

&lt;p&gt;These six questions give your team a structured way to assess streaming-experience maturity. They map to the guardrails above and their closing lines, with the final guardrail covering both discoverability and observability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What are our startup times by device family, and are they within the published Fire TV TTFF requirement [2], tracked in the App Health Insights dashboard?&lt;/li&gt;
&lt;li&gt;How often do viewers hit rebuffering, where is it concentrated, and what is the trend by device family, tracked as rebuffering ratio in the App Health Insights dashboard?&lt;/li&gt;
&lt;li&gt;When did we last run a live failover drill, and what was the measured viewer impact?&lt;/li&gt;
&lt;li&gt;What is the maximum black-screen time a viewer sees when an ad fails, and what does the trend look like?&lt;/li&gt;
&lt;li&gt;What share of our catalog is resolvable by Fire TV voice search, and what is our ingestion error rate, tracked against our own catalog submissions?&lt;/li&gt;
&lt;li&gt;When a stream fails, how quickly can we get from symptom to cause, and which of our streaming signals are missing from the trace?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you can answer all six with data, your streaming experience is being managed deliberately rather than left to chance.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Streaming experience is a set of metrics that move together. If you instrument one thing this quarter, make it video startup time by device family: it correlates most strongly with abandonment, and your viewers feel it first. Rebuffering ratio, CDN failover behaviour, ad-break continuity, and catalog ingestion errors all belong on the same dashboard: the viewer does not distinguish between them. Benchmark against the best streaming experiences your subscribers already use, not the industry mean. On Fire TV the tools to hit that bar are concrete. They include the published time to first frame requirement to measure against [2], unified ad demand through APS and TAM [10], and voice-search discovery through Alexa [12]. The teams that build to them keep the viewers they already share with their competitors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;→ The next pillar is the Release and Operations Excellence pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[1] Krishnan &amp;amp; Sitaraman. “Video Stream Quality Impacts Viewer Behavior.” ACM IMC, 2012. &lt;a href="https://people.cs.umass.edu/%7Eramesh/Site/PUBLICATIONS%5C_files/imc208-krishnan.pdf" rel="noopener noreferrer"&gt;https://people.cs.umass.edu/~ramesh/Site/PUBLICATIONS\_files/imc208-krishnan.pdf&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[2] Amazon Developer Documentation. “App Performance Scripts for Fire TV” (time-to-first-frame, cold start under 2 seconds). &lt;a href="https://developer.amazon.com/docs/app-testing/app-performance-scripts.html" rel="noopener noreferrer"&gt;https://developer.amazon.com/docs/app-testing/app-performance-scripts.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[3] Akamai / TVBEurope. “Buffering costs streamers ~$85,500 per rebuffer event.” 2019. &lt;a href="https://www.tvbeurope.com/tvbeverywhere/buffering-costs-streamers-85k-in-lost-revenue" rel="noopener noreferrer"&gt;https://www.tvbeurope.com/tvbeverywhere/buffering-costs-streamers-85k-in-lost-revenue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[4] Netflix Technology Blog. “AV1: Now Powering 30% of Netflix Streaming.” 2025. &lt;a href="https://netflixtechblog.com/av1-now-powering-30-of-netflix-streaming-02f592242d80" rel="noopener noreferrer"&gt;https://netflixtechblog.com/av1-now-powering-30-of-netflix-streaming-02f592242d80&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[5] Cloudflare. “Cloudflare outage on November 18, 2025.” &lt;a href="https://blog.cloudflare.com/18-november-2025-outage/" rel="noopener noreferrer"&gt;https://blog.cloudflare.com/18-november-2025-outage/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[6] AWS CloudFront Blog. “Using CloudFront Origin Shield in a multi-CDN deployment.” 2021. &lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/using-cloudfront-origin-shield-to-protect-your-origin-in-a-multi-cdn-deployment/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/networking-and-content-delivery/using-cloudfront-origin-shield-to-protect-your-origin-in-a-multi-cdn-deployment/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[7] Cloudinary. “Low-Latency HLS, CMAF, and WebRTC: Which Is Best?” 2026. &lt;a href="https://cloudinary.com/guides/live-streaming-video/low-latency-hls-ll-hls-cmaf-and-webrtc-which-is-best" rel="noopener noreferrer"&gt;https://cloudinary.com/guides/live-streaming-video/low-latency-hls-ll-hls-cmaf-and-webrtc-which-is-best&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[8] Moloco / YouGov. “U.S. Consumers Shift to Streaming and Show Greater Appetite for Personalized Ads.” 2024. &lt;a href="https://www.businesswire.com/news/home/20240626963671/en/" rel="noopener noreferrer"&gt;https://www.businesswire.com/news/home/20240626963671/en/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[9] AWS Elemental MediaTailor. “Server-guided ad insertion (SGAI).” &lt;a href="https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/mediatailor/latest/ug/server-guided.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[10] Amazon Publisher Services. “Amazon Publisher Services (APS) and Transparent Ad Marketplace (TAM).” &lt;a href="https://aps.amazon.com/" rel="noopener noreferrer"&gt;https://aps.amazon.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[11] California Legislature. “SB-576 Video streaming services: commercial advertisements (Chapter 336).” 06-Oct-2025. &lt;a href="https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=202520260SB576" rel="noopener noreferrer"&gt;https://leginfo.legislature.ca.gov/faces/billNavClient.xhtml?bill_id=202520260SB576&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;[12] Amazon Developer Documentation. “Getting Started with Catalog Ingestion.” &lt;a href="https://developer.amazon.com/docs/catalog/getting-started-catalog-ingestion.html" rel="noopener noreferrer"&gt;https://developer.amazon.com/docs/catalog/getting-started-catalog-ingestion.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>firetv</category>
      <category>fireos</category>
      <category>vegaos</category>
    </item>
    <item>
      <title>Living-Room Experience and Accessibility</title>
      <dc:creator>Neha Sharma </dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:56:45 +0000</pubDate>
      <link>https://dev.to/amazonappdev/living-room-experience-and-accessibility-2ldd</link>
      <guid>https://dev.to/amazonappdev/living-room-experience-and-accessibility-2ldd</guid>
      <description>&lt;p&gt;This pillar answers a single question for leaders, does our Fire TV app really work in the living room? From ten feet, with the remote, with Alexa, with VoiceView, with captions, and without assuming perfect vision, hearing, motor control, lighting, or tech savviness?&lt;/p&gt;

&lt;p&gt;A Fire TV app lives in the centre of the living room. Customers are watching from the sofa (ten feet away), on a shared screen, using a remote or Alexa, with limited text input and frequent interruptions. They navigate often in dim lighting and rarely have a keyboard or mouse as a fallback. In that environment, accessibility is not a separate concern. Customers reach content through the remote, through Alexa, and through assistive technologies like VoiceView (Fire TV's built-in screen reader) and captions. If any one of those paths fails, they rarely have a workaround and they leave. That is why accessibility defects on Fire TV are quality defects, on the same severity scale as crashes and performance regressions. Eighty per cent of 18-to-25-year-olds now use captions all or some of the time, whether or not they have hearing difficulties [1]. Accessibility features also serve far more customers than their original audience. Features designed for accessibility become the default experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a living-room-ready app looks like
&lt;/h2&gt;

&lt;p&gt;A good app works the way customers expect in the living room. Text is easy to read from the sofa, navigation feels smooth with the remote, voice commands work with Alexa, the app handles interruptions well, and everything stays usable with accessibility features turned on. The customer has nothing to think about beyond enjoying content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/AmazonAppDev/devices-agent-skills/tree/main/rn-tv-ui-best-practices" rel="noopener noreferrer"&gt;The 10-foot UI&lt;/a&gt;.&lt;/strong&gt;&lt;br&gt;
Fire TV is built for the sofa, not the desk. TV demands visual simplicity. Text and icons need to be readable from across the room, contrast must hold up in both bright and dim rooms, and important content should sit comfortably inside the screen so older displays do not clip it. What works on a phone falls apart at ten feet. Beyond readability, layouts need to scale across TV resolutions without breaking, important elements need to stay within safe areas, and any flow that asks customers to type or read closely, like search, sign-in, or error messages, needs to keep things short and simple. Motion and animation should be purposeful and restrained — excessive transitions, auto-scrolling carousels, and rapid visual movement can disorient viewers, trigger discomfort for those with vestibular sensitivities, and distract from content discovery. Where motion is used, it should respect system-level reduced-motion preferences. The real test is whether the app has been viewed on an actual TV, at living-room distance, and not just on a developer's monitor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt; text, icons, and layouts are readable and complete on a real TV at living-room distance, in both bright and dim conditions, without zooming or squinting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote-first navigation.&lt;/strong&gt; A high-quality Fire TV app should feel native to the platform. Every core journey must be completable using the Fire TV remote alone: launch, browse, search, playback, settings, sign-in, recovery, and exit. Focus (the currently highlighted element) has to be visible, predictable, and recoverable. When a screen loads, it should land on the most useful element. Customers should always know where they are, what will happen next, and how to get back. Back, Home, Select, and playback controls must behave the way Fire TV already expect. No screen should require a pointer, keyboard, or gesture, and no customer should ever get stuck on a screen they cannot escape. Where navigation jumps in surprising ways, teams should define the expected movement explicitly rather than leaving it to default behaviour.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt; every core journey is completable with the remote alone, focus is always visible and recoverable, and no screen leaves the customer stuck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Alexa as a core input.&lt;/strong&gt; On Fire TV, voice is not optional. Customers expect to search, launch, deep link into content, and control playback through Alexa. Voice is also the most reliable path for customers with motor impairments, low vision, or situational limitations like hands full, lights off, or kids asleep. The harder part is what happens when voice interrupts the app? A customer presses the microphone button mid-playback, or an Alexa overlay appears. The app needs to pause, hold its position and focus, let Alexa do its work, and then resume cleanly when the overlay clears. If the app loses playback position, drops focus to the wrong screen, or fails to pause at all, the voice experience breaks even when every individual command "works." Interruption handling is where most voice integrations fall down.&lt;/p&gt;

&lt;p&gt;Beyond the remote and Alexa, the app should be operable with any input device the OS supports: game controllers, Bluetooth keyboards, accessibility switches, and companion apps. Customers do not always use the standard remote, and the app should not assume they do. Core journeys should work regardless of which supported input method the customer chooses.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like&lt;/em&gt;: voice commands work end to end, the app pauses, holds state, and resumes cleanly after every Alexa interruption, and all core journeys remain functional across any input device Fire TV supports. Add &lt;code&gt;onPause/onResume&lt;/code&gt; lifecycle during voice overlays to respect the overlays and user’s journey&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accessibility through VoiceView, captions, and system settings.&lt;/strong&gt; VoiceView support is the baseline, not a stretch goal. If the app does not provide meaningful labels, roles, and states, the screen reader announces "button, button, image, button" and the app becomes opaque. Labels should describe purpose ("Play episode 3"), not just type ("button"). Captions and audio descriptions need to be available, customisable, and respect the preferences customers have already set at the system level. That means text size, caption style, and high contrast [2]. The accessibility settings UI itself has to be navigable by remote and by VoiceView.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt; a VoiceView user can navigate from launch to playback independently, captions and audio descriptions are available and respect system preferences, and the accessibility settings screen is fully operable by remote and screen reader. All elements eg: button has VoiceView supported labels and not just “button”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preserving context through interruptions.&lt;/strong&gt; Beyond Alexa, the living room is a generally interrupted environment. Customers should never lose their place on screen. When content refreshes, when a dialog appears, or when a lazy-loaded row fills in, the highlighted element should stay stable. When a modal closes, the customer should land back where they started, not somewhere unexpected. Initial focus should land somewhere useful, not on a random element. Playback position and context should hold across every interruption a customer is likely to cause.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like:&lt;/em&gt; the customer never loses their place focus, stays stable through content refreshes, modals return to the previous position, and playback context survives every interruption.&lt;/p&gt;

&lt;h2&gt;
  
  
  The cost of retrofitting
&lt;/h2&gt;

&lt;p&gt;Accessibility built in from the start is cheaper than accessibility retrofitted after launch. Teams that treat it as a pre-release gate find the per-feature cost is low. Teams that bolt it on post-launch typically face 3-5x the rework (based on patterns observed across Fire TV partner integrations), because focus management, label hierarchies, and interruption handling touch every screen. The trade-off is not whether to invest, but when.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this pillar drives retention and reach
&lt;/h2&gt;

&lt;p&gt;Every capability described above connects directly to customer retention and business growth.&lt;/p&gt;

&lt;p&gt;Visible focus and predictable navigation reduce misclicks and dead ends, directly improving time to first play. Alexa deep-linking can cut the path from intent to&lt;/p&gt;

&lt;p&gt;playback to a single utterance, getting viewers to content quicker; voice search delivers results 52% faster than remote navigation [3]. Captions keep the app usable when audio is not an option (late at night, noisy rooms, hearing loss) captioned content keeps viewers watching up to 31% longer, expanding the usable hours per household per day [4].&lt;/p&gt;

&lt;p&gt;Features built for accessibility become mainstream differentiators.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Voice navigation started as an assistive tool for motor impairments. It is now a primary input path on Fire TV.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Captions were built for deaf and hard-of-hearing viewers. They are now used in noisy households and late at night.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;High contrast focus states were designed for low-vision customers. They help everyone in a sunlit room. This is the curb-cut effect [5], and it plays out on Fire TV every day.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Accessibility also affects certification and regulatory readiness &lt;em&gt;e.g.:&lt;/em&gt; &lt;a href="https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/european-accessibility-act-eaa_en" rel="noopener noreferrer"&gt;&lt;em&gt;EAA: European Accessibility Act&lt;/em&gt;.&lt;/a&gt;, &lt;a href="https://www.ada.gov/" rel="noopener noreferrer"&gt;ADA: America with disabilities Act&lt;/a&gt;, etc. Requirements vary by market, platform, and service model. Teams should assess obligations early with the right legal and platform stakeholders. But the product point is simpler: if the app does not work with the remote, Alexa, VoiceView, captions, and expected system settings, it is not meeting the Fire TV quality bar.&lt;/p&gt;

&lt;p&gt;[4] Blackwell, A.G. (2017), “The Curb-Cut Effect,” &lt;em&gt;Stanford Social Innovation Review.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality Owner Questions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Native Fire TV experience&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Can customers complete every core journey? launch, browse, search, playback, sign-in, recovery, exit using only the remote?&lt;/li&gt;
&lt;li&gt; Is focus always visible, predictable, and recoverable, with Back, Home, Select, and playback controls behaving the way Fire TV customers expect?&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Alexa and input handling&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Can customers search, launch, deep-link, and control playback by voice where appropriate?&lt;/li&gt;
&lt;li&gt; Does the app preserve playback position, focus, and UI state when Alexa or another overlay interrupts the experience?&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Accessibility&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Can a VoiceView user navigate from launch to playback without assistance?&lt;/li&gt;
&lt;li&gt; Are captions, audio descriptions, and system accessibility settings: caption style, text size, high contrast discoverable, usable, and respected end to end?&lt;/li&gt;
&lt;li&gt; Have we tested with customers, or does it meet standards?&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Design and operating model&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Has the UI been tested on real TVs, at living-room distance, in different lighting?&lt;/li&gt;
&lt;li&gt; Are voice, accessibility, and remote navigation part of the definition of done for every feature, with accessibility defects triaged on the same severity scale as crashes?&lt;/li&gt;
&lt;li&gt; Do we have a Fire TV design system that encodes focus states, safe zones, and contrast or is every team solving it from scratch?&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Getting the living-room experience right means playback starts in the right context. The next question is whether it stays good once it begins.&lt;/p&gt;

&lt;p&gt;-&amp;gt; &lt;em&gt;The next pillar, Streaming Experience, covers what happens once playback begins:&lt;/em&gt; adaptive bitrate behaviour, rebuffering, latency, and quality-of-experience signals that tells teams whether viewers are enjoying what they see&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;[1] BBC News (2021), "Why young people are watching TV with subtitles": citing a survey by Verizon Media/Publicis Media finding 80% of 18-25-year-olds use subtitles.&lt;/p&gt;

&lt;p&gt;[2] “WCAG - (&lt;a href="https://www.w3.org/WAI/standards-guidelines/wcag/" rel="noopener noreferrer"&gt;https://www.w3.org/WAI/standards-guidelines/wcag/&lt;/a&gt; )”&lt;/p&gt;

&lt;p&gt;[3] Edison Research (2026), voice assistant device usage survey — 34% of consumers use voice assistants on TVs; Digiexe (2025), "Voice Search Statistics" — voice search delivers results 52% faster.&lt;/p&gt;

&lt;p&gt;[4] Blackwell, A.G. (2017), “The Curb-Cut Effect,” &lt;em&gt;Stanford Social Innovation Review.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;[5] Verizon Media &amp;amp; Publicis Media (2021), survey of 5,616 US adults — 80% of viewers more likely to finish a video with subtitles; Sonix (2026), "Subtitle Generation Trends" — captioned videos keep viewers watching 31% longer.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>tv</category>
      <category>learning</category>
      <category>vegaos</category>
    </item>
    <item>
      <title>Stability and Resilience</title>
      <dc:creator>Priya Rajan</dc:creator>
      <pubDate>Fri, 24 Jul 2026 14:55:30 +0000</pubDate>
      <link>https://dev.to/amazonappdev/stability-and-resilience-52fj</link>
      <guid>https://dev.to/amazonappdev/stability-and-resilience-52fj</guid>
      <description>&lt;p&gt;Fire TV apps run on devices ranging from 1 GB to 4 GB of RAM, on home networks that drop and recover. The viewing sessions may also get interrupted by sleep mode, Alexa, and system reclaiming memory. When something goes wrong during a viewing session, does the viewer lose the session, or does the app handle it gracefully?&lt;/p&gt;

&lt;p&gt;A crash during the season finale sends the viewer back to the Fire TV home screen. A five-second freeze while navigating makes the app feel broken even if it recovers. A blank screen after a network drop gives the viewer no path forward in the app. How does your app handle each of these scenarios, rather than lose viewer trust?&lt;/p&gt;

&lt;p&gt;This pillar covers crash prevention, graceful error handling, and safe recovery of local state across all Fire TV hardware, from Fire OS on smart TVs to Vega OS on the newest streaming media players.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data says about instability
&lt;/h2&gt;

&lt;p&gt;Research on app retention [&lt;a href="https://clevertap.com/blog/app-uninstalls/" rel="noopener noreferrer"&gt;5&lt;/a&gt;, &lt;a href="https://medium.com/write-a-catalyst/why-50-of-users-uninstall-apps-within-30-days-guide-to-early-engagement-adbb769ff1c6" rel="noopener noreferrer"&gt;6&lt;/a&gt;] shows that app instability drives un-installs faster than missing features, slow performance, or poor design. Viewers who experience a crash are significantly less likely to return, and a second crash in the same session makes abandonment near-certain.&lt;/p&gt;

&lt;p&gt;On the living room screen, the stakes are higher than on mobile. A phone viewer might retry an app that crashed; they are already holding the device, and relaunching takes a tap. A viewer watching on a television has to navigate back through menus, find their content again, and hope the crash does not recur. The friction of recovery on a 10-foot UI means tolerance for instability is lower, and abandonment is faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Fire TV crashes actually come from
&lt;/h2&gt;

&lt;p&gt;The most common crash causes on Fire TV are preventable. They fall into three categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unhandled null references and uncaught exceptions.&lt;/strong&gt; Network timeouts that propagate as unhandled exceptions account for a significant share of foreground crashes. Defensive coding (null checks, try-catch around I/O operations, typed error boundaries) eliminates these at source.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Out-of-memory termination.&lt;/strong&gt; Fire TV devices range from 1 GB to 4 GB of RAM. Apps that consume too much memory are terminated by the system when resources run short on entry-level devices. This is the most common cause of unexpected app closure. Fire TV guidance sets foreground memory limits at 400 MB for 4K video streaming apps and 300 MB for 1080p or lower resolution [&lt;a href="https://developer.amazon.com/docs/app-testing/test-criteria.html" rel="noopener noreferrer"&gt;4&lt;/a&gt;]. Exceeding these limits sharply increases crash probability on entry-level device families, which is often where the largest audience sits.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lifecycle and state mismanagement.&lt;/strong&gt; Apps that do not handle activity recreation, configuration changes, or background-to-foreground transitions cleanly crash when the system reclaims resources, or the viewer returns after the device sleeps.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Teams should design and build to cover these failure modes by design.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Network calls and external data are wrapped in typed error boundaries, memory consumption is profiled per device family during development, and lifecycle transitions (background/foreground, configuration changes, system kill) are tested explicitly during integration testing so that these three issues never reach production as crashes.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Stability as a release gate
&lt;/h2&gt;

&lt;p&gt;Strong teams treat crashes as high-priority events, not items for a future sprint. The stability model for Fire TV works as follows:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Threshold.&lt;/strong&gt; The best streaming apps on Fire TV operate well below the defined crash rate threshold of 2% of weekly active devices, and they treat any regression as a release blocker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Triage cadence.&lt;/strong&gt; Top crashes, ranked by devices impacted rather than raw occurrence count, are reviewed weekly [&lt;a href="https://developer.amazon.com/apps-and-games/blogs/2025/03/achieving-app-quality-through-performance-and-stability" rel="noopener noreferrer"&gt;1&lt;/a&gt;] and fixed before the next release ships. If a release causes a spike, it triggers an immediate rollback or hotfix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rollback capability.&lt;/strong&gt; Fire TV's ecosystem is moving toward automated regression detection at less than 1% of rollout, with rollback capability built into the release pipeline. Teams that cannot revert a bad update within hours are carrying unnecessary risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pragmatic shipping.&lt;/strong&gt; Not every crash warrants stopping the line. A crash affecting 200 devices in a rare locale might coexist with a critical feature launch that serves millions. What separates good teams from great teams is not that great teams fix everything before shipping. It is that they ship knowingly, with a tracking ticket, a rollback plan, and a clearly stated decision about what risk they are accepting and for how long.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: The top five crashes are triaged weekly. The team can roll back a bad release within hours or has a fix or&lt;/em&gt; &lt;em&gt;mitigation shipping in the next release.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the main thread responsive
&lt;/h2&gt;

&lt;p&gt;Application Not Responding (ANR) events occur when the app\'s main thread is blocked for more than five seconds. A \"not responding\" dialog appears, and the viewer either waits or force-closes the app.&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%2Fzndkmyuo4s10ptovz61w.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%2Fzndkmyuo4s10ptovz61w.png" alt="ANR dialog on Fire TV" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ANRs are harder to detect than crashes because they do not always terminate the app, but they interrupt a smooth viewing experience. The viewer presses a button and gets no response for five seconds. Then they assume the app is broken, even if it eventually recovers.&lt;/p&gt;

&lt;p&gt;The team should fix an ANR at the architectural level, and not with band-aids. For example, move all I/O and computation off the main thread and enforce strict timeouts on network operations. Also use pre-release checks that catch main-thread blocking before anyone experiences a freeze. Fire TV's &lt;a href="https://developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html" rel="noopener noreferrer"&gt;App Health Insights&lt;/a&gt; dashboard surfaces ANR events with detailed diagnostic information and device counts that can be sorted by impact, so teams can prioritize the fixes that help the most people first.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: ANR rate is below the threshold of 0.47% of daily sessions [&lt;a href="https://developer.android.com/topic/performance/vitals" rel="noopener noreferrer"&gt;3&lt;/a&gt;], the team can identify the top ANR signatures by device family, and pre-release checks catch main-thread blocking before it reaches production.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Handling failures gracefully
&lt;/h2&gt;

&lt;p&gt;Real-world viewing happens on real-world networks. Connections drop mid-stream, services return errors, ad servers time out, devices go to sleep, and the system reclaims memory from background apps. What matters is not whether the app will encounter failures but whether the viewers will notice them.&lt;/p&gt;

&lt;p&gt;When a catalog service goes down during peak hours and hypothetically 400,000 households are using the app, what they see next determines whether they stay, or leave the app. Instead of seeing a blank screen, if the viewers see cached content from the last successful load with a quiet retry happening in the background, the team has bought itself time to fix the problem. That principle (detect, contain, present a path forward) applies across every failure mode. Here is how it plays out in practice:&lt;/p&gt;

&lt;h3&gt;
  
  
  Handling network and service failures
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Failure&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;User Experience&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;What NOT to Do&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Catalog service down&lt;/td&gt;
&lt;td&gt;Show cached content or a clear retry prompt&lt;/td&gt;
&lt;td&gt;Blank screen, spinner with no timeout&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ad fails to load&lt;/td&gt;
&lt;td&gt;Skip the slot or fill with fallback and playback continues&lt;/td&gt;
&lt;td&gt;Pause playback waiting for an ad that will never arrive&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Network drops mid-stream&lt;/td&gt;
&lt;td&gt;Loading indicator + continuous retry; hold the player open&lt;/td&gt;
&lt;td&gt;Close the player, dump user to the home screen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Handling device and system interruptions
&lt;/h3&gt;

&lt;p&gt;When the device sleeps and wakes, respect the viewer's context and resume without requiring re-navigation. The viewer did not choose to leave the app, rather the system made that decision. When the system kills the app in the background, restore the last screen and playback position on relaunch.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementing dependency isolation
&lt;/h3&gt;

&lt;p&gt;A misbehaving analytics SDK, a slow configuration service, or a corrupt stream should not stall the entire app. Run non-critical components asynchronously with strict timeouts. If one module fails, contain it. People should still be able to navigate, browse, and play other content. One failing component should never take down the app.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Every failure mode in this section has a tested recovery path. No single dependency failure can bring down a major user journey, and the app can demonstrate graceful degradation for each scenario.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recovery and state preservation
&lt;/h2&gt;

&lt;p&gt;State preservation is respect for the viewer\'s time. If the app is interrupted for any reason (crash, system kill, network loss, sleep/wake, or viewer switching away and back), it restores the viewer\'s context on return. This means that the last screen, the playback position, and any in-progress navigation state are restored correctly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Persist session state to local storage on every meaningful state change (not just on pause/stop). Define what \"meaningful\" looks like for your app: screen transitions, playback position updates, subtitle or audio track changes, and scroll position within a content list are common choices.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;On app cold start, check for saved state and offer resume rather than starting fresh.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For cross-device continuity, synchronize playback position via a centralized service with low-latency replication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test recovery paths explicitly: simulate system kill, network loss, and sleep/wake in QA and CI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;What good looks like: A viewer whose app was killed by the system returns to exactly where they left off --- same screen, same playback position, same audio and subtitle track.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Measuring and maintaining stability
&lt;/h2&gt;

&lt;p&gt;Fire TV's &lt;a href="https://developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html" rel="noopener noreferrer"&gt;App Health Insights&lt;/a&gt; dashboard surfaces crash rate, ANR rate, crash count, and ANR count that can be filtered by app version, device type, and OS. Crash and ANR event tables include device counts and timestamps that can be exported for offline analysis.&lt;/p&gt;

&lt;p&gt;The metrics that matter for stability are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crash rate&lt;/strong&gt; &lt;strong&gt;below 2% of weekly active devices&lt;/strong&gt; is the threshold above which active remediation begins.&amp;nbsp;The best streaming apps on Fire TV operate well below it, and they treat any regression as a release-blocking event.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ANR rate&lt;/strong&gt; &lt;strong&gt;below 0.47% of daily sessions&lt;/strong&gt; is the point at which the system considers the app unresponsive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory footprint&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;should be within 400 MB&lt;/strong&gt; on the lowest-capability device family the app supports. Fire TV apps should restrict foreground memory (RAM) consumption to 400 MB for 4K video apps, and 300 MB for 1080P or lower resolution. Exceeding this threshold sharply increases the chance the system will terminate the app.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dashboard data should not be the only signal for a bad release. Integrate crash reporting into the app release pipeline and set automated alerts on regression thresholds. The team should want to know about problems before the viewers complain. Fire TV provides the tooling to make stability measurable and actionable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: A crash rate well below 2%, an ANR rate under 0.47%, memory within published limits on every supported device family, and automated alerts fire on any regression before the rollout reaches 1%.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality owner questions
&lt;/h2&gt;

&lt;p&gt;These questions should be answerable with data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stability metrics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Is the app foreground crash rate below 2% of weekly active devices? If not, what are the top five crash signatures by devices impacted?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the app ANR rate, and is it below 0.47%?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the last three releases, did any cause a stability regression? Can the team detect regressions at less than 1% of rollout?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the app memory footprint on the lowest-capability Fire TV device family it supports, and how close is it to the 400 MB / 300 MB threshold depending on device resolution?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resilience behavior&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What happens if the catalog service, ad service, or network connection fails during a viewing session? Walk through the viewer\'s experience for each.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can the app preserve playback position after a crash, system kill, sleep/wake event, or network drop?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which dependency could still take down a major viewer journey if it fails or hangs?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Process and readiness&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Are network loss, service failures, low memory, and slow dependencies tested before every release and not just sunny-day scenarios?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Does the app have a rollback mechanism that can revert a bad update without a full release cycle?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can the app demonstrate graceful degradation for each failure mode listed above?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of these questions cannot be answered with evidence from the past 30 days, that is where the work needs to start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to start
&lt;/h2&gt;

&lt;p&gt;Make crash triage automation the one stability investment this quarter.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Instrument apps to report every crash with a full stack trace, device model, OS version, and app version.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review the top five crash signatures weekly, prioritized by devices impacted rather than occurrence count.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Set a release gate: do not ship if the crash rate exceeds defined thresholds.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build rollback capability so that the team can revert a faulty release within hours rather than days.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;→ Crash and ANR signals are the primary rollout halt triggers described in the Release and Operations Excellence pillar. The telemetry infrastructure that surfaces these signals is covered in the Insight and Telemetry pillar.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Stability and Resilience is the third pillar of the Blueprint. The next post covers Living Room Experience and Accessibility. Then, the Streaming Experience pillar depends on the resilient playback path and graceful recovery established here. Lastly, Release and Operations Excellence depends on the crash and ANR signals defined in this pillar being enforced as rollout halt triggers.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;[1] Amazon Developer. "Achieving App Quality Through Performance and Stability." Mar 2025. &lt;a href="https://developer.amazon.com/apps-and-games/blogs/2025/03/achieving-app-quality-through-performance-and-stability" rel="noopener noreferrer"&gt;https://developer.amazon.com/apps-and-games/blogs/2025/03/achieving-app-quality-through-performance-and-stability&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[2] Amazon Developer. "App Health Insights Dashboard." Feb 2026. &lt;a href="https://developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html" rel="noopener noreferrer"&gt;https://developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[3] Android Developers. "Android Vitals: ANR Rate."&amp;nbsp;&lt;a href="https://developer.android.com/topic/performance/vitals" rel="noopener noreferrer"&gt;https://developer.android.com/topic/performance/vitals&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[4] Amazon Developer. "Test Criteria for Amazon Appstore Apps." Feb 2026. &lt;a href="https://developer.amazon.com/docs/app-testing/test-criteria.html" rel="noopener noreferrer"&gt;https://developer.amazon.com/docs/app-testing/test-criteria.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[5] CleverTap. "Why Do Users Uninstall Apps?" 2023. &lt;a href="https://clevertap.com/blog/app-uninstalls/" rel="noopener noreferrer"&gt;https://clevertap.com/blog/app-uninstalls/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[6] Richa Sharma. "Why 50% of Users Uninstall Apps Within 30 Days." Medium, 2023. &lt;a href="https://medium.com/write-a-catalyst/why-50-of-users-uninstall-apps-within-30-days-guide-to-early-engagement-adbb769ff1c6" rel="noopener noreferrer"&gt;https://medium.com/write-a-catalyst/why-50-of-users-uninstall-apps-within-30-days-guide-to-early-engagement-adbb769ff1c6&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tv</category>
      <category>development</category>
      <category>architecture</category>
      <category>vegaos</category>
    </item>
    <item>
      <title>Performance and Efficiency</title>
      <dc:creator>Ashutosh Joglekar</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:36:29 +0000</pubDate>
      <link>https://dev.to/amazonappdev/performance-and-efficiency-3o67</link>
      <guid>https://dev.to/amazonappdev/performance-and-efficiency-3o67</guid>
      <description>&lt;h2&gt;
  
  
  Performance matters
&lt;/h2&gt;

&lt;p&gt;Performance is a quality dimension viewers will notice without measuring anything &lt;a href="https://developer.amazon.com/apps-and-games/blogs/2025/03/achieving-app-quality-through-performance-and-stability" rel="noopener noreferrer"&gt;[1]&lt;/a&gt; &lt;a href="https://developer.amazon.com/docs/vega/0.23/improve-performance-overview.html" rel="noopener noreferrer"&gt;[3]&lt;/a&gt;. A viewer presses the remote, the splash screen stays on screen for a little longer than desired, and they're already deciding whether the app is slow and unusable. A slow launch, a stuttering menu, or a stalled scroll pushes viewers to uninstall and not return.&lt;/p&gt;

&lt;p&gt;Strong teams treat Performance and Efficiency as ongoing work, not a periodic sprint, and bake it into how every change is reviewed before it ships.&lt;/p&gt;

&lt;p&gt;Performance drives all product features of the application, strong content, thoughtful design, and personalized recommendations cannot survive a blank launch screen or a UI that drops frames while navigating. A viewer who waits four seconds for a home screen is making a judgment about the catalogue before they have seen any of it. When startup is fast and navigation holds steady, the work the content, personalization teams have done actually reaches the viewer. When it is not, that work is paid for but not received.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource efficiency matters
&lt;/h2&gt;

&lt;p&gt;Managing resources efficiently is harder on Fire TV streaming devices than mobile because the hardware is more constrained. A typical low-end phone has 8 to 12GB of RAM and CPU running &amp;gt; 3GHz while a low end Fire TV Stick has around 1GB RAM and CPU that operates at around 1.7GHz. Unlike a phone, the Fire TV Stick device sits in a sealed HDMI enclosure behind a TV panel with no active cooling. Your app must hold up across all these resource constraints when running on a Fire TV Stick. The operating system will reclaim memory under pressure and terminate apps to free up resources. The gap between acceptable and problematic is thin, and your app must hold across the range of supported device families, including older models still in active use. Usage sessions on Fire TV devices are also longer than on mobile, since a streaming app may run for hours rather than minutes. Issues that decay slowly with time are felt by viewers in a single evening, not over weeks of use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recognizing performance issues
&lt;/h2&gt;

&lt;p&gt;Functional issues or crashes produce a clear trail to investigate and assign ownership. A regression on performance thresholds produces no alert/crash/trail to investigate until the cumulative effect of several such regressions shows up in viewer signals.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;→ Crash and ANR signals are covered in the Stability and Resilience pillar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The business case is straightforward; sessions that start fast lead to longer engagement. Apps that drift slowly into resource pressure lose viewers gradually, without the kind of obvious failure signal that would mobilize a team. A team can ship three releases in a row, each looking fine on its own dashboard. The cumulative retention dip lands at quarterly review, with no single change to attribute it to. Quality owner who hold their teams to a clear performance bar are protecting the return on every other investment in the product.&lt;/p&gt;

&lt;h2&gt;
  
  
  A performance habit in the development process
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Clear thresholds and targets for performance
&lt;/h3&gt;

&lt;p&gt;Teams define explicit targets for cold start time to first frame (TTFF), warm start and resume, sustained frame rate during navigation, memory footprint during 1080p and 4K playback, and idle CPU use. Targets are set inside Fire TV device certification thresholds &lt;a href="https://developer.amazon.com/docs/vega/0.23/improve-performance-overview.html" rel="noopener noreferrer"&gt;[3]&lt;/a&gt; [7], not at them, so the app can absorb new features and CX updates without falling out of compliance. As a working baseline: a 60fps UI gives a 16.67ms per frame budget. On the Fire TV Stick Lite, a healthy foreground footprint sits well below the device's RAM ceiling, not at it. These targets are documented, owned, and visible to quality owners, not held informally in the heads of a few engineers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: App performance KPIs&lt;/em&gt; &lt;a href="https://developer.amazon.com/docs/vega/0.23/measure-app-kpis.html#app-kpi-metrics-and-guidelines" rel="noopener noreferrer"&gt;&lt;em&gt;[7]&lt;/em&gt;&lt;/a&gt; &lt;em&gt;are below the target thresholds set for the platform for every single release before App submission.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Treat app startup thresholds as go/no go
&lt;/h3&gt;

&lt;p&gt;Application startup from user experience point can be split into TTFF (time to first frame rendered on screen from launch of application), TTFD (time to fully drawn when application rendering is complete and is ready for user input). These two highlight users how much time they see black screen after deciding to open the app and how long they need to wait until they can start using the application post launch.&lt;/p&gt;

&lt;p&gt;Sort startup services into essential and deferrable from a speed perspective. Review and restrict network calls on app launch to only those that are necessary, since network traffic directly impacts startup performance. Use cached or parallelized mechanisms for the network requests that remain. When resuming the app from background, restore state rather than reinitializing the stack where possible. Teams that actively track the impact of each startup service are more likely to ship CX improvements without lengthening cold start (fresh start of the application code when its not running in background).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: adhering to documented startup thresholds for all app startup conditions for every single application version release. [7]. Holding app release until all KPI thresholds are met.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Measure performance indicators in real world setup
&lt;/h3&gt;

&lt;p&gt;Profile the app on the MVD (minimum viable device) family in the supported range and on a real device, since that is where issues will first surface. Minimum viable device is the lowest specification device which is likely to show performance issues first. Watch performance indicators after extended use and on constrained networks, using device side profiling and memory tooling [3] rather than relying on dev testing or testing in ideal environments alone. Key indicators are sampled from real production data and not just internal test runs. As part of standard test plans, include testing of the app for prolonged period of continuous use in line with the maximum time viewers spend inside the app.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Make sure all performance indicator data points are collected on MVD device along with target device platforms. This data is a sign off point for App releases.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resource consumption thresholds
&lt;/h3&gt;

&lt;p&gt;Resource monitoring for apps start with the size of application bundle and follows into memory/CPU consumption while user is interacting with the Application. Memory budgets should be enforced in release testing, with regressions treated as quality defects rather than minor follow ups to be addressed later. If not treated early, resource use can compound over multiple releases into the kind of degradation viewers feel as sluggish menus and longer launches. Third party services such as analytics, ads, crash reporting, and A/B testing should be profiled before integration. Hold them to the same resource bar as first party code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: All measurements of resource utilization of application and integrated services is within the quality thresholds defined for the device.&lt;/em&gt; &lt;a href="https://developer.amazon.com/docs/vega/0.23/measure-app-kpis.html#app-kpi-metrics-and-guidelines" rel="noopener noreferrer"&gt;&lt;em&gt;[7]&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Thermal footprint on device
&lt;/h3&gt;

&lt;p&gt;Because Fire TV devices are mains powered and enclosed behind a television, the relevant framing is thermal and power efficiency, not battery life, which is the mobile framing. Sustained CPU and GPU use should be minimized, and hardware decode should be preferred where it is available. The app should be exercised under realistic viewing scenarios to profile and confirm that prolonged usage of the app is not increasing the thermal measurements of the device. Throttling rarely arrives as a single visible event; it shows up as gradual frame drops and audio/video drift in the second half of a long viewing session.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Make sure that thermal measurements are done for app releases with long duration soak tests that check thermal impact.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance is a quality owner metric &lt;a href="https://developer.amazon.com/docs/vega/0.23/improve-performance-overview.html" rel="noopener noreferrer"&gt;[3]&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Performance data sits next to crash data in release reviews. Every new feature onboarding should answer one question: what does this cost in startup time and resources? SDK adoption decisions consider footprints, not only capability. When release decisions are made without performance in the conversation, the gaps surface later, in viewer behavior rather than in any single ticket. This ownership matters because a 200ms cold start regression produces no alert and no escalation; it has to be looked for. Quality owner’s attention is what makes the slow moving signals visible as the loud ones. The quality owner should own the adherence of Application to quality metrics and testing for performance as part of the development process &lt;a href="https://community.amazondeveloper.com/t/tooling-and-help-guides-for-performant-app-development/9672" rel="noopener noreferrer"&gt;[6]&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: every release readiness review carries performance data alongside crash data, and feature release decisions are signed off only after review of performance impact.&lt;/em&gt; &lt;a href="https://developer.amazon.com/docs/vega/0.23/measure-app-kpis.html#app-kpi-metrics-and-guidelines" rel="noopener noreferrer"&gt;&lt;em&gt;[7]&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality owner questions
&lt;/h2&gt;

&lt;p&gt;These questions are designed for quality owner to use during quality reviews, release go/no go discussions, and post release retrospectives. Strong answers are supported by data and named owners.&lt;/p&gt;

&lt;h3&gt;
  
  
  Startup and resume
&lt;/h3&gt;

&lt;p&gt;What is the team's TTFF and time to interactive, broken down by device family? Is that measurement taken on the MVD in the supported range, under realistic conditions?&lt;/p&gt;

&lt;p&gt;Has the development team implemented performance guidance for improving startup performance &lt;a href="https://community.amazondeveloper.com/t/improve-app-performance-on-vega/9171" rel="noopener noreferrer"&gt;[5]&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When viewers return to the app after 30 seconds, after 5 minutes, and after an hour, do they see preserved state or a full reload, and is that behavior intentional?&lt;/p&gt;

&lt;h3&gt;
  
  
  Frame rate and fluidity
&lt;/h3&gt;

&lt;p&gt;Does the team have frame rate data from real viewers? Can the team identify the screens, interactions, and device models that produce the most sluggishness in UI navigation?&lt;/p&gt;

&lt;p&gt;What is the impact of new CX features on UI responsiveness and navigation fluidity?&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory, CPU, and resource budgets
&lt;/h3&gt;

&lt;p&gt;What is the team's memory footprint at launch, during resource heavy actions, and after prolonged soak time?&lt;/p&gt;

&lt;p&gt;How has that footprint moved over the last few releases?&lt;/p&gt;

&lt;p&gt;How does the team profile resource use in release testing, and how does the team adjust based on the trends?&lt;/p&gt;

&lt;p&gt;When was the last heap analysis over an extended session to detect slow leaks, and who owns the result?&lt;/p&gt;

&lt;h3&gt;
  
  
  Thermal and sustained behavior
&lt;/h3&gt;

&lt;p&gt;Has the team run a one hour soak test on the target device in a realistic setup and confirmed no thermal throttling? Does production telemetry surface throttle events?&lt;/p&gt;

&lt;p&gt;What is the app's idle CPU use when foregrounded but no content is playing, and has that number changed across recent releases?&lt;/p&gt;

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

&lt;p&gt;Are startup latency, UI responsiveness, and resource footprint part of every release's go/no go criteria, with data attached? Can the team name the last release where a performance regression was caught before shipping?&lt;/p&gt;

&lt;p&gt;When viewers report buffering or playback degradation, does the team have device side telemetry to determine whether the cause was client side or network side before escalating to the streaming pipeline?&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;Performance and Efficiency is the second pillar of the Blueprint. The next post covers Stability and Resilience. That is where unmanaged performance pressure most often shows up as crashes, hangs, and unrecoverable states, and where the same measurement work begins to pay back. Later pillars build on this base. Streaming Experience depends on a healthy device side runtime. Release and Operations Excellence depends on the performance gates established here being enforced on every release that follows.&lt;/p&gt;

</description>
      <category>firetv</category>
      <category>fireos</category>
      <category>vegaos</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Insight and Telemetry</title>
      <dc:creator>Kostakis Bouzouaks</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:35:27 +0000</pubDate>
      <link>https://dev.to/amazonappdev/insight-and-telemetry-33gm</link>
      <guid>https://dev.to/amazonappdev/insight-and-telemetry-33gm</guid>
      <description>&lt;p&gt;This pillar sets out the telemetry a streaming app needs to detect quality problems, trace them to a cause, and turn them into engineering decisions.&lt;/p&gt;

&lt;p&gt;Insight and Telemetry is the practice of making the viewer experience visible, measurable, and actionable across every stage of a playback session. Teams can improve performance, stability, and streaming quality through architecture decisions, testing, and device-farm validation. Most check releases against aggregate metrics like crash rate and playback start success. But aggregate metrics hide failures that concentrate on one device family, OS version, or marketplace. Staged rollouts cannot show where in the viewing session the experience broke. Confirming that the experience is stable across the full install base requires connected, per-viewing-session telemetry.&lt;/p&gt;

&lt;p&gt;Sometimes the signals do not exist: the app does not emit the event, the metric is undefined, or the team has no visibility into part of the viewing session. Other times the signals exist but sit in separate systems. Client, player, backend, ad service, and content delivery network (CDN) each hold a piece. The team cannot join them to the same session at the speed of a release decision or an on-call alert.&lt;/p&gt;

&lt;h2&gt;
  
  
  App health is not viewer experience
&lt;/h2&gt;

&lt;p&gt;App health and playback quality of experience (QoE) measure different things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App health&lt;/strong&gt; measures whether the app is stable and responsive: crash rate, ANR events, app freezes, startup latency, memory pressure, and UI responsiveness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Playback QoE&lt;/strong&gt; measures whether viewers can start and continue watching: time to first frame (TTFF), rebuffering, playback errors, bitrate shifts, ad start failures, and return-to-content success. The two overlap but are not interchangeable. Without separation, the typical result is a blind spot: stability looks good but the viewer waited five seconds for first frame, or playback starts fine but navigation is unresponsive between sessions.&lt;/p&gt;

&lt;p&gt;Most teams blend them into one dashboard which makes it harder to tell whether the app is failing or the viewing experience is failing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: App health and QoE are separate in the dashboard but connected in the session trace. Otherwise, the team either misses the viewer problem or chases the wrong system.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Segment the install base or the average will hide the issue
&lt;/h2&gt;

&lt;p&gt;The same app behaves differently by device family, OS version, app version, marketplace, and playback type (live, on-demand, or ad-supported). Most Fire TV quality issues do not fail evenly across the install base. An aggregate dashboard can hide the failure the team needs to find.&lt;/p&gt;

&lt;p&gt;A release may look clean at the aggregate level: playback start success is steady, crash-free sessions are unchanged, rebuffering ratio barely moves. Then the segment view shows what the aggregate missed. An older Fire TV streaming player is buffering after ad breaks, but only on one app version and in one marketplace.&lt;/p&gt;

&lt;p&gt;A segment is the slice of viewers, sessions, or devices where a quality issue becomes visible. It might be any of the dimensions above, or something narrower: a content type, a specific CDN route, or a group of viewers on a new feature release.&lt;/p&gt;

&lt;p&gt;Every segment breakdown costs time to build and maintain. The test is whether it changes an engineering decision. The team should keep breakdowns that show where the experience is breaking, and drop any that produce dashboard noise without changing action. Once the segment shows where the issue lives, the next step is tracing the events that explain why it happened there.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: The team can answer "where is the experience breaking?" within minutes, not by writing a query that takes an afternoon. Segment views load at investigation speed and cover the key dimensions without custom analysis.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trace the full playback session
&lt;/h2&gt;

&lt;p&gt;A viewer's session crosses several systems before video appears and continues playing. When something fails, the investigation depends on connecting events across those systems.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What can fail&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Where to look&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App launch&lt;/td&gt;
&lt;td&gt;Crash, freeze, slow start&lt;/td&gt;
&lt;td&gt;Client app, device memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sign-in or session resume&lt;/td&gt;
&lt;td&gt;Auth failure, token expiry&lt;/td&gt;
&lt;td&gt;Authentication service, entitlement API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Home screen load&lt;/td&gt;
&lt;td&gt;Slow render, failed content rails&lt;/td&gt;
&lt;td&gt;Client app, backend APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Content selection and entitlement&lt;/td&gt;
&lt;td&gt;Access denied, timeout&lt;/td&gt;
&lt;td&gt;Entitlement service, backend APIs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playback start&lt;/td&gt;
&lt;td&gt;No first frame, ad failure&lt;/td&gt;
&lt;td&gt;Player, CDN, ad service, manifest retrieval&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steady-state playback&lt;/td&gt;
&lt;td&gt;Buffering, quality drops, errors&lt;/td&gt;
&lt;td&gt;Player, CDN, network, device decoder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ad break and return to content&lt;/td&gt;
&lt;td&gt;Ad stall, black screen on return&lt;/td&gt;
&lt;td&gt;Ad service, player, CDN&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Session traceability ties these events together through a session ID that does not rely on personally identifiable information. The trace should show what happened, what failed, and the context needed to act: device family, OS version, app version, marketplace, and CDN signals where available.The trace does not need to resolve every dependency, it needs to get the investigation to the right area quickly.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: An engineer starts with a failed session ID and reaches the most likely fault area within fifteen minutes. Client, player, backend, and delivery events connect without rebuilding the timeline by hand.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Set baseline quality objectives before the incident
&lt;/h2&gt;

&lt;p&gt;Service level objectives (SLOs) define the quality the app is expected to meet. Without written targets, marginal regressions start the wrong argument: whether the number is actually bad.&lt;/p&gt;

&lt;p&gt;SLOs for a Fire TV streaming app should cover both app health and playback QoE:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App health:&lt;/strong&gt; crash-free sessions, ANR rate, app startup latency, backend API latency and error rate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playback QoE:&lt;/strong&gt; playback start success, TTFF, rebuffering ratio, playback error rate, ad start success, return-to-content success&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Targets will vary by product, device mix, marketplace, and measurement method. What matters is that the team agrees on them before the release, not during the incident review.&lt;/p&gt;

&lt;p&gt;SLOs also need segment views. The SLO dashboard should show both the aggregate number and the segments closest to missing the target.&lt;/p&gt;

&lt;p&gt;The quality owner should be able to ask: which objective is at risk, which viewers are affected, and what evidence points to the cause.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Objectives exist for app health and playback QoE. Someone can name which segments are closest to breaching right now. Targets reflect the current device mix.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The riskiest failures are the ones the team cannot see
&lt;/h2&gt;

&lt;p&gt;A blind spot is any part of the viewing session where the team cannot tell whether the experience is healthy. Some blind spots are visible once named:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app does not log playback errors consistently.&lt;/li&gt;
&lt;li&gt;The player reports a generic failure code that hides the cause.&lt;/li&gt;
&lt;li&gt;Ad events are measured separately from the playback session.&lt;/li&gt;
&lt;li&gt;CDN data cannot be connected to app-side events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Others only surface when something goes wrong:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crash rate is tracked but ANR rate is not.&lt;/li&gt;
&lt;li&gt;Playback start success is measured, but TTFF is not.&lt;/li&gt;
&lt;li&gt;Buffering increases and nobody can tell whether it concentrates by device family, marketplace, or CDN route.&lt;/li&gt;
&lt;li&gt;Backend dashboards look strong while client-side visibility stays weak.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to find them:&lt;/strong&gt; Walk the session path table above stage by stage. For each stage, ask: if this failed silently for a week, what would be the first signal? If the answer is support tickets or customer reviews, that stage is a blind spot.&lt;/p&gt;

&lt;p&gt;The quality owner does not need to close every gap immediately. Each gap needs either an instrumentation plan or an accepted risk decision.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: The team can name its top three visibility gaps. No part of the viewing session is invisible by accident.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Good telemetry points engineers toward the cause
&lt;/h2&gt;

&lt;p&gt;The Trace section covers tracing a single session. This section covers a different problem: when an aggregate metric moves, how does the team decompose it to find which system, segment, or stage is responsible?&lt;/p&gt;

&lt;p&gt;A dashboard that says "buffering is up" tells the team something changed. It does not tell them where to look. Telemetry needs to narrow the search from symptoms to likely cause.&lt;/p&gt;

&lt;p&gt;That means decomposing each metric into its contributing stages. If buffering rises, the team should see where the increase concentrates: device family, marketplace, CDN route, internet service provider (ISP), or app version. If video startup slows, the dashboard should separate the stages that contribute to it: app startup, entitlement, manifest retrieval, ad loading, player initialization, and CDN delivery. One number and no breakdown leaves the team guessing which system to investigate.&lt;/p&gt;

&lt;p&gt;The pattern is the same for any symptom:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Symptom&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;First breakdown needed&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support complaint&lt;/td&gt;
&lt;td&gt;Affected sessions, app versions, and devices involved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rebuffering spike&lt;/td&gt;
&lt;td&gt;Playback type, CDN route, marketplace, device family&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App freeze&lt;/td&gt;
&lt;td&gt;Memory pressure, CPU usage, device family, app version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow startup&lt;/td&gt;
&lt;td&gt;Which stage is slow: app initialization, authentication, manifest loading/reading, ad load, player&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A shared event schema that correlates client, player, backend, and delivery events to the same session ID makes this decomposition possible.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: An engineer starts with an aggregate symptom and identifies the affected segment and contributing system within minutes. The dashboard breaks symptoms down to contributing systems.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Analytics should change engineering priorities
&lt;/h2&gt;

&lt;p&gt;Telemetry should surface slow-moving regressions before they become visible at the aggregate level. A weekly quality review should answer three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Are app health and QoE improving, flat, or regressing?&lt;/li&gt;
&lt;li&gt;Which segments are trending away from their SLOs?&lt;/li&gt;
&lt;li&gt;Are any recurring issues being dismissed as one-off noise?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The quality owner brings these findings to prioritization. If a segment is regressing and the work to fix it is not scheduled, the review has surfaced a priority decision. If nothing in the review changes priorities, the review is not reaching decisions.&lt;/p&gt;

&lt;p&gt;Quality reporting should make quality risk visible: where the experience is getting worse, which viewers are affected, what the likely source is, and what work is planned.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: Telemetry has driven at least one engineering priority change in the past quarter. The quality review surfaces problems that the team cannot dismiss, and those problems reach the backlog.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The minimum telemetry model
&lt;/h2&gt;

&lt;p&gt;On day one, a Fire TV streaming app needs enough coverage to answer four questions:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Question&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;What it requires&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;What failed?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Crash, ANR, app freeze, playback start failure, playback error, buffering, ad failure, return-to-content failure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Who was affected?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Device family, OS version, app version, marketplace, playback type, network condition&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Where in the session did it fail?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;App launch, sign-in, entitlement, home screen, playback start, ad break, return to content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Where should engineers look first?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Client events, player events, backend API, CDN delivery, ad service&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use the &lt;a href="//%5Bhttps%3A//developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html%5D%28https%3A//developer.amazon.com/docs/reports-promo/app-health-insights-dashboard.html%29"&gt;Amazon App Health Insights dashboard&lt;/a&gt; alongside internal telemetry where available. It covers release health and device-level trends. Client, player, backend, ad, and delivery telemetry still need to connect back to the viewing session. That connection is what this pillar asks the team to build.&lt;/p&gt;

&lt;p&gt;Start with three views the team will use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Release health:&lt;/strong&gt; is the current version stable across segments?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playback QoE by segment:&lt;/strong&gt; where is the viewing experience breaking?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session trace lookup:&lt;/strong&gt; can an engineer follow one failed session end to end?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every additional view beyond these three needs an owner and a decision it supports before it gets built.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What good looks like: The team can detect a quality regression within hours, not days. The four questions above have clear answers in the current tooling. Each metric has an owner who acts on it.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Quality owner questions
&lt;/h2&gt;

&lt;p&gt;These questions test whether telemetry is strong enough to support quality decisions. If the answer to any is unclear, that is the starting point.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Can we see the viewer experience separately from app stability?&lt;/strong&gt; The quality owner should be able to show TTFF, rebuffering, and playback start success independently of crash metrics. If the only dashboard is crash-free sessions and ANR rate, the viewer side is invisible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Would we see a regression that only hits one segment?&lt;/strong&gt; Pick a representative slice: one device family, one marketplace, one OS version. How long does it take to get a segment-level view? If the answer requires writing a custom query, the breakdowns are not usable at investigation speed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can we trace a failed session in under fifteen minutes?&lt;/strong&gt; Take a real support ticket. Hand it to an engineer. Start the clock. Fifteen minutes to a plausible fault area is the bar. That means connecting client, player, backend, and delivery events for a single viewing session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do we have SLOs, and are we inside them?&lt;/strong&gt; Objectives should exist for playback start success, TTFF, rebuffering, and crash rate. They should reflect the current device mix. Someone should be able to name which segments are closest to breaching right now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How quickly would we detect a regression in the next release?&lt;/strong&gt; If the next release doubles rebuffering on one device family, how many hours pass before an engineer starts investigating? If detection depends on someone checking a dashboard during business hours, that is the gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can we point to one engineering decision telemetry drove in the past quarter?&lt;/strong&gt; One example is enough: a metric exposed a device-specific problem, a trace shortened an investigation, an SLO changed a release decision. Zero means telemetry is not reaching decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Can we name our top three visibility gaps?&lt;/strong&gt; Ask the team. They will answer quickly. Then ask what happens if that area fails silently for a week. If the first signal would be support tickets, that gap needs an instrumentation plan.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Start with the visibility gap that hurts most
&lt;/h2&gt;

&lt;p&gt;The quality owner should pick the quality issue the team still talks about. That might be the incident that was hard to trace, or the regression that took days to detect.&lt;/p&gt;

&lt;p&gt;For that issue, walk three steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the earliest signal available?&lt;/li&gt;
&lt;li&gt;Could the team see which viewers, devices, or sessions were affected?&lt;/li&gt;
&lt;li&gt;Could engineers connect the symptom to the likely system?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Where the answer is unclear, that is where to start. The fix might be a missing event, a metric definition, a device breakdown, or an ownership assignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;→ &lt;em&gt;Performance and Efficiency covers the metrics and engineering practices that decide how long viewers wait before playback starts. It focuses on app startup latency, TTFF, responsiveness, and resource use across Fire TV device families.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>tv</category>
      <category>development</category>
      <category>learning</category>
    </item>
    <item>
      <title>Building High Quality Streaming Apps: The Blueprint</title>
      <dc:creator>Anisha Malde</dc:creator>
      <pubDate>Fri, 24 Jul 2026 08:35:00 +0000</pubDate>
      <link>https://dev.to/amazonappdev/high-quality-streaming-apps-on-amazon-fire-tv-introducing-the-blueprint-3k0f</link>
      <guid>https://dev.to/amazonappdev/high-quality-streaming-apps-on-amazon-fire-tv-introducing-the-blueprint-3k0f</guid>
      <description>&lt;p&gt;When viewers open a streaming app on Amazon Fire TV, they expect it to start quickly, be easy to navigate with a remote, and begin playback reliably. In a living-room environment, quality issues are visible immediately. If the app is slow, confusing, or unreliable, viewers may lose patience and leave, even when the content itself is strong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why teams need the same quality view
&lt;/h2&gt;

&lt;p&gt;This post introduces the Fire TV Streaming App Quality Blueprint, a six-part series of posts for partner and app teams responsible for streaming experiences on Fire TV. Each post will cover what teams should have in place, why it matters for viewers and for the teams responsible for the app, and the questions teams and leaders should ask during quality reviews. It is written for the person accountable for the overall quality of a streaming app on Fire TV; whether that is an engineering leader, product leader, TPM, or engineer. For the rest of this series, we call this person / team  the quality owners.&lt;/p&gt;

&lt;p&gt;Each post is meant to help teams look at the same app experience together. Where is it working? Where does risk remain? What needs attention before the next release? The goal is to move those conversations earlier in the full lifecycle of the streaming app experience, so quality is considered during planning, design, development, testing, release, and operations. If quality is treated mainly as a final test or launch-readiness check, teams may find important issues too late, when fixes are harder, release options are limited, and viewers are more likely to experience problems in production.&lt;/p&gt;

&lt;p&gt;Streaming app quality is not only about the app code, and it rarely sits with one team. On Fire TV, the app experience depends on many parts working together: the app, catalog, sign-in, subscriptions, playback, ads, third-party integrations, monitoring, release readiness, and support. When an issue occurs, viewers do not see the ownership map behind it. They see missing content, a slow app, buffering, repeated ads, or paid content that stays locked. Internally, the cause may sit with a different system, team, or even organization. One team may be looking at crash reports, another at playback errors, another at support contacts or partner-side metrics. If those signals are reviewed separately, the team can spend too much time debating the symptom and too little time deciding what needs to change before the next release.&lt;/p&gt;

&lt;p&gt;The Blueprint gives teams a practical way to review the areas that most affect the Fire TV streaming app experience. It also pushes the review beyond individual defects, toward ownership, signals, and release practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  How this relates to implementation guidance
&lt;/h2&gt;

&lt;p&gt;This series is not a how-to coding guide, SDK (Software Development Kit) manual, or replacement for implementation documentation. For implementation guidance, teams should continue to use Fire TV and Appstore documentation, SDK guides, sample code, and Fire OS or React Native guidance where applicable. This series is about the quality question behind the implementation work: does the app experience meet the expectations viewers have on Fire TV? &lt;em&gt;Is it easy to use, reliable during playback, stable in production, supported by useful signals, and safe to release?&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The six pillars
&lt;/h2&gt;

&lt;p&gt;The Blueprint is organized around six pillars. Each pillar focuses on a part of the viewer experience or the operating model behind it. Although the posts are written to stand alone, the pillars are ordered by dependency. You need visibility into what's happening before you can improve performance, you need stability before the experience feels polished, and you need operational maturity before you can ship with confidence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Insight and Telemetry&lt;/strong&gt;: Can the team see how the app is performing for viewers, where problems are happening, and which issues changed after a release? This includes app health, playback quality, errors, key viewer journeys, and release impact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance and Efficiency&lt;/strong&gt;: Startup time, remote responsiveness, how smooth browsing feels, screen loading, and device resource usage. What feels fine during development may feel sluggish on older Fire TV hardware in a real living room. This pillar focuses on whether the app feels fast enough for viewers, not whether it passes internal performance gates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stability and Resilience&lt;/strong&gt;: Viewers don't think in terms of root cause. The app stopped working, and that's the whole story. This pillar covers crashes, ANRs (Application Not Responding), frozen screens, bad error handling, service outages, and network interruptions. If the team has known crash scenarios or unrecoverable states that haven't been prioritized, this is where that shows up. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Living-Room Experience and Accessibility&lt;/strong&gt;: This is the difference between an app designed for a TV and one ported from mobile that technically runs. Remote navigation, focus behavior, Back button predictability, TV-appropriate layouts, voice support, accessibility. Most of these issues get caught late because teams test on desktop or emulators first and only pick up a real remote closer to launch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Streaming Experience&lt;/strong&gt;: Does video start, keep playing, and recover when something goes wrong? Covers on-demand and live content, ad insertion where applicable, mid-stream errors, and resume. Many of the "app is broken" reports from viewers are actually playback-path failures that cross multiple service boundaries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Release and Operations Excellence&lt;/strong&gt;: Can the team ship with confidence, catch regressions in production quickly, roll back without a fire drill, and learn from incidents before the next release? This pillar is less about code and more about the release practices and operational readiness around it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;In our work with partner app teams on Fire TV, one of the hardest questions to answer cleanly is: which issue is hurting the most viewers right now? The next post is about building that answer. We start with Insight and Telemetry because teams need to see how the app is performing for viewers before they can improve it. It looks at app health and playback quality in production, how to identify the issues affecting viewers, and how to decide what to fix first.&lt;/p&gt;

</description>
      <category>tv</category>
      <category>development</category>
      <category>architecture</category>
      <category>learning</category>
    </item>
    <item>
      <title>How to Use React Native Libraries in Your Vega App</title>
      <dc:creator>Moses Roth</dc:creator>
      <pubDate>Mon, 20 Jul 2026 21:15:13 +0000</pubDate>
      <link>https://dev.to/amazonappdev/how-to-use-react-native-libraries-in-your-vega-app-4coe</link>
      <guid>https://dev.to/amazonappdev/how-to-use-react-native-libraries-in-your-vega-app-4coe</guid>
      <description>&lt;p&gt;&lt;a href="https://developer.amazon.com/docs/vega/vega.html" rel="noopener noreferrer"&gt;Vega&lt;/a&gt; is Amazon's Linux-based operating system for &lt;a href="https://www.amazon.com/firetv/smart-tvs-by-amazon" rel="noopener noreferrer"&gt;Fire TV&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It uses a fork of React Native (&lt;a href="https://developer.amazon.com/docs/vega/latest/vega-rn-overview.html" rel="noopener noreferrer"&gt;React Native for Vega&lt;/a&gt;), so not all &lt;a href="https://reactnative.directory/packages?vegaos=true" rel="noopener noreferrer"&gt;RN libraries&lt;/a&gt; work out of the box. That means if you are porting your app to Vega, you may need to wire in a Vega fork of some of your libraries as well.&lt;/p&gt;

&lt;p&gt;The good news is that we have ported many of the most popular libraries used in TV apps, and we've also built the &lt;a href="https://developer.amazon.com/docs/vega-api/latest/vega-module-resolver-preset.html" rel="noopener noreferrer"&gt;Vega Module Resolver Preset (VMRP)&lt;/a&gt;, which replaces third-party libraries with their Vega-platform ported equivalencies.&lt;/p&gt;

&lt;p&gt;Let's break it down with the four categories of libraries for Vega:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Libraries with Vega forks&lt;/li&gt;
&lt;li&gt;Libraries that depend on another forked library&lt;/li&gt;
&lt;li&gt;Libraries that work out of the box&lt;/li&gt;
&lt;li&gt;Libraries that don't work with Vega yet&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Libraries with Vega forks
&lt;/h2&gt;

&lt;p&gt;Libraries with Vega forks work natively in your Vega app. You can find a list of them in the &lt;a href="https://developer.amazon.com/docs/vega-api/latest/supported-libraries.html" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;. They are supported as part of the &lt;code&gt;@amazon-devices/&lt;/code&gt; namespace.&lt;/p&gt;

&lt;p&gt;There are two ways to use a forked library:&lt;/p&gt;

&lt;p&gt;1. &lt;strong&gt;Import the fork directly&lt;/strong&gt; by its &lt;code&gt;@amazon-devices/&lt;/code&gt; name. Install the fork:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @amazon-devices/react-native-gesture-handler@2.0.1759135970
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then import it using the &lt;code&gt;@amazon-devices/&lt;/code&gt; prefix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@amazon-devices/react-native-gesture-handler&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works for your own code, but it won't help with transitive imports. If another library in your dependency tree imports &lt;code&gt;react-native-gesture-handler&lt;/code&gt; by its original name, that import won't be redirected and will break at runtime. For that reason, option 2 below is recommended for most apps.&lt;/p&gt;

&lt;p&gt;2. &lt;strong&gt;Keep your original import names&lt;/strong&gt; by using the VMRP, which swaps the original library for the fork at bundle time. See How to use the Vega Module Resolver Preset below for the setup steps and an explanation of how it works.&lt;/p&gt;

&lt;p&gt;The VMRP keeps your import statements platform-neutral and handles transitive dependencies inside other libraries automatically.&lt;/p&gt;

&lt;p&gt;Check the &lt;a href="https://developer.amazon.com/docs/vega-api/latest/supported-libraries.html" rel="noopener noreferrer"&gt;Supported Libraries and Services documentation&lt;/a&gt; for more information and a complete list of the natively forked libraries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Libraries that depend on another forked library
&lt;/h2&gt;

&lt;p&gt;A lot of libraries rely on other libraries to work. For example, &lt;a href="https://reactnative.directory/package/react-native-chart-kit" rel="noopener noreferrer"&gt;react-native-chart-kit&lt;/a&gt; relies on &lt;a href="https://reactnative.directory/package/react-native-svg" rel="noopener noreferrer"&gt;react-native-svg&lt;/a&gt; to work.&lt;/p&gt;

&lt;p&gt;These libraries won't work on Vega on their own, they have internal imports of the original package that need to be redirected to the Vega fork via VMRP.&lt;/p&gt;

&lt;p&gt;Simply adding &lt;code&gt;@amazon-devices/react-native-svg&lt;/code&gt; to your &lt;code&gt;package.json&lt;/code&gt; does not redirect that internal import because Metro still tries to resolve the string &lt;code&gt;react-native-svg&lt;/code&gt;, and the build breaks. You'll need to use the VMRP (see How to use the Vega Module Resolver Preset below), because it rewrites imports inside libraries you can't modify.&lt;/p&gt;

&lt;p&gt;Install the parent library, and then install both the fork and its upstream at their exact pinned versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;react-native-chart-kit@7.0.1
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-exact&lt;/span&gt; react-native-svg@13.14.0
npm &lt;span class="nb"&gt;install&lt;/span&gt; @amazon-devices/react-native-svg@2.0.1759135970
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your &lt;code&gt;dependencies&lt;/code&gt; will then look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"@amazon-devices/react-native-svg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2.0.1759135970"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-native-svg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"13.14.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"react-native-chart-kit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"~7.0.1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll need to include both the &lt;code&gt;@amazon-devices/&lt;/code&gt; version and the upstream version of the dependency. The fork provides the native implementation, and the plain package must be present at the exact version the fork aliases so the VMRP can map it. (Only the aliased library needs an exact pin, the parent library can use a normal version range.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Libraries that work out of the box
&lt;/h2&gt;

&lt;p&gt;The simplest libraries are the ones that already work with Vega, no porting required. These are pure JavaScript libraries with no native module code. They don't touch any platform-native layer, so they run on React Native for Vega the same way they run on standard React Native. Just import them like you normally would.&lt;/p&gt;

&lt;h2&gt;
  
  
  Libraries that don't work with Vega yet
&lt;/h2&gt;

&lt;p&gt;Finally, there are the libraries that aren't available on Vega yet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.amazondeveloper.com/c/vega/feature-requests/8" rel="noopener noreferrer"&gt;Tell us which ones you would like to see come to Vega!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're working on making Vega better every day, and that includes porting the libraries you'd like to see.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to use the Vega Module Resolver Preset
&lt;/h1&gt;

&lt;p&gt;The VMRP is a Babel preset (built on &lt;code&gt;babel-plugin-module-resolver&lt;/code&gt;) that rewrites import specifiers at bundle time. It scans your &lt;code&gt;node_modules&lt;/code&gt; for &lt;code&gt;@amazon-devices/&lt;/code&gt; packages, reads their alias target (the upstream package name and exact version they replace), and rewrites every matching import specifier to point at the fork instead. Because the rewrite happens during transpilation, it applies to all code Metro bundles, including imports inside third-party libraries you can't edit.&lt;/p&gt;

&lt;p&gt;This is why both packages must be installed: the upstream provides the module specifier that existing code references, and the fork provides the native implementation that VMRP redirects to. The pattern is similar to how monorepo workspaces alias packages: two copies coexist in &lt;code&gt;node_modules&lt;/code&gt; and a resolver layer decides which one gets loaded, except here it's a Babel transform doing the aliasing at bundle time rather than the package manager.&lt;/p&gt;

&lt;p&gt;This keeps your import statements platform-neutral and handles transitive dependencies automatically, so it's the recommended approach for most apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to set up the VMRP
&lt;/h2&gt;

&lt;p&gt;1. Install the VMRP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; &lt;span class="s2"&gt;"@amazon-devices/kepler-module-resolver-preset"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2. Install the &lt;code&gt;babel-plugin-module-resolver&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; &lt;span class="s2"&gt;"babel-plugin-module-resolver"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3. Install both the original library and the Vega fork at their exact pinned versions. Check the &lt;a href="https://developer.amazon.com/docs/vega-api/latest/supported-libraries.html" rel="noopener noreferrer"&gt;Supported Libraries documentation&lt;/a&gt; for the correct pair:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-exact&lt;/span&gt; react-native-gesture-handler@2.13.0
npm &lt;span class="nb"&gt;install&lt;/span&gt; @amazon-devices/react-native-gesture-handler@2.0.1759135970
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;--save-exact&lt;/code&gt; for the upstream library because VMRP compares the version string in your &lt;code&gt;package.json&lt;/code&gt; character-for-character against the fork's alias target. Without it, npm writes a &lt;code&gt;^&lt;/code&gt; prefix that prevents the exact match.&lt;/p&gt;

&lt;p&gt;4. Register the preset in your Babel config (&lt;code&gt;.babelrc&lt;/code&gt; or &lt;code&gt;babel.config.js&lt;/code&gt;, in the same folder as your &lt;code&gt;package.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;presets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module:metro-react-native-babel-preset&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module:@amazon-devices/kepler-module-resolver-preset&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Enables the Vega Module Resolver Preset&lt;/span&gt;
        &lt;span class="p"&gt;...&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5. Clean and re-build your package. You can now import the library by its original name, and it will be swapped for the fork automatically. A successful swap logs a confirmation line in the build output (&lt;code&gt;Mapped react-native-svg to @amazon-devices/react-native-svg@...&lt;/code&gt;) and the native manifest will list the corresponding &lt;code&gt;com.amazon.kepler.*&lt;/code&gt; system module dependency. If something goes wrong, you'll see a &lt;code&gt;Skipped&lt;/code&gt; warning instead (see Troubleshooting below).&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;@amazon-devices/&lt;/code&gt; packages are published on &lt;a href="https://www.npmjs.com/org/amazon-devices" rel="noopener noreferrer"&gt;npm&lt;/a&gt;. Install them with &lt;code&gt;npm install&lt;/code&gt; like any other dependency. Always pull the exact fork version from the &lt;a href="https://developer.amazon.com/docs/vega-api/latest/supported-libraries.html" rel="noopener noreferrer"&gt;Supported Libraries documentation&lt;/a&gt; because a mismatched pin causes VMRP to silently skip the swap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Version mismatch
&lt;/h3&gt;

&lt;p&gt;The VMRP requires an exact upstream version match. A caret/tilde range or the wrong version means it silently skips the library rather than mapping it. You'll see a Skipped warning in the build output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[kepler-module-resolver] Skipped react-native-svg, Version Mismatch! Application requested import react-native-svg@^13.14.0, aliased library is: @amazon-devices/react-native-svg@13.14.0. An exact match is required.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note the ^ in the requested version above: a range prevents the exact match. Pin the original library to the plain upstream version (&lt;code&gt;"react-native-svg": "13.14.0"&lt;/code&gt;, not &lt;code&gt;"^13.14.0"&lt;/code&gt;) so it exactly matches what the fork aliases. If you used &lt;code&gt;npm install&lt;/code&gt; without &lt;code&gt;--save-exact&lt;/code&gt;, edit the version in &lt;code&gt;package.json&lt;/code&gt; to remove the &lt;code&gt;^&lt;/code&gt; and run &lt;code&gt;npm install&lt;/code&gt; again to update the lockfile.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to verify the swap succeeded
&lt;/h3&gt;

&lt;p&gt;Grep the build output for &lt;code&gt;[kepler-module-resolver]&lt;/code&gt;. A &lt;code&gt;Mapped &amp;lt;library&amp;gt;&lt;/code&gt; line confirms the swap succeeded. A &lt;code&gt;Skipped&lt;/code&gt; line means it didn't. Check for a version mismatch as described above. If a library redboxes at runtime with an error like "RNSVGPath was not found in the UIManager" and you don't see a &lt;code&gt;Mapped&lt;/code&gt; line for it, the swap didn't happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parent library incompatible with the fork's version
&lt;/h3&gt;

&lt;p&gt;VMRP handling a transitive dependency doesn't guarantee the parent library works end-to-end on Vega. The parent library may depend on a newer version of the upstream package than what the Vega fork currently targets. For example, if a library requires react-native-svg@^15.0.0 but the Vega fork aliases 13.14.0, pinning to 13.14.0 satisfies VMRP but may break the parent library (it could use APIs only available in v15). Check the &lt;a href="https://reactnative.directory/packages?vegaos=true" rel="noopener noreferrer"&gt;reactnative.directory Vega filter&lt;/a&gt; to confirm a library has been validated on Vega, and test it yourself before shipping it in production.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What's it like to ship an app before the OS is finished?</title>
      <dc:creator>Moses Roth</dc:creator>
      <pubDate>Thu, 23 Apr 2026 21:14:35 +0000</pubDate>
      <link>https://dev.to/amazonappdev/whats-it-like-to-build-for-an-unreleased-os-1oba</link>
      <guid>https://dev.to/amazonappdev/whats-it-like-to-build-for-an-unreleased-os-1oba</guid>
      <description>&lt;p&gt;Building an app is always difficult, but what's it like when the platform hasn't shipped yet and is changing every day?&lt;/p&gt;

&lt;p&gt;Last year Amazon shipped Vega, a brand new operating system, with hundreds of apps already live on the platform. How did that happen: so many apps already live and performant on launch day?&lt;/p&gt;

&lt;p&gt;For developers, it was like trying to hit a moving target, standing on a moving vehicle.&lt;/p&gt;

&lt;p&gt;I helped host a Vega meetup in Munich and three devs shared their from-the-trenches perspectives on this unique challenge.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/F15L33cLwJA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.linkedin.com/in/dr-sebastian-mader-097417aa/" rel="noopener noreferrer"&gt;Sebastian Mader&lt;/a&gt;&lt;/strong&gt;, a senior smart TV developer at &lt;strong&gt;ProSieben&lt;/strong&gt;, shares his journey bringing &lt;strong&gt;Joyn&lt;/strong&gt;, the free ad-supported streaming service, to Vega. After his team's previous project was cancelled in March 2023, his team got their hands on a strange Fire TV stick in April, kicked off development in June on SDK version 0.4, and spent the following months watching each new SDK update break their app. The core lesson: React Native on Vega is not React.js, and when performance matters, sometimes the right move is to pull code out of React entirely. He walks through how the team rewrote Joyn's player as a plain TypeScript controller with a view-model bridge, cutting startup time by 50%.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/lgC9VDVt7BQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.linkedin.com/in/artur-morys/" rel="noopener noreferrer"&gt;Artur Morys-Magiera&lt;/a&gt;&lt;/strong&gt;, a senior React Native engineer at &lt;strong&gt;Callstack&lt;/strong&gt;, discusses the pitfalls of developing on a new, performance-sensitive platform. He walks through a five-step methodology: define, measure, analyze, improve, control. He also discusses the tooling landscape: Reassure for catching performance regressions in CI, OpenTelemetry, Embrace, and Sentry for production monitoring, Flashlight and React DevTools for dev-time inspection, and Callstack's own Ottrelite library for tracing across JavaScript, C++, Kotlin, and Swift.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/rJbrI6mgBTg"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.linkedin.com/in/matthiasfesich/" rel="noopener noreferrer"&gt;Matthias Fesich&lt;/a&gt;&lt;/strong&gt;, an iOS-turned-React-Native developer at &lt;strong&gt;DNA inc.&lt;/strong&gt;, shares his team's 18-month journey porting an existing audio/video streaming app onto Vega. Starting in January 2024 with just three developers, they took a codebase already shipping on iOS, Android, and web and rebuilt it in React Native for Vega, landing four to five weeks ahead of deadline. He discusses the three principles that kept the team moving while the platform kept shifting underneath them: move fast without breaking things, reuse code and logic from the sister apps, and anticipate change.&lt;/p&gt;

&lt;p&gt;We also got a bonus talk from &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/christianvanboven/" rel="noopener noreferrer"&gt;Christian Van Boven&lt;/a&gt;&lt;/strong&gt;, Principal Product Manager at &lt;strong&gt;Amazon&lt;/strong&gt;, who shares the upcoming roadmap for Vega:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/NES12S_xBxM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Some details have changed since the talk, but it's still the best overview of where Vega is heading in 2026.&lt;/p&gt;

</description>
      <category>firetv</category>
      <category>appdev</category>
      <category>meetup</category>
      <category>tv</category>
    </item>
    <item>
      <title>To Share or Not to Share: Building for multi-platform</title>
      <dc:creator>Anisha Malde</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:06:56 +0000</pubDate>
      <link>https://dev.to/amazonappdev/to-share-or-not-to-share-taking-your-vega-app-multi-platform-mb5</link>
      <guid>https://dev.to/amazonappdev/to-share-or-not-to-share-taking-your-vega-app-multi-platform-mb5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"To share, or not to share, that is the question." - Shakespeare, if he'd been a React Native developer"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you build apps with React Native, you've definitely asked yourself this ☝️. You've got navigation, state management, business logic, UI components, most of it is the same, and is probably using the same libraries, regardless of whether you're targeting Android TV, Apple TV, or Fire TV. So why maintain separate codebases?&lt;/p&gt;

&lt;p&gt;With &lt;a href="https://developer.amazon.com/docs/vega/0.22/vega-get-started.html" rel="noopener noreferrer"&gt;Vega OS&lt;/a&gt;, we had a chance to get this right from the start. Rather than shipping another platform that locks you into a single target, we wanted to make it easy to build for multiple TV platforms at the same time. Depending on your app's architecture, you can realistically share 70-85% of your codebase across TV operating systems. I want to walk you through how it works, and help you figure out what &lt;em&gt;'to share or not to share'&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;To help, we've published a few projects on Github. You can pick the one that fits your workflow and start your journey, or read on and I'll walk through the workspace setup, some of the tooling that makes it all work and what code you can share today (and what you shouldn't).&lt;/p&gt;

&lt;p&gt;👋 &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-helloworld" rel="noopener noreferrer"&gt;Multi-TV Hello World&lt;/a&gt; - starter template&lt;br&gt;
📺 &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-app-sample" rel="noopener noreferrer"&gt;React Native Multi-TV App Sample&lt;/a&gt; - production-ready reference app&lt;br&gt;
🤖 &lt;a href="https://github.com/AmazonAppDev/devices-agent-skills/blob/main/vega-multi-tv-migration/SKILL.md" rel="noopener noreferrer"&gt;Vega Multi-TV Migration agent skill&lt;/a&gt; - AI assisted migration&lt;/p&gt;
&lt;h2&gt;
  
  
  The shared workspace approach
&lt;/h2&gt;

&lt;p&gt;So what does sharing code across TV platforms actually look like in practice? You want a setup where the shared code lives in one place and the OS specific features (video playback, native integrations, platform quirks) stay isolated. &lt;/p&gt;

&lt;p&gt;To set this up, we refactor the Vega project into a monorepo using &lt;a href="https://yarnpkg.com/features/workspaces" rel="noopener noreferrer"&gt;Yarn v4 workspaces&lt;/a&gt;. On the Vega side, you keep using the Vega SDK as normal. For the other platforms, we use &lt;a href="https://docs.expo.dev/guides/overview/#expo-for-tv" rel="noopener noreferrer"&gt;Expo TV&lt;/a&gt;, which gives you Android TV, Apple TV, and Web support out of the box with a single Expo project. You split things into three workspaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;packages/shared/&lt;/code&gt; - OS-agnostic code (the majority of your app)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;packages/vega/&lt;/code&gt; - Vega-specific code for Fire TV&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;packages/expotv/&lt;/code&gt; - Expo TV for Android TV, Apple TV, and Web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A root &lt;code&gt;package.json&lt;/code&gt; coordinates builds across these sub projects. Each workspace has its own dependencies and build configuration, but they share common code through workspace imports.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-app/
├── package.json                  # Root workspace config (Yarn 4.x)
├── packages/
│   ├── shared/                   # @myapp/shared - OS agnostic code
│   │   ├── package.json
│   │   ├── index.ts
│   │   └── src/
│   │       ├── components/       # Shared UI (Banner.tsx, Banner.kepler.tsx, Banner.android.tsx)
│   │       ├── hooks/
│   │       ├── services/
│   │       └── utils/
│   ├── vega/                     # @myapp/vega - Fire TV
│   │   ├── src/App.tsx
│   │   ├── manifest.toml
│   │   └── metro.config.js
│   └── expotv/                   # @myapp/expotv - Android TV / Apple TV / Web
│       ├── src/App.tsx
│       ├── app.json
│       └── metro.config.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key rule to remember is OS packages import from &lt;code&gt;shared&lt;/code&gt;, but &lt;code&gt;shared&lt;/code&gt; never imports from OS packages.&lt;/p&gt;

&lt;p&gt;Note: By default, the Vega SDK works with &lt;code&gt;npm&lt;/code&gt;, but this monorepo approach uses Yarn v4 workspaces.&lt;/p&gt;

&lt;h3&gt;
  
  
  The tooling that makes sharing work
&lt;/h3&gt;

&lt;p&gt;The workspace structure gets you most of the way there, but two pieces of tooling tie it all together.&lt;/p&gt;

&lt;p&gt;The first is &lt;a href="https://developer.amazon.com/docs/vega-api/0.22/vega-module-resolver-preset.html" rel="noopener noreferrer"&gt;VMRP (Vega Module Resolver Preset)&lt;/a&gt;. Your shared code uses standard React Native imports like &lt;code&gt;react-native-gesture-handler&lt;/code&gt; or &lt;code&gt;react-native-reanimated&lt;/code&gt;, but Vega has its own ported versions of these libraries. VMRP is a Babel preset that automatically swaps those imports for their Vega equivalents at build time, so your shared code stays clean and portable.&lt;/p&gt;

&lt;p&gt;You configure it in your Vega package's &lt;code&gt;babel.config.js&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// packages/vega/babel.config.js&lt;/span&gt;
&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;presets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module:metro-react-native-babel-preset&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;module:@amazon-devices/kepler-module-resolver-preset&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this in place, &lt;code&gt;from 'react-native-gesture-handler'&lt;/code&gt; in your shared code automatically resolves to &lt;code&gt;@amazon-devices/react-native-gesture-handler&lt;/code&gt; when building for Vega. No conditional imports, no platform checks.&lt;/p&gt;

&lt;p&gt;The second is &lt;a href="https://developer.amazon.com/docs/vega/0.22/monorepo-support.html" rel="noopener noreferrer"&gt;Vega Studio's monorepo support&lt;/a&gt;. It automatically detects your workspace layout and imports Vega sub packages when you open the project. Enable it in Settings &amp;gt; Vega &amp;gt; Features: Monorepo, and it handles package discovery, workspace synchronisation, and build task coordination for you.&lt;/p&gt;

&lt;p&gt;Now lets discuss: &lt;/p&gt;

&lt;h2&gt;
  
  
  What makes sense to share
&lt;/h2&gt;

&lt;p&gt;Not all code belongs in &lt;code&gt;packages/shared/&lt;/code&gt;. Some things work identically across platforms, some need OS-specific implementations, and some sit in between. Here's how to think about what goes where.&lt;/p&gt;

&lt;h3&gt;
  
  
  Business logic and state management (share it)
&lt;/h3&gt;

&lt;p&gt;This is the easiest win and where you get the most reuse. Your API calls, &lt;a href="https://redux.js.org/" rel="noopener noreferrer"&gt;Redux&lt;/a&gt;/&lt;a href="https://zustand.docs.pmnd.rs/" rel="noopener noreferrer"&gt;Zustand&lt;/a&gt; stores, data transformations, validation logic, formatting utilities usually don't have any OS specific dependencies. As a rule of thumb, if it doesn't touch a native API or render anything to screen, it belongs in &lt;code&gt;packages/shared/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-app-sample" rel="noopener noreferrer"&gt;Multi-TV App Sample&lt;/a&gt; demonstrates this with its dynamic content loading. The catalog API client, data transforms, and type definitions all live in the shared package and every platform consumes the same data layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  UI components (share most of it)
&lt;/h3&gt;

&lt;p&gt;Most of your UI components are shareable too. Buttons, cards, lists, layouts, modals, grid views are usually standard React Native that works across platforms without changes.&lt;/p&gt;

&lt;p&gt;Where it gets interesting is platform specific styling. React Native's file extension resolution handles this cleanly. Write your base component as &lt;code&gt;Banner.tsx&lt;/code&gt;, then add platform specific extentions &lt;code&gt;Banner.kepler.tsx&lt;/code&gt;. Metro picks the right file at build time (this relies on your &lt;a href="https://developer.amazon.com/docs/vega/0.22/monorepo-support.html" rel="noopener noreferrer"&gt;Metro config being set up for monorepo resolution&lt;/a&gt;, both the Hello World and Multi-TV App Sample repos include this configuration).&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-helloworld" rel="noopener noreferrer"&gt;Hello World repo&lt;/a&gt; shows this pattern with its &lt;code&gt;HeaderLogo&lt;/code&gt; component, which loads different platform logos using &lt;code&gt;.kepler.tsx&lt;/code&gt;, &lt;code&gt;.android.tsx&lt;/code&gt;, &lt;code&gt;.ios.tsx&lt;/code&gt;, and &lt;code&gt;.web.tsx&lt;/code&gt; variants.&lt;/p&gt;

&lt;p&gt;You can also use &lt;code&gt;Platform.select()&lt;/code&gt; for smaller differences that don't warrant separate files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigation and screen flows (share with care)
&lt;/h3&gt;

&lt;p&gt;There are two types of navigation patterns in TV apps, and they share differently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screen-to-screen&lt;/strong&gt; routing (moving between pages, tabs, drawers) is usually fully shareable. If you're using &lt;a href="https://reactnavigation.org/" rel="noopener noreferrer"&gt;React Navigation&lt;/a&gt; (which Vega supports via its &lt;a href="https://developer.amazon.com/docs/vega-api/0.22/react-navigation-7-0-0.html" rel="noopener noreferrer"&gt;&lt;code&gt;react-navigation&lt;/code&gt; package&lt;/a&gt;), your screen definitions, route configs, and navigation structure work the same across platforms. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spatial / Focus navigation&lt;/strong&gt; (moving focus between elements on screen with a remote control d-pad) is where it gets platform-specific. The Multi-TV App Sample uses &lt;a href="https://github.com/bamlab/react-tv-space-navigation" rel="noopener noreferrer"&gt;React TV Space Navigation&lt;/a&gt; to handle focus movement across all platforms, but the layer underneath that captures remote control key events differs per OS. The &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-app-sample/tree/main/packages/shared-ui/src/navigation" rel="noopener noreferrer"&gt;&lt;code&gt;RemoteControlManager&lt;/code&gt;&lt;/a&gt; has separate &lt;code&gt;.android.ts&lt;/code&gt;, &lt;code&gt;.ios.ts&lt;/code&gt;, and &lt;code&gt;.kepler.ts&lt;/code&gt; files because each platform fires different key events. The focus logic is shared, the input handling is forked.&lt;/p&gt;

&lt;h3&gt;
  
  
  Layout and theming (share the system, tweak per platform)
&lt;/h3&gt;

&lt;p&gt;TV apps need to look right across different screen sizes and display densities. The pattern here is the same as with the UI: share the design system (tokens, spacing, typography scales), and use platform-specific files or &lt;code&gt;Platform.select()&lt;/code&gt; where individual platforms need adjustments. For production apps, consider building out a proper theme layer with responsive layouts rather than relying on simple scaling alone. &lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-helloworld" rel="noopener noreferrer"&gt;Hello World repo&lt;/a&gt; includes scaling utilities that normalise dimensions across TV displays based on a 1920x1080 baseline. The scaling logic itself is shared, but you might need platform-specific tweaks for things like safe areas or overscan.&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.amazonaws.com%2Fuploads%2Farticles%2Ftgu7wc08jb2xq4n1x926.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.amazonaws.com%2Fuploads%2Farticles%2Ftgu7wc08jb2xq4n1x926.png" alt="Sharing" width="799" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should keep separate
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Media Player
&lt;/h3&gt;

&lt;p&gt;Production streaming apps tend to use OS-specific media players for optimal performance. You can either follow that path, using native implementations per OS, or use an abstraction to work across like&amp;nbsp;&lt;code&gt;react-native-video&lt;/code&gt;&amp;nbsp;(which now has&amp;nbsp;&lt;a href="https://docs.thewidlarzgroup.com/react-native-video/" rel="noopener noreferrer"&gt;Vega support&lt;/a&gt;). Unless you use these abstractions, your media implementations should live in your OS-specific packages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Amazon specific features
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://developer.amazon.com/docs/vega/0.22/content-launcher-overview.html" rel="noopener noreferrer"&gt;Content Launcher&lt;/a&gt;, In-App Purchase, Amazon Device Messaging, and similar features currently need separate implementations for Vega and Fire OS because their underlying APIs are OS-specific. We're working to migrate these behind single RN libraries, but for now, structure these implementations so they're easy to consolidate later. Keep them in your platform packages with clean interfaces that shared code can call through.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://developer.amazon.com/docs/vega-api/0.22/get-started.html" rel="noopener noreferrer"&gt;Vega UI Components&lt;/a&gt; (VUIC)
&lt;/h3&gt;

&lt;p&gt;Worth flagging early, simple VUIC components like &lt;code&gt;Button&lt;/code&gt; and &lt;code&gt;Text&lt;/code&gt; migrate easily to standard React Native equivalents. But &lt;code&gt;Carousel&lt;/code&gt; and &lt;code&gt;SeekBar&lt;/code&gt; need more work to replace. Identify these dependencies during your analysis phase so you're not surprised mid-migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Native modules and DRM
&lt;/h3&gt;

&lt;p&gt;Anything that touches native code directly (custom TurboModules, DRM implementations, hardware-specific features) stays platform-specific. No way around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it yourself: the Hello World starter
&lt;/h2&gt;

&lt;p&gt;The fastest way to see this in action is the &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-helloworld" rel="noopener noreferrer"&gt;Multi-TV Hello World&lt;/a&gt; repo. It's a hello-world project with a shared &lt;code&gt;Header&lt;/code&gt; component that renders across Vega, Android TV, Apple TV, and Web from the same codebase.&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.amazonaws.com%2Fuploads%2Farticles%2Fj0el9vapx6p92hfukkzj.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.amazonaws.com%2Fuploads%2Farticles%2Fj0el9vapx6p92hfukkzj.png" alt="Hello world" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  See it in production: the Multi-TV App Sample
&lt;/h2&gt;

&lt;p&gt;For something thats closer to a production app, check out the &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-app-sample" rel="noopener noreferrer"&gt;React Native Multi-TV App Sample&lt;/a&gt;. This is a TV app template with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Video playback via &lt;a href="https://github.com/TheWidlarzGroup/react-native-video" rel="noopener noreferrer"&gt;react-native-video&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Spatial navigation with &lt;a href="https://github.com/bamlab/react-tv-space-navigation" rel="noopener noreferrer"&gt;React TV Space Navigation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Drawer navigation, grid layouts, and a dynamic hero banner&lt;/li&gt;
&lt;li&gt;Remote control support across all platforms&lt;/li&gt;
&lt;li&gt;A shared UI library (&lt;code&gt;@multi-tv/shared-ui&lt;/code&gt;) with platform-specific file resolution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports Android TV, Apple TV, Fire TV (Fire OS), Fire TV (Vega OS), and Web from a single monorepo. Good reference for how the shared workspace pattern holds up at scale.&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.amazonaws.com%2Fuploads%2Farticles%2Fns53rrnvwg345hvjmp24.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Fns53rrnvwg345hvjmp24.gif" alt="multiTV" width="560" height="296"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrating your own app: the AI-assisted approach
&lt;/h2&gt;

&lt;p&gt;We've also packaged our migration process into a three-phase agent skill that works with &lt;a href="https://kiro.dev" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt;, &lt;a href="https://claude.ai" rel="noopener noreferrer"&gt;Claude&lt;/a&gt;, or other AI coding assistants. It's available on GitHub: &lt;a href="https://github.com/AmazonAppDev/devices-agent-skills/tree/main/vega-multi-tv-migration" rel="noopener noreferrer"&gt;vega-multi-tv-migration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To use it with Kiro, copy the &lt;code&gt;vega-multi-tv-migration&lt;/code&gt; directory into &lt;code&gt;~/.kiro/skills/&lt;/code&gt; and start a conversation about migrating your app. It activates automatically based on your conversation context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 1: Analyse your codebase
&lt;/h3&gt;

&lt;p&gt;The skill runs static code analysis and gives you an executive summary with estimated code reuse percentage, a dependency classification (what goes to shared, what stays OS-specific, what VMRP handles), and a screen-by-screen migration plan.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Analyse my Vega app for multi-platform migration."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Phase 2: Build the shared workspace structure
&lt;/h3&gt;

&lt;p&gt;This creates the monorepo scaffold, moves code into shared and vega packages, configures Metro for monorepo resolution, and sets up VMRP. After this step, your Vega app should build and run exactly as before, but with shared code properly separated.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Convert my Vega project to a yarn workspaces monorepo using the analysis from Phase 1."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Phase 3: Add OS-specific implementations
&lt;/h3&gt;

&lt;p&gt;This sets up the &lt;a href="https://docs.expo.dev/guides/overview/#expo-for-tv" rel="noopener noreferrer"&gt;Expo TV&lt;/a&gt; package and implements replacements for Vega-specific dependencies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@amazon-devices/kepler-player-client&lt;/code&gt; becomes &lt;a href="https://github.com/TheWidlarzGroup/react-native-video" rel="noopener noreferrer"&gt;react-native-video&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@amazon-devices/kepler-ui-components&lt;/code&gt; becomes custom components or community libraries&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@amazon-devices/kepler-file-system&lt;/code&gt; becomes &lt;a href="https://docs.expo.dev/versions/latest/sdk/filesystem/" rel="noopener noreferrer"&gt;expo-file-system&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"Add Android TV and Apple TV support using Expo TV. Replace my Vega-specific dependencies with stock React Native equivalents."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Best practices
&lt;/h2&gt;

&lt;p&gt;A few things we've learned the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clean up before migration&lt;/strong&gt;: AI tools migrate code as is, including unused files and existing bugs - Do some optimisation first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage React Native version deltas&lt;/strong&gt;: Platforms don't need identical RN versions, but keep the delta to 4-6 versions max for third-party library compatibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on real devices&lt;/strong&gt;: Emulators are great for development, but validate on real hardware before shipping. TV apps behave differently on actual TVs - shocking, I know 😱.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prebuild targets separately first&lt;/strong&gt;: Get each target running independently before building together to save you some debugging headache.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get started building today:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Try the &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-helloworld" rel="noopener noreferrer"&gt;Multi-TV Hello World&lt;/a&gt; to see Fast Refresh across Vega, Android TV, Apple TV, and Web.&lt;/li&gt;
&lt;li&gt;Explore the &lt;a href="https://github.com/AmazonAppDev/react-native-multi-tv-app-sample" rel="noopener noreferrer"&gt;Multi-TV App Sample&lt;/a&gt; for a production-ready reference.&lt;/li&gt;
&lt;li&gt;Run the &lt;a href="https://github.com/AmazonAppDev/devices-agent-skills/tree/main/vega-multi-tv-migration" rel="noopener noreferrer"&gt;migration agent skill&lt;/a&gt; on your own app.&lt;/li&gt;
&lt;li&gt;Tell us what works, what doesn't, and what you'd like to see next- you can open a discussion on &lt;a href="https://github.com/AmazonAppDev" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; or in our &lt;a href="https://community.amazondeveloper.com/c/vega/6" rel="noopener noreferrer"&gt;Forums.&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>tv</category>
      <category>agentskills</category>
    </item>
    <item>
      <title>🎵 On the 12 Days of Christmas, Amazon Developer gave to me... 🎵</title>
      <dc:creator>Anisha Malde</dc:creator>
      <pubDate>Thu, 15 Jan 2026 18:11:51 +0000</pubDate>
      <link>https://dev.to/amazonappdev/on-the-12-days-of-christmas-amazon-developer-gave-to-me-i3o</link>
      <guid>https://dev.to/amazonappdev/on-the-12-days-of-christmas-amazon-developer-gave-to-me-i3o</guid>
      <description>&lt;p&gt;Made a New Year's resolution to learn something new? We've got you covered!&lt;/p&gt;

&lt;p&gt;Back in December, our team turned the holidays into a developer advent calendar, unwrapping a different Amazon tool each day leading up to Christmas. We covered 12 different Amazon tools / services in 12 LinkedIn posts with real code snippets and working demos. Whether you're curious about AI voice generation or custom Kiro agent consider it your New Year's resolution starter pack for building with Amazon's developer. &lt;/p&gt;

&lt;p&gt;So grab your coffeee, and let's see what Amazon Developer gave to theee 🎵&lt;/p&gt;

&lt;h2&gt;
  
  
  🎵 On the 1st day of Christmas 🎄, Amazon Developer gave to me… voice generation with Polly 🎵
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/anishamalde"&gt;@anishamalde&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Okay I’ll admit it, I also yell at Alexa, but I’ll also admit her voice is oddly comforting. So when I needed a voice for my AI assistant app, I turned to &lt;a href="https://aws.amazon.com/polly/" rel="noopener noreferrer"&gt;Amazon Polly&lt;/a&gt;. Polly is AWS’s text-to-speech service that turns text into audio with neural voices across 30+ languages, the same underlying tech that powers Alexa’s voice. &lt;/p&gt;

&lt;p&gt;The setup was surprisingly simple. Polly handles all the heavy lifting, so with just a few lines of code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const result = await pollyClient.send(
  new SynthesizeSpeechCommand({
    OutputFormat: "mp3",
    Text: "Welcome!",
    VoiceId: "Matthew",
    Engine: "neural",
  })
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;I had my app 'talking' in different accents. The British version even wanted to banter with me 😂&lt;/p&gt;

&lt;p&gt;Check out the demo here ⬇️&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/anishamalde_on-the-1st-day-of-christmas-amazon-activity-7405213870300282882-WDxd?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD4D05AQFV8wtuq33MOw%2Fthumbnail-with-play-button-overlay-high%2FB4DZsSawaqH4DM-%2F0%2F1765540564637%3Fe%3D2147483647%26v%3Dbeta%26t%3DhjlEW1y1DnMTabeeEFiqYB1IRJiUdby-iZWpKYM3Q5g" height="1544" class="m-0" width="720"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/anishamalde_on-the-1st-day-of-christmas-amazon-activity-7405213870300282882-WDxd?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            Amazon Polly Voice Generation for AI Assistants | Anisha Malde posted on the topic | LinkedIn
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 1st day of Christmas 🎄, Amazon Developer gave to me… voice generation with Polly 🎵

Okay I’ll admit it, I also yell at Alexa, but I’ll also admit her voice is oddly comforting. So when I needed a voice for my AI assistant app, I turned to Amazon Polly (➡️ https://lnkd.in/d7kNn4UR). Polly is AWS’s text-to-speech service that turns text into audio with neural voices across 30+ languages, the same underlying tech that powers Alexa’s voice. 

The setup was surprisingly simple. Polly handles all the heavy lifting, so with just a few lines of code (➡️ https://lnkd.in/dJjKDT4H), I had my app 'talking' in different accents. The British version even wanted to banter with me 😂

➕ Follow along as today is just Day 1 of our 𝟭𝟮 𝗗𝗮𝘆𝘀 𝗼𝗳 𝗔𝗺𝗮𝘇𝗼𝗻 𝗗𝗲𝘃𝗲𝗹𝗼𝗽𝗲𝗿&amp;nbsp;🎄

What would you build with Polly? Drop your ideas below 👇
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;h2&gt;
  
  
  🎵 On the 2nd day of Christmas 🎄, Amazon Developer gave to me… Kiro power🎵
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/giolaq"&gt;@giolaq&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the hashtag AI Agents world Context overload is a problem! I love how Kiro approached this issue by using &lt;a href="https://kiro.dev/docs/powers/" rel="noopener noreferrer"&gt;Kiro Powers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you might be asking, what is a Kiro Power? Think of it as Santa's list for your AI agent: it gives instant access to specialized knowledge, tools, and best practices for one technology (like multi-platform TV 📺 builds), loading it only when you need it for maximum efficiency and speed.&lt;/p&gt;

&lt;p&gt;I put this power to the test, creating one and using it to successfully extend my VegaOS TV app (built in ReactNative) to other TV platforms. It automatically managed the complex, chilly build systems, leaving us with a warm, clean React Native code.&lt;/p&gt;

&lt;p&gt;Check it out the demo &lt;a href="https://github.com/giolaq/Multi-TV-dev-power/blob/main/multi-tv-builder/POWER.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/glaquidara_ai-kiro-vegaos-activity-7405499201746513920-zM38?utm_source=social_share_send&amp;amp;amp%3Butm_medium=member_desktop_web&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD4E22AQFL_oGynennhw%2Ffeedshare-shrink_800%2FB4EZsO5NIWGYAg-%2F0%2F1765481438406%3Fe%3D2147483647%26v%3Dbeta%26t%3Dq01m0o9pymxxA-_NkBOhUVumOKpikrDU533J4d1EiTU" height="794" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/glaquidara_ai-kiro-vegaos-activity-7405499201746513920-zM38?utm_source=social_share_send&amp;amp;amp%3Butm_medium=member_desktop_web&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            #ai #kiro #vegaos #reactnative | Giovanni Laquidara
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 2nd day of Christmas 🎄, Amazon Developer gave to me… Kiro power🎵 

In the #AI Agents world Context overload is a problem!

I love how #Kiro approached this issue by using Kiro Powers https://lnkd.in/e99fDAfR

What is a Kiro Power? Think of it as Santa's list for your AI agent: it gives instant access to specialized knowledge, tools, and best practices for one technology (like multi-platform TV 📺 builds), loading it only when you need it for maximum efficiency and speed.

I put this power to the test, creating one and using it to successfully extend my #VegaOS TV app (built in #ReactNative) to other TV platforms. It automatically managed the complex, chilly build systems, leaving us with a warm, clean React Native code.

Check it out here : 👉 https://lnkd.in/eAHA3gha
Day 2 of 12 Days of Amazon Developer 🎄
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 3rd day of Christmas, Amazon Developer gave to me… 3 CLI Custom Agents 🎵
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/trag"&gt;@trag&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Every time I switch tasks, I used to re-explain my whole world to an agentic sidekick: My team structure. The acronyms. My writing style. Over and over. Blaaargggh!&lt;/p&gt;

&lt;p&gt;AWS Developers' custom agents for &lt;a href="https://kiro.dev/docs/cli/custom-agents/" rel="noopener noreferrer"&gt;Kiro CLI&lt;/a&gt; fixed that&lt;/p&gt;

&lt;p&gt;A custom agent is a JSON config that defines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which tools the agent can access&lt;/li&gt;
&lt;li&gt;What files/docs auto-load as context&lt;/li&gt;
&lt;li&gt;A custom system prompt for the persona you need&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I've set up a few for different modes:&lt;br&gt;
trag – auto-loads my teammates, work glossary, and style guide&lt;br&gt;
social-media-lead – writes channel-specific posts for LinkedIn, etc&lt;br&gt;
pair-progammer – gets me the feedback I need while coding&lt;/p&gt;

&lt;p&gt;Setup:&lt;br&gt;
&lt;code&gt;/agent generate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Swap anytime:&lt;br&gt;
&lt;code&gt;/agent swap&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now when I start a session, the agent already knows who I am and what I'm working on. No preamble. Just work.&lt;/p&gt;

&lt;p&gt;Check out the demo here ⬇️&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/ctraganos_on-the-3rd-day-of-christmas-amazon-developer-activity-7406100306327056384-wtpR/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD4D05AQEstfv1Y7HTCw%2Fthumbnail-with-play-button-overlay-high%2FB4DZsfA8gFL0DM-%2F0%2F1765751902817%3Fe%3D2147483647%26v%3Dbeta%26t%3DA1OsSCsloZ_9focHfUDKsUyoXYteB9P0sf05KfEolAc" height="1280" class="m-0" width="720"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/ctraganos_on-the-3rd-day-of-christmas-amazon-developer-activity-7406100306327056384-wtpR/?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            Amazon Developer CLI Custom Agents Simplify Workflows | Chris Traganos posted on the topic | LinkedIn
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 3rd day of Christmas, Amazon Developer gave to me… 3  CLI Custom Agents 🎵

Every time I switch tasks, I used to re-explain my whole world to an agentic sidekick: My team structure. The acronyms. My writing style. Over and over. Blaaargggh!

AWS Developers'&amp;nbsp;custom agents for Kiro CLI fixed that (➡️&amp;nbsp;https://lnkd.in/d5zhHmbj)

A custom agent is a JSON config that defines:
• Which tools the agent can access
• What files/docs auto-load as context
• A custom system prompt for the persona you need

I've set up a few for different modes:
trag&amp;nbsp;– auto-loads my teammates, work glossary, and style guide
social-media-lead&amp;nbsp;– writes channel-specific posts for LinkedIn, etc
pair-progammer&amp;nbsp;– gets me the feedback I need while coding

Setup:
`/agent generate`

Swap anytime:
`/agent swap`

Now when I start a session, the agent already knows who I am and what I'm working on. No preamble. Just work.

Follow along for more Amazon developer as today is just&amp;nbsp;Day 3 of our 12 days of Amazon Developer&amp;nbsp;🎄
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 4th day of Christmas, Amazon Developer gave to me…  Kiro CLI: &lt;a href="https://kiro.dev/cli/" rel="noopener noreferrer"&gt;https://kiro.dev/cli/&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/mosesroth"&gt;@mosesroth&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Everyone reading this has probably used an AI chatbot, but have you used one on the CLI? It’s a whole different ballgame.&lt;/p&gt;

&lt;p&gt;Using an LLM on the CLI is a lot like using Chat GPT or Claude in your browser, but instead you chat with it directly from the terminal.&lt;/p&gt;

&lt;p&gt;What’s so great about it is how convenient it is for vibe coding an app or testing one.&lt;/p&gt;

&lt;p&gt;When I was &lt;a href="https://developer.amazon.com/apps-and-games/blogs/2025/06/fireos-on-react-native-directory" rel="noopener noreferrer"&gt;testing React Native libraries on Fire OS&lt;/a&gt;, it made the process so much easier and faster. I would just give it the URL of the library and tell it to create an app and test it on a Fire device. That’s it, just one step. No need to manually create a new app, no need to download the repo myself or integrate it or copy-paste code from a browser-based LLM, and no need to set up adb or manually run the app. It took care of everything.&lt;/p&gt;

&lt;p&gt;Whether you’re a veteran vibe-coder or thinking about dipping your toes into the water for the first time, check out &lt;a href="https://kiro.dev/cli/" rel="noopener noreferrer"&gt;Kiro CLI&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/mosesroth_on-the-4th-day-of-christmas-amazon-developer-activity-7406347339054899200-E344?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fv2%2FD5622AQH0u6DPqoke7w%2Ffeedshare-shrink_1280%2FB56ZsPPowpJEAs-%2F0%2F1765487316427%3Fe%3D2147483647%26v%3Dbeta%26t%3DsS3LuVdIZ8H8bmFpUKUn4kJP_tv4qWj-par9K9wdoPs" height="342" class="m-0" width="572"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/mosesroth_on-the-4th-day-of-christmas-amazon-developer-activity-7406347339054899200-E344?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            🎵 On the 4th day of Christmas, Amazon Developer gave to me…&amp;nbsp;&amp;nbsp;Kiro CLI: https://kiro.dev/cli/

Everyone reading this has probably used an AI chatbot, but have you used one on the CLI (command-line… | Moses Roth
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 4th day of Christmas, Amazon Developer gave to me…&amp;nbsp;&amp;nbsp;Kiro CLI: https://kiro.dev/cli/

Everyone reading this has probably used an AI chatbot, but have you used one on the CLI (command-line interface)? It’s a whole different ballgame.

Using an LLM on the CLI is a lot like using Chat GPT or Claude in your browser, but instead you chat with it directly from the terminal.

What’s so great about it is how convenient it is for vibe coding an app or testing one.

When I was testing&amp;nbsp;React Native libraries on Fire OS ( https://lnkd.in/ghvNFv-K ), it made the process so much easier and faster. I would just give it the URL of the library and tell it to create an app and test it on a Fire device. That’s it, just one step. No need to manually create a new app, no need to download the repo myself or integrate it or copy-paste code from a browser-based LLM, and no need to set up adb or manually run the app. It took care of everything.

Whether you’re a veteran vibe-coder or thinking about dipping your toes into the water for the first time, check out&amp;nbsp;Kiro CLI: https://kiro.dev/cli/
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 5th day of Christmas, Amazon Developer gave to me… Amazon Bedrock 🎵
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/knmeiss"&gt;@knmeiss&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever wondered what powers the AI behind Prime Video &amp;amp; Amazon MGM Studios's personalized recaps, Ring's smart video search or Alexa+'s conversational intelligence? Meet &lt;a href="https://aws.amazon.com/bedrock/" rel="noopener noreferrer"&gt;Amazon Bedrock&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bedrock is a fully managed service that makes leading foundation models from Amazon, Anthropic, AI21 Labs, and more accessible through a single API. This allows you to build and scale generative AI applications without managing infrastructure&lt;/p&gt;

&lt;p&gt;🎬 Prime Video &amp;amp; Amazon MGM Studios uses &lt;a href="https://aws.amazon.com/blogs/media/5-ways-prime-video-improves-the-viewing-experience-with-generative-ai-on-aws/" rel="noopener noreferrer"&gt;Bedrock&lt;/a&gt; to power conversational and personalized interactions across tens of thousands of services and devices with agentic capabilities. X-Ray Recaps also uses Bedrock to understand storylines, emotions and character relationships. &lt;br&gt;
🔔 &lt;a href="%E2%9E%A1%EF%B8%8F%20https://lnkd.in/gErQRQxS"&gt;Ring uses Bedrock&lt;/a&gt; for video understanding and search, making it easier to find specific moments and identify patterns in your footage.&lt;br&gt;
🏀 &lt;a href="https://www.aboutamazon.com/news/aws/nba-aws-cloud-ai-partnership-basketball-innovation" rel="noopener noreferrer"&gt;Live Sports uses Bedrock&lt;/a&gt; to detect and capture slam dunks, three-pointers, and key plays in real-time, then generates instant highlight clips.&lt;br&gt;
🗣️ &lt;a href="https://aws.amazon.com/blogs/publicsector/strengthen-foundation-model-queries-through-amazon-bedrock-amazon-alexa-integration/" rel="noopener noreferrer"&gt;Alexa+ uses Bedrock&lt;/a&gt; to route requests to specialized models for more natural conversations.&lt;br&gt;
🛍️ &lt;a href="https://aws.amazon.com/blogs/machine-learning/how-rufus-scales-conversational-shopping-experiences-to-millions-of-amazon-customers-with-amazon-bedrock/" rel="noopener noreferrer"&gt;Rufus uses Bedrock&lt;/a&gt; to combine multiple foundation models with Amazon's product knowledge, reviews, and Q&amp;amp;A data to deliver sub-second responses to millions of shoppers. &lt;/p&gt;

&lt;p&gt;Ready to transform your AI journey? Start sleigh-ing your AI goals today with this rock-solid solution! 🪨🛷&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/kourtney-meiss_amazon-bedrock-build-genai-applications-activity-7406717460181086209-Q6X7?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD4D27AQGXDPVAtfpEPw%2Farticleshare-shrink_1280_800%2FB4DZsUXfISIsAU-%2F0%2F1765573260671%3Fe%3D2147483647%26v%3Dbeta%26t%3DaUZKdz5BFvyGqh7V67m8CC_9tUSh4Qpkr1GzWn8R8FU" height="800" class="m-0" width="1066"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/kourtney-meiss_amazon-bedrock-build-genai-applications-activity-7406717460181086209-Q6X7?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            Amazon Bedrock – Build genAI applications and agents at production scale – AWS | Kourtney M.
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 5th day of Christmas, Amazon Developer gave to me… Amazon Bedrock 🎵

Ever wondered what powers the AI behind Prime Video &amp;amp; Amazon MGM Studios's personalized recaps, Ring's smart video search or Alexa+'s conversational intelligence? Meet Amazon Bedrock (➡️ https://lnkd.in/grzc8ptt)!

Bedrock is a fully managed service that makes leading foundation models from Amazon, Anthropic, AI21 Labs, and more accessible through a single API. This allows you to build and scale generative AI applications without managing infrastructure

🎬 Prime Video &amp;amp; Amazon MGM Studios uses Bedrock (➡️https://lnkd.in/gEE_a99R) to power conversational and personalized interactions across tens of thousands of services and devices with agentic capabilities. X-Ray Recaps also uses Bedrock to understand storylines, emotions and character relationships. 
🔔 Ring uses Bedrock (➡️ https://lnkd.in/gErQRQxS) for video understanding and search, making it easier to find specific moments and identify patterns in your footage.
🏀 Live Sports uses Bedrock (➡️ https://lnkd.in/gCDDC8CW) to detect and capture slam dunks, three-pointers, and key plays in real-time, then generates instant highlight clips.
🗣️ Alexa+ uses Bedrock (➡️ https://lnkd.in/gV494Sia) to route requests to specialized models for more natural conversations.
🛍️ Rufus uses Bedrock (➡️  https://lnkd.in/gQe-eqeN) to combine multiple foundation models with Amazon's product knowledge, reviews, and Q&amp;amp;A data to deliver sub-second responses to millions of shoppers. 

Ready to transform your AI journey? Start sleigh-ing your AI goals today with this rock-solid solution! 🪨🛷

➕ Follow along as today is Day 5 of our 𝟭𝟮 𝗗𝗮𝘆𝘀 𝗼𝗳 Amazon Developer&amp;nbsp;🎄
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 6th day of Christmas 🎄, Amazon Developer gave to me… browser automation with Amazon Nova Act 🎵
&lt;/h2&gt;

&lt;p&gt;by &lt;a class="mentioned-user" href="https://dev.to/emersonsklar"&gt;@emersonsklar&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the most exciting things this year has been the shift from AI that just talks to AI that acts. &lt;a href="https://nova.amazon.com/act?tab=home" rel="noopener noreferrer"&gt;Amazon Nova Act&lt;/a&gt; certainly knocks it out of the park; it's the AI agent service turning browsers into autonomous coworkers. If you’ve ever dreamed of “set it and forget it” automation for complex UI workflows, this is your new best friend. 👇&lt;/p&gt;

&lt;p&gt;Nova Act lets developers build, deploy, and manage fleets of reliable AI agents for automating browser-based tasks at enterprise scale. And it’s trained specifically to act – not just chat – driving browsers, filling forms, and clicking buttons with &amp;gt;90% task reliability in production. Think of it as a “digital intern” for automating business processes that never gets distracted.&lt;/p&gt;

&lt;p&gt;🔧 Why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reliability at Scale: While most agentic tools struggle at ~50% accuracy, Nova Act achieves &amp;gt;90% success rates on tricky UI elements (date pickers, popups, dropdowns) thanks to reinforcement learning on 1000s of simulated web environments. &lt;/li&gt;
&lt;li&gt;Speed to Value: Go from natural-language prototype → production in hours (not months). The new Nova Act Playground lets you refine workflows visually in minutes, while the Python SDK supports advanced deployments. &lt;/li&gt;
&lt;li&gt;Native AWS Integration: Seamlessly ties into Amazon Bedrock, CloudWatch, and IAM. No “glue code” needed – just secure, scalable automation. &lt;/li&gt;
&lt;li&gt;Multi-Agent Orchestration: Pair with Strands Agents framework to coordinate complex, cross-domain workflows (e.g., QA → data extraction → API calls).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧪 See it in action: Here’s a &lt;a href="https://gist.github.com/emersonsklar/243ee1f0044bf8505ac9367d603ce967" rel="noopener noreferrer"&gt;simple script&lt;/a&gt; where Nova Act navigates to the Amazon.com website, looks for a board game, about everyone’s favorite Blue Heeler, ensures it can get here in time, and adds it to my cart!&lt;/p&gt;

&lt;p&gt;🌍 How customers are winning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/machine-learning/amazon-nova-act-sdk-preview-path-to-production-for-browser-automation-agents/" rel="noopener noreferrer"&gt;QA Testing&lt;/a&gt;: Tyler Technologies cut test-suite creation time from weeks to minutes by converting manual test plans into automated scenarios with natural language prompts&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://labs.amazon.science/blog/amazon-nova-act-service" rel="noopener noreferrer"&gt;Internal Tools&lt;/a&gt;: Amazon Leo uses Nova Act to validate 1000s of test cases across web/mobile for its upcoming satellite internet launch. &lt;/li&gt;
&lt;/ul&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/emersonsklar_amazon-nova-explore-amazons-latest-ai-activity-7407126349531971584-Grie?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc)" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD5627AQGQUfxu82KW_w%2Farticleshare-shrink_1280_800%2FB56Z6O5hy_HcAc-%2F0%2F1780513906716%3Fe%3D2147483647%26v%3Dbeta%26t%3DCwh1un8UqxKgrMSaAOklJfPmT9OD2Pmit4lF-VjhKhk" height="630" class="m-0" width="1200"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/emersonsklar_amazon-nova-explore-amazons-latest-ai-activity-7407126349531971584-Grie?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc)" rel="noopener noreferrer" class="c-link"&gt;
            Amazon Nova Act Automates Browser Tasks with 90% Reliability | Emerson Sklar posted on the topic | LinkedIn
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 6th day of Christmas 🎄, Amazon Developer gave to me… browser automation with Amazon Nova Act 🎵

One of the most exciting things this year hasn’t been another AI demo – it’s the shift from AI that just talks to AI that acts. Amazon Nova Act certainly knocks it out of the park; it's&amp;nbsp;the AI agent service turning browsers into autonomous coworkers. If you’ve ever dreamed of “set it and forget it” automation for complex UI workflows, this is your new best friend. 👇

Nova Act lets developers build, deploy, and manage&amp;nbsp;fleets of reliable AI agents&amp;nbsp;for automating browser-based tasks at enterprise scale. And it’s trained specifically to&amp;nbsp;act&amp;nbsp;– not just chat – driving browsers, filling forms, and clicking buttons with&amp;nbsp;&amp;gt;90% task reliability&amp;nbsp;in production. Think of it as a “digital intern” for automating business processes that never gets distracted.

🔧&amp;nbsp;Why this matters:
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Reliability at Scale: While most agentic tools struggle at ~50% accuracy, Nova Act achieves&amp;nbsp;&amp;gt;90% success rates&amp;nbsp;on tricky UI elements (date pickers, popups, dropdowns) thanks to reinforcement learning on 1000s of simulated web environments.&amp;nbsp;
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Speed to Value: Go from natural-language prototype → production in&amp;nbsp;hours&amp;nbsp;(not months). The new Nova Act Playground lets you refine workflows visually in minutes, while the Python SDK supports advanced deployments.&amp;nbsp;
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Native AWS Integration: Seamlessly ties into&amp;nbsp;Amazon Bedrock,&amp;nbsp;CloudWatch, and&amp;nbsp;IAM. No “glue code” needed – just secure, scalable automation.&amp;nbsp;
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Multi-Agent Orchestration: Pair with&amp;nbsp;Strands Agents&amp;nbsp;framework to coordinate complex, cross-domain workflows (e.g., QA → data extraction → API calls).

🧪&amp;nbsp;See it in action:
Christmas is coming up, and everybody needs a little help getting the last of the presents on Santa’s lists. Here’s a simple script (https://lnkd.in/g97HBuyq) where Nova Act navigates to the Amazon.com website, looks for a board game about everyone’s favorite Blue Heeler, ensures it can get here in time, and adds it to my cart

🌍&amp;nbsp;How customers are winning:
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;QA Testing: Tyler Technologies cut test-suite creation time from&amp;nbsp;weeks&amp;nbsp;to&amp;nbsp;minutes&amp;nbsp;by converting manual test plans into automated scenarios with&amp;nbsp;natural language prompts.&amp;nbsp;https://lnkd.in/g2gKxP-t
·&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Internal Tools: Amazon Leo uses Nova Act to validate 1000s of test cases across web/mobile for its upcoming satellite internet launch.&amp;nbsp; https://lnkd.in/gidrHN92


💬&amp;nbsp;Let’s Talk Automation!
What repetitive browser tasks are&amp;nbsp;you&amp;nbsp;tired of doing manually? 🤔
👇&amp;nbsp;Comment below&amp;nbsp;with your biggest automation headache – let’s brainstorm how Nova Act could solve it!

🔗&amp;nbsp;Dive deeper:&amp;nbsp;Nova Act Home https://lnkd.in/gVzN59xk

➕ Follow along as today is Day 6 of our 𝟭𝟮 𝗗𝗮𝘆𝘀 𝗼𝗳 Amazon Developer 🎄
#AWS #AI #Developers #Automation #GenAI #AmazonNova #NovaAct
&amp;nbsp;

          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 8th day of Christmas 🎄, Amazon Developer gave to me ... one prompt UI magic with Kiro ✏️ 📺 🎵
&lt;/h2&gt;

&lt;p&gt;by giolaq &lt;/p&gt;

&lt;p&gt;From idea → wireframe → UI → working app… it usually takes too many steps.&lt;/p&gt;

&lt;p&gt;I love how Kiro changes this with a single simple prompt.&lt;/p&gt;

&lt;p&gt;This time, I pushed it further:&lt;br&gt;
 👉 I gave Kiro one prompt and a simple pencil sketch…&lt;br&gt;
 👉 and asked it to turn that into a full 10-foot TV UI web app.&lt;/p&gt;

&lt;p&gt;Kiro understood the TV navigation patterns (D-pad, focus states) and the 10-foot UI guidelines with a great TV layout 📺&lt;br&gt;
And the code is available &lt;a href="https://github.com/giolaq/KiroTVOneShot" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/glaquidara_kiro-kiro-kiro-activity-7407687386437951488-Td1y?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD4E05AQF7xCa8j_VzPQ%2Fthumbnail-with-play-button-overlay-high%2FB4EZsyMMptIIDU-%2F0%2F1766073621658%3Fe%3D2147483647%26v%3Dbeta%26t%3DHDJiKK27sSxsKRmA4vE2V0nqnllHwoBoeGkMhtQgT2o" height="1280" class="m-0" width="720"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/glaquidara_kiro-kiro-kiro-activity-7407687386437951488-Td1y?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            #kiro #kiro #kiro #aiagents #tvdevelopment #ux #uidesign #10footui #amazondeveloper #buildinpublic | Giovanni Laquidara
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 𝐎𝐧 𝐭𝐡𝐞 8𝐭𝐡 𝐝𝐚𝐲 𝐨𝐟 𝐂𝐡𝐫𝐢𝐬𝐭𝐦𝐚𝐬 🎄, Amazon Developer 𝐠𝐚𝐯𝐞 𝐭𝐨 𝐦𝐞… 𝐨𝐧𝐞 𝐩𝐫𝐨𝐦𝐩𝐭 𝐔𝐈 𝐦𝐚𝐠𝐢𝐜 𝐰𝐢𝐭𝐡 #𝐊𝐢𝐫𝐨 ✏️📺 🎵

From idea → wireframe → UI → working app… it usually takes too many steps.
I love how #Kiro changes this with a single simple prompt.
This time, I pushed it further:
 👉 I gave Kiro one prompt and a simple pencil sketch…
 👉 and asked it to turn that into a full 10-foot TV UI web app.
Kiro understood the TV navigation patterns (D-pad, focus states) and the 10-foot UI guidelines with a great TV layout 📺
And the code is available here 👉 https://lnkd.in/eUFb9p5p

Follow along for more Amazon Developer as today is just Day 8 of our 12 days of Amazon Developer 🎄
#Kiro #AIAgents #TVDevelopment #UX #UIDesign #10FootUI #AmazonDeveloper #BuildInPublic
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 9th day of Christmas, Amazon Developer gave to me… AWS Lightsail! 🎵
&lt;/h2&gt;

&lt;p&gt;by trag &lt;/p&gt;

&lt;p&gt;I need a secure cloud box to run Kiro CLI, Codex, Claude Code, and batch scripts without exposing my home network. Lightsail from Amazon Web Services (AWS) was able to get me up and running in minutes for under $5/month&lt;/p&gt;

&lt;p&gt;Here's my workflow:&lt;/p&gt;

&lt;p&gt;📱 &lt;a href="https://ish.app/" rel="noopener noreferrer"&gt;iSH&lt;/a&gt; – SSH terminal for iOS&lt;br&gt;
📂 &lt;a href="https://www.textasticapp.com/" rel="noopener noreferrer"&gt;Textastic&lt;/a&gt; – secure file transfer and SSH&lt;br&gt;
☁️ Lightsail – my Ubuntu instance with an SSH alias as &lt;code&gt;tragbox&lt;/code&gt; for quick access&lt;/p&gt;

&lt;p&gt;I SSH in, run either kiro-cli / claude / codex depending on the project, and my custom agents are live from my phone. Plus, I have a few MCPs running including GitHub and Context7 for extended capabilities.&lt;/p&gt;

&lt;p&gt;My top use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull conference speaker data and build tables of mutual connections&lt;/li&gt;
&lt;li&gt;Run batch image cleanup and CSV processing when I'm away from my laptop&lt;/li&gt;
&lt;li&gt;Execute long-running scripts without tying up my local machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why Lightsail? &lt;br&gt;
I considered EC2, Fargate, and other options but all too much setup for my use case. Lightsail gave me an Ubuntu box with a straightforward console, flat monthly pricing (no surprise bills), and I can bump RAM or storage when I need it. It's firewalled away from my home network, so I'm not worried about exposing internal endpoints.&lt;/p&gt;

&lt;p&gt;It really just works - I spin up agents on demand, run what I need, and move on.&lt;/p&gt;

&lt;p&gt;Check out the demo here ⬇️&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/ctraganos_on-the-9th-day-of-christmas-amazon-developer-activity-7408342004838899713-KttX?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD5605AQH44S6-gAgxww%2Fthumbnail-with-play-button-overlay-high%2FB56Zs.3wuzKEDM-%2F0%2F1766286371456%3Fe%3D2147483647%26v%3Dbeta%26t%3DvOHKcBmK2UbRShlpH0KFAMI5FwdZp_MlyK_HICWf5U8" height="1280" class="m-0" width="720"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/ctraganos_on-the-9th-day-of-christmas-amazon-developer-activity-7408342004838899713-KttX?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            🎵 On the 9th day of Christmas, Amazon Developer gave to me… AWS Lightsail! 🎵

I need a secure cloud box to run Kiro CLI, Codex, Claude Code, and batch scripts without exposing my home network… | Chris Traganos
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 9th day of Christmas, Amazon Developer gave to me… AWS Lightsail! 🎵

I need a secure cloud box to run Kiro CLI, Codex, Claude Code, and batch scripts without exposing my home network. Lightsail from Amazon Web Services (AWS) was able to get me up and running in minutes for under $5/month

Here's my workflow:

📱 iSH (https://ish.app/) – SSH terminal for iOS
📂 Textastic (https://lnkd.in/gKee8EC5) – secure file transfer and SSH
☁️ Lightsail – my Ubuntu instance with an SSH alias as `tragbox` for quick access

I SSH in, run either kiro-cli / claude / codex depending on the project, and my custom agents are live from my phone. Plus, I have a few MCPs running including GitHub and Context7 for extended capabilities.

My top use cases:
- Pull conference speaker data and build tables of mutual connections
- Run batch image cleanup and CSV processing when I'm away from my laptop
- Execute long-running scripts without tying up my local machine

Why Lightsail? 
I considered EC2, Fargate, and other options but all too much setup for my use case. Lightsail gave me an Ubuntu box with a straightforward console, flat monthly pricing (no surprise bills), and I can bump RAM or storage when I need it. It's firewalled away from my home network, so I'm not worried about exposing internal endpoints.

It really just works - I spin up agents on demand, run what I need, and move on.

Check it out: https://lnkd.in/gqQyZ35t 

Follow along for more Amazon developer as today is just Day 9 of our 12 days of Amazon Developer 🎄
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 10th day of Christmas, Amazon Developer gave to me… Kiro specs!
&lt;/h2&gt;

&lt;p&gt;by mosesroth &lt;/p&gt;

&lt;p&gt;To paraphrase Forrest Gump, vibe coding is a like a box of chocolates, you never know what you're gonna get.&lt;/p&gt;

&lt;p&gt;Unfortunately, that’s not such a good thing. So what are you supposed to do?&lt;/p&gt;

&lt;p&gt;Meet spec-driven development with &lt;a href="https://kiro.dev/" rel="noopener noreferrer"&gt;Kiro&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With specs, when you give Kiro a prompt, instead of building the app right away, it gives you three docs: 1. requirements, 2. design, and 3. tasks. These documents list exactly what Kiro intends to do when building your app. You can then review them, confirm if the specs follow your vision, and either edit them or give Kiro a new prompt.&lt;/p&gt;

&lt;p&gt;That way your vibe coded app actually conforms to your vision.&lt;/p&gt;

&lt;p&gt;For more info, check out (Eric Fahsl’s talk)[&lt;a href="https://www.youtube.com/watch?v=ilFdh17hKic" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=ilFdh17hKic&lt;/a&gt;]&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/mosesroth_spec-driven-development-with-kirodev-by-activity-7408566549223071744-30fB?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia.licdn.com%2Fdms%2Fimage%2Fsync%2Fv2%2FD5627AQH8hbjgw-Embw%2Farticleshare-shrink_800%2FB56ZsyNF69J8AM-%2F0%2F1766073853555%3Fe%3D2147483647%26v%3Dbeta%26t%3DITCuBLgYVDsYs4lMd6Hsm6eD-ziphSZfmI7dskKIVwc" height="450" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/mosesroth_spec-driven-development-with-kirodev-by-activity-7408566549223071744-30fB?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            Spec-Driven-Development With Kiro.dev by Eric Fahsl | AI Meetup in Wrocław, September 2025 | Moses Roth
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 10th day of Christmas, Amazon Developer gave to me… Kiro specs!

To paraphrase Forrest Gump, vibe coding is a like a box of chocolates, you never know what you're gonna get.

Unfortunately, that’s not such a good thing. So what are you supposed to do?

Meet spec-driven development with Kiro:&amp;nbsp;https://kiro.dev/

With specs, when you give Kiro a prompt, instead of building the app right away, it gives you three docs: 1. requirements, 2. design, and 3. tasks. These documents list exactly what Kiro intends to do when building your app. You can then review them, confirm if the specs follow your vision, and either edit them or give Kiro a new prompt.

That way your vibe coded app actually conforms to your vision.

For more info, check out Eric Fahsl’s talk:&amp;nbsp;https://lnkd.in/gRhYubiV
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 11th day of Christmas, Amazon Developer gave to me…Checkpointing in Kiro 🎵
&lt;/h2&gt;

&lt;p&gt;by knmeiss &lt;/p&gt;

&lt;p&gt;Have you ever let an AI agent refactor your code, only to realize you want to try a different approach? &lt;a href="https://kiro.dev/blog/introducing-checkpointing/" rel="noopener noreferrer"&gt;Kiro's checkpointing feature&lt;/a&gt; lets you rewind to any point in your session with one click. &lt;/p&gt;

&lt;p&gt;✨ Automatic checkpoint markers are added to your session as Kiro modifies code.&lt;br&gt;
🔄 Easily test different approaches. If one doesn't pan out, you're one click from reverting to any point in your session to try another.&lt;br&gt;
💬 Retain your conversation context while reverting changes.&lt;br&gt;
✔️Available in both the Kiro IDE and CLI&lt;/p&gt;

&lt;p&gt;While it doesn’t replace version control, it does provide an experimentation playground while Git handles the permanent record.&lt;/p&gt;

&lt;p&gt;The real gift? The confidence to experiment without fear 🎄🎁&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/kourtney-meiss_on-the-11th-day-of-christmas-amazon-developer-activity-7409246424057499648-aOpi?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdms.licdn.com%2Fplaylist%2Fvid%2Fv2%2FD5605AQGcvlBjs3THiA%2Fthumbnail-with-play-button-overlay-high%2FB56ZsTHZV0JoDM-%2F0%2F1765552265798%3Fe%3D2147483647%26v%3Dbeta%26t%3DU7R_g-xK602AV06lNpiZ1en02pI08OzfsVQtF3dycUM" height="720" class="m-0" width="1156"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/kourtney-meiss_on-the-11th-day-of-christmas-amazon-developer-activity-7409246424057499648-aOpi?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            🎵 On the 11th day of Christmas, Amazon Developer gave to me…Checkpointing in Kiro 🎵

Have you ever let an AI agent refactor your code, only to realize you want to try a different approach? Kiro's… | Kourtney M.
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎵 On the 11th day of Christmas, Amazon Developer gave to me…Checkpointing in Kiro 🎵

Have you ever let an AI agent refactor your code, only to realize you want to try a different approach? Kiro's checkpointing feature(➡️ https://lnkd.in/gRKCxyvZ) lets you rewind to any point in your session with one click. 

✨ Automatic checkpoint markers are added to your session as Kiro modifies code.
🔄 Easily test different approaches. If one doesn't pan out, you're one click from reverting to any point in your session to try another.
💬 Retain your conversation context while reverting changes.
✔️Available in both the Kiro IDE and CLI

While it doesn’t replace version control, it does provide an experimentation playground while Git handles the permanent record.

The real gift? The confidence to experiment without fear 🎄🎁

➕ Follow along as today is Day 11 of our 𝟭𝟮 𝗗𝗮𝘆𝘀 𝗼𝗳 𝗔𝗺𝗮𝘇𝗼𝗻 𝗗𝗲𝘃𝗲𝗹𝗼𝗽𝗲𝗿&amp;nbsp;🎄
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  🎵 On the 12th day of Christmas, Amazon Developer gave to me . . . Alexa+ 🎵
&lt;/h2&gt;

&lt;p&gt;by emersonsklar&lt;/p&gt;

&lt;p&gt;If the past year has proven anything, it’s that conversational AI and voice assistants are very much back in the spotlight. Our friends in the industry have absolutely reinvigorated excitement in this space, and, candidly, their very visible rough edges have made one thing clear: this is still hard to get right. Which is exactly why I’m so excited about Alexa+.&lt;/p&gt;

&lt;p&gt;🚀 What’s different this time?&lt;br&gt;
Alexa+ represents a step-change from the original Alexa experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More natural, contextual conversations&lt;/li&gt;
&lt;li&gt;Better reasoning and follow-through, not just command → response&lt;/li&gt;
&lt;li&gt;Deeper integration across devices and services&lt;/li&gt;
&lt;li&gt;Designed to feel less like a skill invocation and more like an assistant that actually gets what you’re trying to do&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🤖 Why now?&lt;br&gt;
Let’s be honest. Many of us have had recent moments with other assistants where we thought: “Wow… this should be better than this by now.” The good news? That bar (currently lying on the floor 😅) makes it even easier to be genuinely excited about what Alexa+ brings to the table.&lt;/p&gt;

&lt;p&gt;🌟 Why developers should care&lt;br&gt;
 This isn’t just a UI refresh—it’s a rethinking of how voice, AI, and agents come together. Alexa+ opens up new possibilities for building experiences that feel more human, more useful, and more embedded in everyday life. Our developer tools aren't publicly available yet, but stay tuned - we have some extraordinary new solutions currently in private beta that make it easier than ever before to make incredibly engaging, useful, and functional experiences.&lt;/p&gt;

&lt;p&gt;I’m thrilled to see where this goes, and even more excited about what builders will create on top of it.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.linkedin.com/posts/emersonsklar_alexa-amazondeveloper-alexaplus-activity-7409753237156712448-pXvs?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fc45fy346jw096z9pbphyyhdz7" height="800" class="m-0" width="1400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.linkedin.com/posts/emersonsklar_alexa-amazondeveloper-alexaplus-activity-7409753237156712448-pXvs?utm_source=share&amp;amp;amp%3Butm_medium=member_desktop&amp;amp;amp%3Brcm=ACoAABJ7qyEBKdMAQVNhclGeXwCrJ-uZ8rlJwsc" rel="noopener noreferrer" class="c-link"&gt;
            Alexa+ Revolutionizes Conversational AI with Natural Conversations and Deeper Integration | Emerson Sklar posted on the topic | LinkedIn
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            🎄 On the 12th day of Christmas, Amazon Developer gave to me…
 ✨ #Alexa+ ✨
If the past year has proven anything, it’s that conversational AI and voice assistants are very much back in the spotlight. Our friends in the industry have absolutely reinvigorated excitement in this space, and, candidly, their very visible rough edges have made one thing clear: this is still hard to get right.
Which is exactly why I’m so excited about Alexa+.
🚀 What’s different this time?
Alexa+ represents a step-change from the original Alexa experience:
- More natural, contextual conversations
- Better reasoning and follow-through, not just command → response
- Deeper integration across devices and services
- Designed to feel less like a skill invocation and more like an assistant that actually gets what you’re trying to do
🤖 Why now?
 Let’s be honest. Many of us have had recent moments with other assistants where we thought: “Wow… this should be better than this by now.” The good news? That bar (currently lying on the floor 😅) makes it even easier to be genuinely excited about what Alexa+ brings to the table.
🌟 Why developers should care
 This isn’t just a UI refresh—it’s a rethinking of how voice, AI, and agents come together. Alexa+ opens up new possibilities for building experiences that feel more human, more useful, and more embedded in everyday life. Our developer tools aren't publicly available yet, but stay tuned - we have some extraordinary new solutions currently in private beta that make it easier than ever before to make incredibly engaging, useful, and functional experiences.
I’m thrilled to see where this goes, and even more excited about what builders will create on top of it.
🎁 Onward to Christmas (and with a cheeky little tune, generated with Alexa and Suno - https://lnkd.in/gnDvzW_m)  
#AmazonDeveloper #AlexaPlus #ConversationalAI #VoiceAI #GenerativeAI #AWSreInvent #BuiltOnAWS
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="64" height="64"&gt;
          linkedin.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;And with that we would like to leave you with a cheeky tune created by &lt;a href="https://drive.google.com/file/d/13QC5nbbZdygzfNcbqOEs5Bp3hjqyojNH/view" rel="noopener noreferrer"&gt;Alexa and Suno!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>aws</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The hidden costs in your package.json</title>
      <dc:creator>Anisha Malde</dc:creator>
      <pubDate>Fri, 11 Jul 2025 12:44:40 +0000</pubDate>
      <link>https://dev.to/amazonappdev/the-hidden-costs-in-your-pacakgejson-52jo</link>
      <guid>https://dev.to/amazonappdev/the-hidden-costs-in-your-pacakgejson-52jo</guid>
      <description>&lt;h2&gt;
  
  
  How do you choose what goes in your package.json?
&lt;/h2&gt;

&lt;p&gt;Is it based on what the team’s used before? What has the most GitHub stars? Or because some article on dev.to told you to use it? 😶&lt;/p&gt;

&lt;p&gt;As a React (Native) Developer, this was something I never really thought about until TV development forced me to. Think about the performance gap between an iPhone and a Fire Stick - devices with 1GB of RAM don’t give you room for extra library 'costs'. &lt;/p&gt;

&lt;p&gt;Why? Your library choices directly affect how fast your app feels to users because your JavaScript bundle size impacts Time to Interactive (TTI - how long it takes for the app to become fully interactive after the initial load), memory usage, and CPU usage during run time.&lt;/p&gt;

&lt;p&gt;So while an extra 100KB might feel negligible on mobile, we’re rarely &lt;em&gt;just&lt;/em&gt; building for mobile. Every library decision, gets amplified and can carry hidden ‘costs’ across the hardware spectrum our apps now have to support.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Let's take an example, a commonly suggested swap - &lt;a href="https://momentjs.com/" rel="noopener noreferrer"&gt;moment.js&lt;/a&gt; for &lt;a href="https://date-fns.org/" rel="noopener noreferrer"&gt;date-fns&lt;/a&gt;:
&lt;/h2&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.amazonaws.com%2Fuploads%2Farticles%2F0qjudxp1gb9jac38m04o.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.amazonaws.com%2Fuploads%2Farticles%2F0qjudxp1gb9jac38m04o.png" alt="headlines from dev.to" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can use &lt;a href="http://bundlephobia.com/" rel="noopener noreferrer"&gt;bundlephobia.com&lt;/a&gt; to quickly check the ‘cost’ of adding a npm library to your bundle. Upon checking, it tells us &lt;code&gt;moment.js&lt;/code&gt; clocks in at around 300KB, while &lt;code&gt;date-fns&lt;/code&gt; is a much leaner 77KB:&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.amazonaws.com%2Fuploads%2Farticles%2F1lngtbnad4hfmrzoliuu.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.amazonaws.com%2Fuploads%2Farticles%2F1lngtbnad4hfmrzoliuu.png" alt="Bundlephobia results" width="799" height="417"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay so we should definitely use &lt;code&gt;date-fns&lt;/code&gt;  right? 🧐
&lt;/h2&gt;

&lt;p&gt;Well since I no longer trust anything on the internet 👀, I did some more digging. I added each package to a clean app and then analysed the actual JS bundle using &lt;a href="https://expo.dev/blog/introducing-expo-atlas" rel="noopener noreferrer"&gt;Expo Atlas&lt;/a&gt;(you could also use react-native-bundle-analyzer) and something surprising happened. &lt;code&gt;date-fns&lt;/code&gt; showed up as the larger library:&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.amazonaws.com%2Fuploads%2Farticles%2Fubmli3zqu3hm7jkpfojj.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.amazonaws.com%2Fuploads%2Farticles%2Fubmli3zqu3hm7jkpfojj.png" alt="Expo atlast results" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait — waat?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;date-fns&lt;/code&gt; is architected as 300+ small utility files, each doing one thing. Now that’s great &lt;em&gt;if&lt;/em&gt; your bundler is properly configured for &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Tree_shaking" rel="noopener noreferrer"&gt;tree shaking&lt;/a&gt; — it can strip out unused code, and only include what you call. But for React Native developers, like me, &lt;a href="https://metrobundler.dev/" rel="noopener noreferrer"&gt;the metro bundler&lt;/a&gt; isn’t configured for tree shaking by default. Now while it is currently experimental with Expo, if you aren’t tree shaking, or your import patterns are off — &lt;/p&gt;

&lt;p&gt;&lt;code&gt;import * from 'library'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;— you end up bundling all 300 files, whether you use them or not. &lt;/p&gt;

&lt;p&gt;At this point your probably still like:&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, So?
&lt;/h2&gt;

&lt;p&gt;Its just a few extra KBs, how bad can it be? Well I decided to measure what those extra KB’s did to my app’s perceived speed. I created a simple Android app using React Native &amp;amp; Expo and rendered the date using each library. I then used our &lt;a href="https://github.com/AmazonAppDev/fireos-perf-testing" rel="noopener noreferrer"&gt;Fire-OS perf testing tool&lt;/a&gt; to see how each library would perform on my Amazon Fire Stick. The results were 😲 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Those 200KB increased our time to interaction (latency) from cold start by 3%:&lt;/strong&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Fkcbca8rd47aujrz7gddh.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.amazonaws.com%2Fuploads%2Farticles%2Fkcbca8rd47aujrz7gddh.png" alt="FOS performance testing results" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now this is just an example but this could be any library. &lt;/p&gt;

&lt;p&gt;So here’s the thing, a library might look super helpful but it always comes at a cost. And with a broad spectrum of devices, those costs hit harder. So how can we weigh up the costs? Heres a my -&lt;/p&gt;

&lt;h2&gt;
  
  
  Checklist for adding a  library
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;First, as we saw, check the actual bundle size on your target platforms&lt;/li&gt;
&lt;li&gt;Then measure the performance cost &lt;/li&gt;
&lt;li&gt;And finally consider platform quirks e.g. FlashList might work on mobile but on TV platforms it might not have the functionality to handle the the dynamic, focusable content we have to deal with.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So don’t wait for the hidden costs to sneak up on your app performance. &lt;/p&gt;

&lt;p&gt;Be deliberate. Be Critical. Every library in your &lt;code&gt;package.json&lt;/code&gt; should earn its place 🏅&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>react</category>
      <category>reactnative</category>
      <category>npm</category>
    </item>
  </channel>
</rss>
