{"id":14456,"date":"2026-09-02T22:32:42","date_gmt":"2026-09-02T17:02:42","guid":{"rendered":"https:\/\/www.scaler.com\/blog\/?p=14456"},"modified":"2026-09-02T22:33:34","modified_gmt":"2026-09-02T17:03:34","slug":"iot-skills","status":"publish","type":"post","link":"https:\/\/www.scaler.com\/blog\/iot-skills\/","title":{"rendered":"IoT Skills: The Complete Stack, and How to Actually Get Good at Each One"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">An IoT device can be working perfectly on your test bench and still run into problems once it is deployed. Imagine a device that goes offline at 3 am because its Wi-Fi radio is consuming more power than the regulator can provide. You could start by looking at the network connection, only to find that the real problem is power. A firmware bug can create a similar situation, making a device look like it has lost connectivity when the network itself is fine.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is why IoT work spans several areas at once. You need to understand the electronics and sensors, write firmware that works within the device&#8217;s hardware and power limits, handle networking and communication, send and process data through cloud services, and protect the device and the data it handles. The depth you need in each area depends on the role, so the IoT engineer skills expected from a firmware engineer will differ from those needed for an IoT cloud or security role.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a broader overview, see <a href=\"https:\/\/www.scaler.com\/blog\/what-are-technical-skills-examples-with-future-trends\/\">What Are Technical Skills? Examples with Future Trends<\/a>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"what-are-iot-skills\"><\/span><strong>What Are IoT Skills?&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">IoT skills cover the knowledge you need to build, connect, and maintain IoT devices. That can mean reading sensor data, writing firmware, communicating over a network, sending device data to a cloud service, storing and processing that data, or securing the device and its connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The exact combination depends on the kind of IoT work you want to do. A firmware role will take you deeper into embedded C\/C++, memory, power management, and hardware interfaces, while an IoT software role may involve APIs, cloud services, databases, and device management. Some roles span several of these areas, so it helps to know how the pieces you work with affect one another.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/iot-analytics.com\/number-connected-iot-devices\/\" target=\"_blank\" rel=\"noopener\">IoT Analytics<\/a> estimates that 21.1 billion connected IoT devices were in use at the end of 2025, with that number expected to reach 39 billion by 2030. You can even read the 2026 update here, but it may open only if you have a subscription.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you want to build your embedded systems foundation first, check out: <a href=\"https:\/\/www.scaler.com\/blog\/the-embedded-systems-roadmap\/\"><strong>Embedded Systems Roadmap<\/strong><\/a>.<\/p>\n\n\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Scaler Carousel<\/title>\n\n<!-- Plus Jakarta Sans Font -->\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&amp;display=swap\" rel=\"stylesheet\">\n<!-- Swiper CSS -->\n<link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\">\n\n<style>\n.scaler-carousel {\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  max-width: 900px;\n  margin: 24px auto;\n  padding: 0;\n  box-sizing: border-box;\n}\n.scaler-carousel *,\n.scaler-carousel *::before,\n.scaler-carousel *::after {\n  box-sizing: border-box;\n}\n\n\/* Header *\/\n.scaler-header {\n  text-align: center;\n  margin-bottom: 20px;\n}\n.scaler-header-title {\n  font-size: 22px;\n  font-weight: 700;\n  color: #1a1a2e;\n  margin: 0 0 6px;\n  line-height: 1.2;\n}\n.scaler-header-subtitle {\n  font-size: 14px;\n  color: #6b7280;\n  margin: 0;\n  font-weight: 500;\n}\n\n\/* Swiper *\/\n.swiper.scaler-swiper {\n  padding-bottom: 48px;\n}\n.scaler-swiper .swiper-slide {\n  height: auto;\n  display: flex;\n  align-items: stretch;\n}\n\/* Navigation arrows \u2014 styled to match the topics HorizontalScroll controls *\/\n.scaler-swiper .swiper-button-next,\n.scaler-swiper .swiper-button-prev {\n  width: 46px;\n  height: 46px;\n  border-radius: 8px;\n  background: #ffffff;\n  box-shadow: 0 8px 16px 0 rgba(50, 71, 102, 0.16);\n  top: calc(50% - 24px); \/* centre on the cards, ignoring the pagination space below *\/\n  transform: translateY(-50%);\n  margin-top: 0;\n}\n.scaler-swiper .swiper-button-prev { left: 10px; }\n.scaler-swiper .swiper-button-next { right: 10px; }\n\/* hide Swiper's default font-icon arrow and draw the topics chevron via a mask *\/\n.scaler-swiper .swiper-button-next::after,\n.scaler-swiper .swiper-button-prev::after {\n  content: \"\";\n  width: 20px;\n  height: 20px;\n  background-color: #61738e;\n  -webkit-mask: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 32 32'%3E%3Cpath d='M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z'\/%3E%3C\/svg%3E\") no-repeat center \/ contain;\n  mask: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 32 32'%3E%3Cpath d='M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z'\/%3E%3C\/svg%3E\") no-repeat center \/ contain;\n}\n.scaler-swiper .swiper-button-prev::after { transform: rotate(-90deg); }\n.scaler-swiper .swiper-button-next::after { transform: rotate(90deg); }\n.scaler-swiper .swiper-button-disabled {\n  opacity: 0.35;\n  pointer-events: none;\n}\n.scaler-swiper .swiper-pagination-bullet-active {\n  background: #255aad;\n}\n\n\/* Card *\/\n.scaler-card {\n  display: flex;\n  flex-direction: column;\n  gap: 14px;\n  width: 100%;\n  background: #ffffff;\n  border: 1px solid #e5e7eb;\n  border-radius: 16px;\n  padding: 24px;\n  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);\n  transition: box-shadow 0.2s ease;\n}\n.scaler-card:hover {\n  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.10);\n}\n\n\/* NSDC badge *\/\n.scaler-badge {\n  display: inline-flex;\n  align-items: center;\n  align-self: flex-start;\n  background: #f3f4f6;\n  color: #111827;\n  font-size: 12px;\n  font-weight: 600;\n  padding: 4px 10px;\n  border-radius: 20px;\n  white-space: nowrap;\n  letter-spacing: 0.1px;\n}\n\n\/* Top: icon + title + description *\/\n.scaler-card-top {\n  display: flex;\n  align-items: flex-start;\n  gap: 12px;\n  min-height: 100px;\n}\n.scaler-icon-wrap {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 64px;\n  height: 64px;\n  border-radius: 12px;\n  background: #f3f4f6;\n  color: #374151;\n  flex-shrink: 0;\n}\n.scaler-icon-wrap svg {\n  width: 26px;\n  height: 26px;\n}\n.scaler-card-top-content {\n  flex: 1;\n  min-width: 0;\n  display: flex;\n  flex-direction: column;\n  gap: 5px;\n}\n.scaler-title {\n  font-size: 16px;\n  font-weight: 700;\n  color: #111827;\n  margin: 0;\n  line-height: 1.35;\n}\n.scaler-desc {\n  font-size: 13px;\n  color: #6b7280;\n  margin: 0;\n  line-height: 1.45;\n}\n\n\/* Stats row *\/\n.scaler-stats {\n  display: flex;\n  border-top: 1px solid #e5e7eb;\n  border-bottom: 1px solid #e5e7eb;\n  padding: 12px 0;\n}\n.scaler-stat {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  gap: 2px;\n  flex: 1;\n  min-width: 0;\n  text-align: center;\n}\n.scaler-stat:not(:last-child) {\n  border-right: 1px solid #d1d5db;\n}\n.scaler-stat-value {\n  font-size: 14px;\n  font-weight: 700;\n  color: #111827;\n  white-space: nowrap;\n}\n.scaler-stat-label {\n  font-size: 12px;\n  color: #9ca3af;\n}\n\n\/* Company logos *\/\n.scaler-logos {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  flex-wrap: nowrap;\n}\n.scaler-company-logo {\n  height: 20px !important;\n  width: auto !important;\n  max-width: 70px;\n  object-fit: contain;\n  display: inline-block;\n}\n.scaler-logo-more {\n  font-size: 12px;\n  color: #9ca3af;\n  white-space: nowrap;\n}\n.scaler-logo-strip {\n  display: block;\n  width: 100% !important;\n  max-width: 100%;\n  min-width: 0;\n  height: auto !important;\n  object-fit: contain;\n}\n\n\/* CTA *\/\n.scaler-card-btns {\n  margin-top: auto;\n}\n.scaler-card-btns button {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 8px;\n  width: 100%;\n  padding: 12px 16px;\n  border: none;\n  border-radius: 10px;\n  background-color: #255aad;\n  color: #ffffff;\n  font-family: 'Plus Jakarta Sans', sans-serif;\n  font-size: 14px;\n  font-weight: 600;\n  cursor: pointer;\n  text-decoration: none;\n  transition: opacity 0.15s ease;\n}\n.scaler-card-btns button:hover,\n.scaler-card-btns button:focus {\n  opacity: 0.88;\n  color: #ffffff;\n}\n.scaler-card-btns button svg {\n  flex-shrink: 0;\n}\n\n@media (max-width: 1000px) {\n  .scaler-carousel { max-width: 96vw; }\n}\n<\/style>\n\n\n<div class=\"scaler-carousel\">\n  <div class=\"scaler-header\">\n    <h2 class=\"scaler-header-title\"><span class=\"ez-toc-section\" id=\"transform-your-career\"><\/span>Transform Your Career<span class=\"ez-toc-section-end\"><\/span><\/h2>\n    <p class=\"scaler-header-subtitle\">Choose from our industry-leading programs designed for career success<\/p>\n  <\/div>\n\n  <div class=\"swiper scaler-swiper\">\n    <div class=\"swiper-wrapper\">\n\n      <!-- CARD 1 -->\n      <div class=\"swiper-slide\">\n        <div class=\"scaler-card\">\n          <div class=\"scaler-badge\">NSDC Certified<\/div>\n          <div class=\"scaler-card-top\">\n            <div class=\"scaler-icon-wrap\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"16 18 22 12 16 6\"\/><polyline points=\"8 6 2 12 8 18\"\/><\/svg>\n            <\/div>\n            <div class=\"scaler-card-top-content\">\n              <h3 class=\"scaler-title\">Modern Software and AI Engineering Program<\/h3>\n              <p class=\"scaler-desc\">Master full-stack development with AI integration<\/p>\n            <\/div>\n          <\/div>\n          <div class=\"scaler-stats\">\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">12 Months<\/span><span class=\"scaler-stat-label\">Duration<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">AI-Led<\/span><span class=\"scaler-stat-label\">Curriculum<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">Career Support<\/span><span class=\"scaler-stat-label\">Support<\/span><\/div>\n          <\/div>\n          <div class=\"scaler-logos\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/2\/2f\/Google_2015_logo.svg\" alt=\"Google\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/a\/a9\/Amazon_logo.svg\" alt=\"Amazon\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/4\/42\/Paytm_logo.png\" alt=\"Paytm\" loading=\"lazy\">\n            <span class=\"scaler-logo-more\">+1000 more<\/span>\n          <\/div>\n          <div class=\"scaler-card-btns\">\n            <button onclick=\"window.open('https:\/\/www.scaler.com\/academy\/', '_blank')\">\n              Go to Program\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- CARD 2 -->\n      <div class=\"swiper-slide\">\n        <div class=\"scaler-card\">\n          <div class=\"scaler-badge\">NSDC Certified<\/div>\n          <div class=\"scaler-card-top\">\n            <div class=\"scaler-icon-wrap\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"\/><path d=\"M3 5v14c0 1.66 4.03 3 9 3s9-1.34 9-3V5\"\/><path d=\"M3 12c0 1.66 4.03 3 9 3s9-1.34 9-3\"\/><\/svg>\n            <\/div>\n            <div class=\"scaler-card-top-content\">\n              <h3 class=\"scaler-title\">Modern Data Science and ML with specialisation in AI<\/h3>\n              <p class=\"scaler-desc\">Advanced data science techniques with AI specialization<\/p>\n            <\/div>\n          <\/div>\n          <div class=\"scaler-stats\">\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">12 Months<\/span><span class=\"scaler-stat-label\">Duration<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">AI-Led<\/span><span class=\"scaler-stat-label\">Curriculum<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">Career Support<\/span><span class=\"scaler-stat-label\">Support<\/span><\/div>\n          <\/div>\n          <div class=\"scaler-logos\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/2\/2f\/Google_2015_logo.svg\" alt=\"Google\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/a\/a9\/Amazon_logo.svg\" alt=\"Amazon\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/4\/42\/Paytm_logo.png\" alt=\"Paytm\" loading=\"lazy\">\n            <span class=\"scaler-logo-more\">+1000 more<\/span>\n          <\/div>\n          <div class=\"scaler-card-btns\">\n            <button onclick=\"window.open('https:\/\/www.scaler.com\/data-science-course\/', '_blank')\">\n              Go to Program\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- CARD 3 -->\n      <div class=\"swiper-slide\">\n        <div class=\"scaler-card\">\n          <div class=\"scaler-badge\">NSDC Certified<\/div>\n          <div class=\"scaler-card-top\">\n            <div class=\"scaler-icon-wrap\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2L13.5 8.5L20 10L13.5 11.5L12 18L10.5 11.5L4 10L10.5 8.5L12 2Z\"\/><\/svg>\n            <\/div>\n            <div class=\"scaler-card-top-content\">\n              <h3 class=\"scaler-title\">Advanced AIML with Specialisation in Agentic AI<\/h3>\n              <p class=\"scaler-desc\">Deep dive into AIML with focus on Agentic systems<\/p>\n            <\/div>\n          <\/div>\n          <div class=\"scaler-stats\">\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">12 Months<\/span><span class=\"scaler-stat-label\">Duration<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">AI-Led<\/span><span class=\"scaler-stat-label\">Curriculum<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">Career Support<\/span><span class=\"scaler-stat-label\">Support<\/span><\/div>\n          <\/div>\n          <div class=\"scaler-logos\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/2\/2f\/Google_2015_logo.svg\" alt=\"Google\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/a\/a9\/Amazon_logo.svg\" alt=\"Amazon\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/4\/42\/Paytm_logo.png\" alt=\"Paytm\" loading=\"lazy\">\n            <span class=\"scaler-logo-more\">+1000 more<\/span>\n          <\/div>\n          <div class=\"scaler-card-btns\">\n            <button onclick=\"window.open('https:\/\/www.scaler.com\/ai-machine-learning-course\/', '_blank')\">\n              Go to Program\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- CARD 4 -->\n      <div class=\"swiper-slide\">\n        <div class=\"scaler-card\">\n          <div class=\"scaler-badge\">NSDC Certified<\/div>\n          <div class=\"scaler-card-top\">\n            <div class=\"scaler-icon-wrap\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <path d=\"M17.5 19H9a7 7 0 1 1 6.71-9h1.79a4.5 4.5 0 1 1 0 9Z\" \/>\n                <path d=\"M9.2 15.2a3 3 0 1 0 4.24-4.24\" \/>\n              <\/svg>\n            <\/div>\n            <div class=\"scaler-card-top-content\">\n              <h3 class=\"scaler-title\">DevOps, Cloud &#038; AI Platform Engineering<\/h3>\n              <p class=\"scaler-desc\">Build and manage AI-powered cloud infrastructure<\/p>\n            <\/div>\n          <\/div>\n          <div class=\"scaler-stats\">\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">12 Months<\/span><span class=\"scaler-stat-label\">Duration<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">AI-Led<\/span><span class=\"scaler-stat-label\">Curriculum<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">Career Support<\/span><span class=\"scaler-stat-label\">Support<\/span><\/div>\n          <\/div>\n          <div class=\"scaler-logos\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/2\/2f\/Google_2015_logo.svg\" alt=\"Google\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/a\/a9\/Amazon_logo.svg\" alt=\"Amazon\" loading=\"lazy\">\n            <img decoding=\"async\" class=\"scaler-company-logo\" src=\"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/4\/42\/Paytm_logo.png\" alt=\"Paytm\" loading=\"lazy\">\n            <span class=\"scaler-logo-more\">+1000 more<\/span>\n          <\/div>\n          <div class=\"scaler-card-btns\">\n            <button onclick=\"window.open('https:\/\/www.scaler.com\/devops-course\/', '_blank')\">\n              Go to Program\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- CARD 5 -->\n      <div class=\"swiper-slide\">\n        <div class=\"scaler-card\">\n          <div class=\"scaler-badge\">NSDC Certified<\/div>\n          <div class=\"scaler-card-top\">\n            <div class=\"scaler-icon-wrap\">\n              <svg width=\"26\" height=\"26\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n                <line x1=\"3\" y1=\"22\" x2=\"21\" y2=\"22\" \/>\n                <line x1=\"6\" y1=\"18\" x2=\"6\" y2=\"11\" \/>\n                <line x1=\"10\" y1=\"18\" x2=\"10\" y2=\"11\" \/>\n                <line x1=\"14\" y1=\"18\" x2=\"14\" y2=\"11\" \/>\n                <line x1=\"18\" y1=\"18\" x2=\"18\" y2=\"11\" \/>\n                <polygon points=\"12 2 20 7 4 7\" \/>\n              <\/svg>\n            <\/div>\n            <div class=\"scaler-card-top-content\">\n              <h3 class=\"scaler-title\">AI Engineering Advanced Certification by IIT-Roorkee<\/h3>\n              <p class=\"scaler-desc\">Premier AI engineering certification from IIT-Roorkee<\/p>\n            <\/div>\n          <\/div>\n          <div class=\"scaler-stats\">\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">3 Months<\/span><span class=\"scaler-stat-label\">Duration<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">AI-Led<\/span><span class=\"scaler-stat-label\">Curriculum<\/span><\/div>\n            <div class=\"scaler-stat\"><span class=\"scaler-stat-value\">Career Support<\/span><span class=\"scaler-stat-label\">Support<\/span><\/div>\n          <\/div>\n          <div class=\"scaler-logos\">\n            <img decoding=\"async\" class=\"scaler-logo-strip\" src=\"https:\/\/scaler-blog-prod-wp-content.s3.ap-south-1.amazonaws.com\/wp-content\/uploads\/2026\/07\/08135139\/iitr-icons-strip.png\" alt=\"Program highlights\" loading=\"lazy\">\n          <\/div>\n          <div class=\"scaler-card-btns\">\n            <button onclick=\"window.open('https:\/\/www.scaler.com\/iit-roorkee-advanced-ai-engineering-course\/', '_blank')\">\n              Go to Program\n              <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\"><path d=\"M3 8H13M13 8L9 4M13 8L9 12\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n            <\/button>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <!-- Continue for remaining cards (6\u20138) using same pattern -->\n\n    <\/div>\n    <div class=\"swiper-button-next\"><\/div>\n    <div class=\"swiper-button-prev\"><\/div>\n    <div class=\"swiper-pagination\"><\/div>\n  <\/div>\n<\/div>\n\n<!-- Swiper.js -->\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  const pathParts = window.location.pathname.split(\"\/\").filter(Boolean);\n  const slug = pathParts[pathParts.length - 1] || \"\";\n  const readableSlug = encodeURIComponent(slug);\n  const buttons = document.querySelectorAll(\".scaler-card-btns button\");\n\n  buttons.forEach((btn) => {\n    const baseURL = btn.getAttribute(\"onclick\").match(\/'(.*?)'\/)[1];\n    if (!baseURL.includes(\"utm_source=\")) {\n      const separator = baseURL.includes(\"?\") ? \"&\" : \"?\";\n      const updatedURL = `${baseURL}${separator}utm_source=blog&utm_medium=program_carousel&utm_content=${readableSlug}`;\n      btn.setAttribute(\"onclick\", `window.open('${updatedURL}', '_blank')`);\n    }\n  });\n\n  new Swiper(\".scaler-swiper\", {\n    slidesPerView: 1,\n    spaceBetween: 28,\n    grabCursor: true,\n    navigation: { nextEl: \".swiper-button-next\", prevEl: \".swiper-button-prev\" },\n    pagination: { el: \".swiper-pagination\", dynamicBullets: true, clickable: true },\n    breakpoints: { 1000: { slidesPerView: 2 } },\n    keyboard: { enabled: true },\n  });\n});\n<\/script>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>IoT vs Embedded Systems vs Backend: Where the Lines Are<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s important to understand the difference between embedded, IoT, and backend roles, since the skills and responsibilities can overlap. Here\u2019s a quick comparison to make the differences easier to see:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Role<\/strong><\/td><td><strong>Primary responsibilities<\/strong><\/td><td><strong>Key engineering priorities<\/strong><\/td><td><strong>Common production issues<\/strong><\/td><\/tr><tr><td>Embedded engineer<\/td><td>Firmware, hardware interfaces and device behaviour<\/td><td>Power, memory, timing and hardware reliability<\/td><td>Device crashes, brownouts or sensor failures<\/td><\/tr><tr><td>IoT engineer<\/td><td>Device-to-cloud communication and the system connecting both sides<\/td><td>Reliability, connectivity, telemetry and end-to-end behaviour<\/td><td>Devices go offline, messages disappear, or data stops flowing<\/td><\/tr><tr><td>Backend engineer<\/td><td>APIs, services, databases and cloud-side processing<\/td><td>Throughput, latency, availability and data integrity<\/td><td>API failures, queue backlogs or database problems<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">These roles can share some of the same skills, but an IoT engineer may need to work across several parts of the system. We\u2019ll now look at those skills individually, from the electronics at the device level to the software and intelligence running closer to the edge.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"the-iot-skills-map-%e2%80%93-seven-tiers-from-sensors-to-edge-ai\"><\/span><strong>The IoT Skills Map &#8211; Seven Tiers From Sensors to Edge AI<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The seven tiers below cover the main areas you can build as you progress through IoT development. Each tier includes the skills involved, why they matter in an IoT role, what you can build or demonstrate to show them, and where to learn more.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Skill<\/strong><\/td><td><strong>Why employers screen for it<\/strong><\/td><td><strong>How to evidence it<\/strong><\/td><td><strong>Where to learn it<\/strong><\/td><\/tr><tr><td><strong>Tier 1: Electronics fundamentals<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>Sensors, GPIO, ADC\/PWM, power<\/td><td>Tests whether you can make hardware behave reliably.<\/td><td>Show a calibration curve, wiring diagram, and measured power budget.<\/td><td>MCU and component documentation.<\/td><\/tr><tr><td><strong>Tier 2: Embedded programming<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>C\/C++, MicroPython, RTOS, memory<\/td><td>Tests whether you can write firmware within device constraints.<\/td><td>Show firmware, memory usage, and a debugging trace.<\/td><td>MCU and RTOS documentation.<\/td><\/tr><tr><td><strong>Tier 3: Connectivity and protocols<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>MQTT, HTTP, BLE, LoRaWAN, cellular, Thread\/Matter<\/td><td>Tests whether you can choose and troubleshoot device connectivity.<\/td><td>Show protocol traces and document the connectivity choice.<\/td><td>Official protocol documentation.<\/td><\/tr><tr><td><strong>Tier 4: Platforms and cloud<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>AWS IoT, Azure IoT, ThingsBoard, edge gateways<\/td><td>Tests whether you can connect devices to a managed platform.<\/td><td>Show device provisioning, telemetry flow and gateway configuration.<\/td><td>Official platform documentation.<\/td><\/tr><tr><td><strong>Tier 5: Data<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>Telemetry, time-series data, edge vs cloud<\/td><td>Tests whether you can handle data volume and retention.<\/td><td>Show the pipeline, retention policy, and dashboard.<\/td><td>Cloud and database documentation.<\/td><\/tr><tr><td><strong>Tier 6: Security<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>Device identity, TLS\/DTLS, secure boot, OTA<\/td><td>Tests whether deployed devices can be secured and maintained.<\/td><td>Show per-device certificates, signed firmware, and an OTA rollback test.<\/td><td>Official security and vendor documentation.<\/td><\/tr><tr><td><strong>Tier 7: Emerging<\/strong><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>Edge AI\/TinyML, digital twins<\/td><td>Tests whether you can extend an IoT system beyond basic telemetry.<\/td><td>Show model size, RAM usage, and inference results or a working digital twin.<\/td><td>Official ML and platform documentation.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Electronics Fundamentals<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Software-heavy IoT projects can still run into hardware issues that require you to understand the electronics involved. A sensor does not hand your firmware a perfectly clean number, and an actuator does not draw whatever current your code assumes it will.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some common issues in IoT projects are logic-level mismatches, insufficient current, missing pull-up resistors, and missing flyback protection on inductive loads. ADC readings also depend on the reference and supply conditions, so a value that looks stable over USB can change completely on battery power.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We\u2019ve seen readings look fine while the board was connected to USB, and then end up changing significantly due to unexpected errors when the device was running on battery. In cases like this, the voltage sag can change the ADC reference, making it important to measure the supply before assuming there is a problem with the firmware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can also use a \u20b9500 multimeter to check the supply voltage and current draw while troubleshooting hardware problems.<\/p>\n\n\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n    <!-- Source Sans Pro (topics font) -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+3:wght@400;600;700&#038;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\">\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n\n    <style>\n      :root {\n        \/* topics design tokens (variables.scss) *\/\n        --scaler-primary: #005bb3;          \/* primary-color-80 *\/\n        --scaler-primary-30: #8acaff;       \/* primary-color-30 *\/\n        --scaler-brand-blue: #255aad;\n        --scaler-live: #ee001d;             \/* accent-v5-60 *\/\n        --scaler-live-bg: #ffe6e9;          \/* accent-v5-10 *\/\n        --scaler-card-bg: #ffffff;          \/* neutral-scale-0 *\/\n        --scaler-surface: #f4f6f9;          \/* neutral-scale-2 *\/\n        --scaler-text-primary: #1a2c47;     \/* neutral-scale-12 *\/\n        --scaler-text-secondary: #61738e;   \/* neutral-scale-9 *\/\n        --scaler-border: #d6dee5;           \/* neutral-scale-4 *\/\n        --scaler-radius: 16px;\n        --scaler-radius-sm: 8px;\n        --scaler-shadow: 0 8px 16px 0 rgba(50, 71, 102, 0.16);\n      }\n\n      .scaler-events-carousel * { box-sizing: border-box; }\n\n      .scaler-events-carousel {\n        font-family: \"Source Sans 3\", \"Source Sans Pro\", \"Roboto\", Arial, sans-serif;\n        padding: 24px;\n        position: relative;\n        width: 100%;\n      }\n      .scaler-events-carousel__inner {\n        max-width: 1000px;\n        margin: 0 auto;\n        position: relative;\n        width: 100%;\n      }\n\n      \/* Header \u2014 calendar icon + \"Live Masterclasses\" *\/\n      .scaler-events-header {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        margin-bottom: 8px;\n        padding: 8px 0;\n      }\n      .scaler-events-header__icon { display: inline-flex; color: var(--scaler-text-primary); }\n      .scaler-events-header__icon svg { width: 24px; height: 24px; }\n      .scaler-events-header__title {\n        font-size: 18px;\n        font-weight: 700;\n        color: var(--scaler-text-primary);\n        line-height: 1.3;\n        margin: 0;\n      }\n\n      \/* Swiper wrap (holds side arrows) *\/\n      .scaler-events-swiper-wrap { position: relative; }\n      .scaler-events-carousel .swiper { width: 100%; padding: 4px; }\n      .scaler-event-swiper .swiper-slide {\n        width: 296px;          \/* topics card_container width *\/\n        height: auto;\n        display: flex;\n      }\n\n      \/* Event Card \u2014 matches topics EventCard *\/\n      .scaler-event-card {\n        background: var(--scaler-card-bg);\n        border: 1px solid var(--scaler-border);\n        border-radius: var(--scaler-radius);\n        padding: 16px;\n        display: flex;\n        flex-direction: column;\n        height: 100%;\n        width: 100%;\n        cursor: pointer;\n      }\n\n      \/* Header row: headshot + title\/name *\/\n      .scaler-event-card__header { display: flex; align-items: flex-start; }\n      .scaler-event-card__image-wrapper {\n        position: relative;\n        width: 88px;\n        height: 88px;\n        min-width: 88px;\n        border-radius: var(--scaler-radius-sm);\n        overflow: hidden;\n        background: var(--scaler-primary-30);\n      }\n      .scaler-event-card__image {\n        position: absolute;\n        top: 0; left: 0;\n        width: 100%; height: 100%;\n        object-fit: cover;\n      }\n      \/* attendee-count footer (default) *\/\n      .scaler-event-card__img-footer {\n        position: absolute;\n        left: 0; right: 0; bottom: 0;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 4px;\n        padding: 1px 8px;\n        background: var(--scaler-surface);\n        color: var(--scaler-text-primary);\n        font-size: 13px;\n        line-height: 22px;\n      }\n      .scaler-event-card__img-footer svg { width: 14px; height: 14px; }\n      \/* live chip (shown when status === current) *\/\n      .scaler-event-card__live-badge {\n        position: absolute;\n        left: 0; right: 0; bottom: 0;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 5px;\n        padding: 1px 8px;\n        background: var(--scaler-live-bg);\n        color: var(--scaler-live);\n        font-size: 12px;\n        line-height: 22px;\n        text-transform: uppercase;\n        letter-spacing: 0.18em;\n      }\n      .scaler-event-card__live-badge::before {\n        content: \"\";\n        width: 6px; height: 6px;\n        background: var(--scaler-live);\n        border-radius: 50%;\n      }\n      .scaler-event-card__text { margin-left: 16px; min-width: 0; }\n      .scaler-event-card__title {\n        font-size: 20px;\n        font-weight: 600;\n        color: var(--scaler-text-primary);\n        margin: 0;\n        line-height: 1.4;\n        display: -webkit-box;\n        -webkit-line-clamp: 2;\n        -webkit-box-orient: vertical;\n        overflow: hidden;\n      }\n      .scaler-event-card__speaker {\n        margin-top: 8px;\n        font-size: 14px;\n        line-height: 1.4;\n        color: var(--scaler-text-primary);\n      }\n\n      \/* Takeaways *\/\n      .scaler-event-card__takeaways {\n        margin-top: 12px;\n        min-height: 50px;\n        max-height: 50px;\n        overflow: hidden;\n      }\n      .scaler-event-card__takeaway-item {\n        display: flex;\n        align-items: flex-start;\n        gap: 6px;\n      }\n      .scaler-event-card__dot {\n        width: 4px; height: 4px;\n        min-width: 4px;\n        border-radius: 50%;\n        background: var(--scaler-text-secondary);\n        margin-top: 11px;\n      }\n      .scaler-event-card__takeaway-text {\n        flex: 1;\n        min-width: 0;\n        font-size: 14px;\n        line-height: 24px;\n        color: var(--scaler-text-primary);\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n      .scaler-event-card__knowmore,\n      .scaler-event-card__knowmore:link,\n      .scaler-event-card__knowmore:visited {\n        flex-shrink: 0;\n        font-size: 14px;\n        line-height: 24px;\n        color: var(--scaler-primary) !important;\n        text-decoration: none;\n        white-space: nowrap;\n      }\n      .scaler-event-card__knowmore:hover { text-decoration: underline; }\n\n      \/* Date + duration *\/\n      .scaler-event-card__meta {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        margin-top: 20px;\n        font-size: 13px;\n        line-height: 24px;\n        color: var(--scaler-text-primary);\n      }\n      .scaler-event-card__duration {\n        display: flex;\n        align-items: center;\n        gap: 4px;\n      }\n      .scaler-event-card__duration svg { width: 15px; height: 15px; }\n\n      .scaler-event-card__spacer { flex-grow: 1; min-height: 4px; }\n\n      \/* CTA \u2014 outlined \"Register with 1-Click\" *\/\n      .scaler-event-card__cta,\n      .scaler-event-card__cta:link,\n      .scaler-event-card__cta:visited {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        width: 100%;\n        margin-top: 16px;\n        padding: 8px;\n        background: transparent;\n        color: var(--scaler-primary) !important;\n        font-family: inherit;\n        font-size: 14px;\n        font-weight: 600;\n        line-height: 24px;\n        text-decoration: none;\n        border: 1px solid var(--scaler-primary);\n        border-radius: var(--scaler-radius-sm);\n        cursor: pointer;\n        transition: background 0.2s ease, color 0.2s ease;\n      }\n      .scaler-event-card__cta:hover,\n      .scaler-event-card__cta:focus {\n        background: var(--scaler-primary);\n        color: #fff !important;\n      }\n\n      \/* Side navigation arrows *\/\n      .scaler-events-nav__btn {\n        position: absolute !important;\n        top: 50% !important;\n        transform: translateY(-50%) !important;\n        z-index: 2;\n        width: 46px !important;\n        height: 46px !important;\n        min-width: 46px;\n        display: flex !important;\n        align-items: center;\n        justify-content: center;\n        padding: 0 !important;\n        background: var(--scaler-card-bg) !important;\n        border: none !important;\n        border-radius: var(--scaler-radius-sm) !important;\n        box-shadow: var(--scaler-shadow) !important;\n        color: var(--scaler-text-secondary) !important;\n        cursor: pointer;\n        transition: opacity 0.2s ease, visibility 0.2s ease;\n      }\n      .scaler-nav-prev { left: 8px !important; }\n      .scaler-nav-next { right: 8px !important; }\n      .scaler-events-nav__btn svg {\n        width: 20px !important;\n        height: 20px !important;\n        fill: var(--scaler-text-secondary) !important;\n      }\n      .scaler-events-nav__btn.swiper-button-disabled {\n        opacity: 0;\n        visibility: hidden;\n        pointer-events: none;\n      }\n\n      \/* View All Events *\/\n      .scaler-events-viewall,\n      .scaler-events-viewall:link,\n      .scaler-events-viewall:visited {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 6px;\n        margin-top: 12px;\n        font-size: 14px;\n        font-weight: 600;\n        color: var(--scaler-brand-blue) !important;\n        text-decoration: none;\n      }\n      .scaler-events-viewall:hover { text-decoration: underline; }\n      .scaler-events-viewall svg { width: 16px; height: 16px; fill: var(--scaler-brand-blue); }\n\n      \/* hide swiper defaults *\/\n      .scaler-events-pagination { display: none; }\n      .scaler-events-carousel .swiper-button-prev,\n      .scaler-events-carousel .swiper-button-next { display: none; }\n\n      \/* Skeleton & Empty States *\/\n      .scaler-event-card--skeleton { pointer-events: none; }\n      .scaler-event-card--skeleton .scaler-event-card__image-wrapper,\n      .scaler-event-card--skeleton .scaler-event-card__title,\n      .scaler-event-card--skeleton .scaler-event-card__speaker,\n      .scaler-event-card--skeleton .scaler-event-card__takeaways,\n      .scaler-event-card--skeleton .scaler-event-card__meta,\n      .scaler-event-card--skeleton .scaler-event-card__cta {\n        background: linear-gradient(90deg, var(--scaler-border) 25%, var(--scaler-surface) 50%, var(--scaler-border) 75%);\n        background-size: 200% 100%;\n        animation: shimmer 1.5s infinite;\n        color: transparent !important;\n        border-color: transparent !important;\n        border-radius: 4px;\n      }\n      .scaler-event-card--skeleton .scaler-event-card__title { min-height: 44px; }\n      .scaler-event-card--skeleton .scaler-event-card__speaker { min-height: 16px; }\n      .scaler-event-card--skeleton .scaler-event-card__meta { min-height: 24px; }\n      .scaler-event-card--skeleton .scaler-event-card__cta { min-height: 40px; }\n      .scaler-event-card--skeleton .scaler-event-card__image,\n      .scaler-event-card--skeleton .scaler-event-card__img-footer,\n      .scaler-event-card--skeleton .scaler-event-card__live-badge { display: none; }\n\n      @keyframes shimmer {\n        0% { background-position: 200% 0; }\n        100% { background-position: -200% 0; }\n      }\n\n      .scaler-events-empty {\n        text-align: center;\n        padding: 40px 20px;\n        color: var(--scaler-text-secondary);\n        font-size: 15px;\n      }\n\n      @media (max-width: 768px) {\n        .scaler-events-carousel { padding: 16px; }\n        .scaler-event-swiper .swiper-slide { width: calc(100vw - 52px); }\n        .scaler-events-nav__btn { display: none; }\n      }\n    <\/style>\n\n\n\n    <div class=\"scaler-events-carousel js-scaler-carousel\">\n\n      <template class=\"js-event-card-template\">\n        <div class=\"swiper-slide\">\n          <article class=\"scaler-event-card\">\n            <div class=\"scaler-event-card__header\">\n              <div class=\"scaler-event-card__image-wrapper\">\n                <img decoding=\"async\" src=\"\" alt=\"\" class=\"scaler-event-card__image\" loading=\"lazy\">\n                <div class=\"scaler-event-card__img-footer\">\n                  <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M11.199 7.957c-3.086 0-5.588 2.502-5.588 5.588s2.502 5.588 5.588 5.588c3.086 0 5.588-2.502 5.588-5.588s-2.502-5.588-5.588-5.588zM3.611 13.545c0-4.191 3.397-7.588 7.588-7.588s7.588 3.397 7.588 7.588c0 4.191-3.397 7.588-7.588 7.588s-7.588-3.397-7.588-7.588z\"\/><path d=\"M21.090 6.369h0.003c1.989 0 3.897 0.79 5.303 2.197s2.197 3.314 2.197 5.303-0.79 3.897-2.197 5.303c-1.406 1.407-3.314 2.197-5.303 2.197-0.552 0-1-0.448-1-1s0.448-1 1-1c1.459 0 2.858-0.579 3.889-1.611s1.611-2.43 1.611-3.889c0-1.459-0.58-2.858-1.611-3.889s-2.429-1.611-3.888-1.611c-0.507 0.002-1.013 0.070-1.502 0.203-0.533 0.145-1.082-0.17-1.227-0.703s0.17-1.082 0.703-1.227c0.659-0.179 1.339-0.27 2.021-0.272z\"\/><path d=\"M10.906 21.364c-1.605 0-3.186 0.386-4.61 1.126s-2.649 1.811-3.572 3.124c-0.318 0.452-0.941 0.561-1.393 0.243s-0.561-0.941-0.243-1.393c1.107-1.576 2.577-2.862 4.286-3.749s3.606-1.351 5.532-1.351 3.823 0.463 5.532 1.351c1.709 0.888 3.179 2.174 4.286 3.749 0.318 0.452 0.209 1.076-0.243 1.393s-1.076 0.209-1.393-0.243c-0.923-1.313-2.148-2.385-3.572-3.124s-3.005-1.126-4.61-1.126z\"\/><\/svg>\n                  <span class=\"js-event-count\"><\/span>\n                <\/div>\n                <div class=\"scaler-event-card__live-badge\" style=\"display: none;\">Live<\/div>\n              <\/div>\n              <div class=\"scaler-event-card__text\">\n                <h3 class=\"scaler-event-card__title\"><\/h3>\n                <div class=\"scaler-event-card__speaker js-event-speaker\"><\/div>\n              <\/div>\n            <\/div>\n\n            <div class=\"scaler-event-card__takeaways js-event-takeaways\"><\/div>\n\n            <div class=\"scaler-event-card__spacer\"><\/div>\n\n            <div class=\"scaler-event-card__meta\">\n              <span class=\"js-event-date\"><\/span>\n              <span class=\"scaler-event-card__duration\">\n                <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M16 6.333c6.443 0 11.667 5.223 11.667 11.667s-5.223 11.667-11.667 11.667c-6.443 0-11.667-5.223-11.667-11.667v0c0.008-6.44 5.226-11.659 11.666-11.667h0.001zM16 28.333c5.707 0 10.333-4.626 10.333-10.333s-4.626-10.333-10.333-10.333c-5.707 0-10.333 4.626-10.333 10.333v0c0.007 5.704 4.629 10.326 10.333 10.333h0.001z\"\/><path d=\"M16 18.667c-0 0-0.001 0-0.001 0-0.184 0-0.35-0.074-0.471-0.195v0c-0.121-0.121-0.195-0.287-0.195-0.471s0.075-0.351 0.195-0.471l4.951-4.952c0.121-0.121 0.287-0.195 0.471-0.195s0.351 0.075 0.471 0.195v0c0.121 0.121 0.195 0.287 0.195 0.471s-0.075 0.351-0.195 0.471l-4.949 4.951c-0.121 0.121-0.288 0.196-0.472 0.196v0z\"\/><path d=\"M19 3.667h-6c-0.368 0-0.667-0.298-0.667-0.667v0c0-0.368 0.298-0.667 0.667-0.667v0h6c0.368 0 0.667 0.298 0.667 0.667v0c0 0.368-0.298 0.667-0.667 0.667v0z\"\/><\/svg>\n                <span class=\"js-event-duration\"><\/span>\n              <\/span>\n            <\/div>\n\n            <a href=\"#\" class=\"scaler-event-card__cta js-event-cta\">Register with 1-Click<\/a>\n          <\/article>\n        <\/div>\n      <\/template>\n\n      <div class=\"scaler-events-carousel__inner\">\n        <header class=\"scaler-events-header\">\n          <span class=\"scaler-events-header__icon\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 33 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M6.406 6.8c-0.11 0-0.2 0.090-0.2 0.2v20c0 0.11 0.090 0.2 0.2 0.2h20c0.11 0 0.2-0.090 0.2-0.2v-20c0-0.11-0.090-0.2-0.2-0.2h-20zM4.606 7c0-0.994 0.806-1.8 1.8-1.8h20c0.994 0 1.8 0.806 1.8 1.8v20c0 0.994-0.806 1.8-1.8 1.8h-20c-0.994 0-1.8-0.806-1.8-1.8v-20z\"\/><path d=\"M22.406 3.2c0.442 0 0.8 0.358 0.8 0.8v4c0 0.442-0.358 0.8-0.8 0.8s-0.8-0.358-0.8-0.8v-4c0-0.442 0.358-0.8 0.8-0.8z\"\/><path d=\"M10.406 3.2c0.442 0 0.8 0.358 0.8 0.8v4c0 0.442-0.358 0.8-0.8 0.8s-0.8-0.358-0.8-0.8v-4c0-0.442 0.358-0.8 0.8-0.8z\"\/><path d=\"M4.606 12c0-0.442 0.358-0.8 0.8-0.8h22c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-22c-0.442 0-0.8-0.358-0.8-0.8z\"\/><path d=\"M21.488 16.451c0.303 0.322 0.288 0.828-0.034 1.131l-5.838 5.5c-0.309 0.291-0.791 0.29-1.099-0.002l-3.162-3c-0.321-0.304-0.334-0.81-0.030-1.131s0.81-0.334 1.131-0.030l2.614 2.48 5.287-4.981c0.322-0.303 0.828-0.288 1.131 0.034z\"\/><\/svg>\n          <\/span>\n          <h2 class=\"scaler-events-header__title\"><span class=\"ez-toc-section\" id=\"live-masterclasses\"><\/span>Live Masterclasses<span class=\"ez-toc-section-end\"><\/span><\/h2>\n        <\/header>\n\n        <div class=\"scaler-events-swiper-wrap\">\n          <div class=\"swiper scaler-event-swiper\">\n            <div class=\"swiper-wrapper scaler-events-wrapper\"><\/div>\n            <div class=\"swiper-pagination scaler-events-pagination\"><\/div>\n          <\/div>\n\n          <button class=\"scaler-events-nav__btn scaler-nav-prev\" aria-label=\"Previous slide\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(-90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"\/><\/svg>\n          <\/button>\n          <button class=\"scaler-events-nav__btn scaler-nav-next\" aria-label=\"Next slide\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"\/><\/svg>\n          <\/button>\n        <\/div>\n\n        <a class=\"scaler-events-viewall\" href=\"https:\/\/www.scaler.com\/events\/\">\n          <span>View All Events<\/span>\n          <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"\/><\/svg>\n        <\/a>\n      <\/div>\n    <\/div>\n\n    <script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n\n      const monthNames = [\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];\n\n      function formatTime(st) {\n        const t = new Date(st);\n        const date = t.getDate();\n        const month = monthNames[t.getMonth()];\n        const year = t.getFullYear();\n        const h = t.getHours();\n        const m = String(t.getMinutes()).padStart(2, \"0\");\n        let time;\n        if (h === 0) time = `12:${m} AM`;\n        else if (h === 12) time = `12:${m} PM`;\n        else if (h > 12) time = `${h - 12}:${m} PM`;\n        else time = `${h}:${m} AM`;\n        return `${date} ${month} ${year} | ${time}`;\n      }\n\n      const carouselInstances = document.querySelectorAll('.js-scaler-carousel');\n\n      carouselInstances.forEach(container => {\n\n          if(container.dataset.initialized === \"true\") return;\n          container.dataset.initialized = \"true\";\n\n          const swiperElement = container.querySelector(\".scaler-event-swiper\");\n          const swiperWrapper = container.querySelector(\".scaler-events-wrapper\");\n          const template = container.querySelector(\".js-event-card-template\");\n          const nextBtn = container.querySelector(\".scaler-nav-next\");\n          const prevBtn = container.querySelector(\".scaler-nav-prev\");\n          const paginationEl = container.querySelector(\".scaler-events-pagination\");\n\n          if (!swiperWrapper || !template) {\n             console.error(\"Scaler Carousel: Missing required elements inside container\");\n             return;\n          }\n\n          const swiper = new Swiper(swiperElement, {\n            slidesPerView: \"auto\",\n            spaceBetween: 16,\n            grabCursor: true,\n            observer: true,\n            observeParents: true,\n            pagination: {\n                el: paginationEl,\n                clickable: true,\n                dynamicBullets: true\n            },\n            navigation: {\n                nextEl: nextBtn,\n                prevEl: prevBtn\n            },\n          });\n\n          function showSkeletons(count = 4) {\n            swiperWrapper.innerHTML = \"\";\n            for (let i = 0; i < count; i++) {\n              const clone = template.content.cloneNode(true);\n              const card = clone.querySelector(\".scaler-event-card\");\n              card.classList.add(\"scaler-event-card--skeleton\");\n              swiperWrapper.appendChild(clone);\n            }\n            swiper.update();\n          }\n\n          function renderEvents(events) {\n            swiperWrapper.innerHTML = \"\";\n\n            if (events.length === 0) {\n              swiperWrapper.innerHTML = `<div class=\"scaler-events-empty\">No upcoming masterclasses found.<\/div>`;\n              return;\n            }\n\n            const pathParts = location.pathname.split(\"\/\").filter(Boolean);\n            const currentSlug = pathParts.length > 0 ? pathParts[pathParts.length - 1] : \"homepage\";\n\n            events.forEach(event => {\n              const attr = event.attributes;\n              const cd = attr.custom_data || {};\n              const clone = template.content.cloneNode(true);\n              const joinUrl = `\/event\/${attr.slug}\/?utm_source=blog&utm_medium=master_class&utm_content=${currentSlug}`;\n\n              \/\/ Instructor headshot\n              const instructor = (cd.instructors && cd.instructors[0]) || {};\n              const img = clone.querySelector(\".scaler-event-card__image\");\n              img.src = instructor.media_url || attr.image_url ||\n                \"https:\/\/images.unsplash.com\/photo-1531891437562-4301cf35b7e4?w=200&h=200&fit=crop\";\n              img.alt = instructor.name || attr.instructor_name || attr.title;\n\n              \/\/ Title + speaker\n              clone.querySelector(\".scaler-event-card__title\").textContent = attr.title;\n              clone.querySelector(\".js-event-speaker\").textContent = instructor.name || attr.instructor_name || \"\";\n\n              \/\/ Live chip vs attendee count\n              const isLive = attr.status === \"current\";\n              const footer = clone.querySelector(\".scaler-event-card__img-footer\");\n              const liveBadge = clone.querySelector(\".scaler-event-card__live-badge\");\n              if (isLive) {\n                footer.style.display = \"none\";\n                liveBadge.style.display = \"flex\";\n                liveBadge.textContent = \"Live\";\n              } else if (attr.registration_count) {\n                clone.querySelector(\".js-event-count\").textContent = attr.registration_count;\n              } else {\n                footer.style.display = \"none\";\n              }\n\n              \/\/ Takeaways (up to 2, Know More on the last)\n              const takeaways = (cd.takeaways || []).slice(0, 2);\n              const listEl = clone.querySelector(\".js-event-takeaways\");\n              listEl.innerHTML = \"\";\n              takeaways.forEach((t, idx) => {\n                const item = document.createElement(\"div\");\n                item.className = \"scaler-event-card__takeaway-item\";\n                const dot = document.createElement(\"span\");\n                dot.className = \"scaler-event-card__dot\";\n                const txt = document.createElement(\"span\");\n                txt.className = \"scaler-event-card__takeaway-text\";\n                txt.textContent = t;\n                item.appendChild(dot);\n                item.appendChild(txt);\n                if (idx === takeaways.length - 1) {\n                  const km = document.createElement(\"a\");\n                  km.className = \"scaler-event-card__knowmore\";\n                  km.textContent = \"Know More\";\n                  km.href = joinUrl;\n                  item.appendChild(km);\n                }\n                listEl.appendChild(item);\n              });\n\n              \/\/ Date + duration\n              clone.querySelector(\".js-event-date\").textContent = formatTime(attr.start_time);\n              let hrs = \"\";\n              if (attr.duration) {\n                hrs = (attr.duration \/ 60).toFixed(2);\n              } else if (attr.end_time) {\n                hrs = (Math.abs(new Date(attr.start_time) - new Date(attr.end_time)) \/ 3600000).toFixed(2);\n              }\n              clone.querySelector(\".js-event-duration\").textContent = hrs ? `${hrs} Hrs` : \"\";\n\n              \/\/ CTA\n              clone.querySelector(\".js-event-cta\").href = joinUrl;\n\n              swiperWrapper.appendChild(clone);\n            });\n\n            swiper.update();\n            swiper.slideTo(0);\n          }\n\n          async function fetchEvents() {\n            try {\n              showSkeletons();\n              const res = await fetch(\n                \"https:\/\/www.scaler.com\/api\/v4\/events?event_type[]=company&distributor=scaler&type=upcoming&serializer_mode=L2&limit=8&program[]=software_development&program[]=data_science&program[]=devops&program[]=ai_ml\"\n              );\n              const json = await res.json();\n              const events = json.data || [];\n              renderEvents(events);\n            } catch (error) {\n              console.error(\"Failed to load events:\", error);\n              if(swiperWrapper) swiperWrapper.innerHTML = `<div class=\"scaler-events-empty\">Failed to load events.<\/div>`;\n            }\n          }\n\n          fetchEvents();\n      });\n    });\n    <\/script>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Embedded Programming<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For firmware, C and C++ give you the control you need over memory, timing, and hardware, which is why they remain the main choices for embedded development. MicroPython and CircuitPython are useful when you want to prototype quickly on a supported board, particularly while you\u2019re testing an idea before moving to production firmware. If you\u2019re comparing languages based on the kind of work you want to do, this guide to <a href=\"https:\/\/www.scaler.com\/blog\/best-programming-languages-to-learn-for-jobs\/\">programming languages and their career paths<\/a> can help you make that choice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once your firmware has several things happening at the same time, you\u2019ll also need to understand RTOS fundamentals and how memory is managed on a constrained device. A heap allocation that seems harmless on a desktop can cause fragmentation or failures on an embedded device, especially when allocations happen repeatedly during normal operation. Timing needs the same attention: a delay of a few seconds may work during a prototype, but it can interfere with communications, sensor sampling, or safety-critical control when the device has other tasks to handle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, if you\u2019re thinking of which language should I learn for IoT? Then, that depends entirely on what you\u2019re building. C or C++ will usually be the starting point for device firmware, while MicroPython can make rapid prototyping easier on supported hardware. On the cloud side, you can use the backend language required by the rest of the system. If Python is part of your plan, you can start with the <a href=\"https:\/\/www.scaler.com\/topics\/python\/\">Python tutorial<\/a> and build from the language fundamentals. Node.js can also be relevant to IoT, but usually for the platform or backend side rather than the firmware running directly on the device.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Connectivity and Protocols<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you\u2019re working with IoT connectivity, you\u2019ll come across both connectivity technologies and communication protocols. Wi-Fi, BLE, LoRaWAN, and cellular determine how a device connects, while MQTT, HTTP, and CoAP are used to exchange data between the device and other systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re choosing between these options, start with what the device needs. A battery-powered sensor that sends a few bytes every few minutes has very different requirements from a camera streaming data over Wi-Fi, so you\u2019ll need to consider power consumption, range, bandwidth, latency, and deployment complexity when deciding what to use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You may also need to account for what happens when the connection drops and when the device reconnects. A device may need to retry messages, handle duplicate data, store readings while it is offline, or reconnect without interrupting its other tasks. You don&#8217;t need to memorise every protocol at the start; focus on understanding why one option suits a particular use case and how the device handles a lost connection.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Platforms and Cloud<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once a device starts sending data to a cloud service, you need a platform that can authenticate the device, receive its telemetry, and route that data to the rest of the system. AWS IoT Core, Azure IoT Hub, and ThingsBoard provide these capabilities without requiring you to build the entire platform yourself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re learning these platforms, you can start with one and work through the full flow: register a device, establish a connection, send telemetry, route the data to the right destination, and handle disconnection. Once you understand how these pieces work together, you can apply the same ideas when working with another platform.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Edge computing can also involve a gateway when the devices use protocols or hardware that should not connect directly to the cloud. You may use the gateway to translate protocols, aggregate messages, or process data locally before sending selected data to the cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can practise this tier for \u20b90 by staying within free tiers and using a simulator or a development board you already have.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Build your cloud skills step by step:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/cloud-computing-roadmap-step-by-step-guide\/\"><strong>Cloud Computing Roadmap<\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Data<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An IoT system can generate far more data than its first prototype suggests. Consider 1,000 devices sending one reading per second, with each reading averaging 100 bytes. That comes to roughly 8.6 GB of raw payload per day, before accounting for protocol overhead, indexes, replication, or backups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As the amount of data grows, filtering and downsampling become part of the system design. You\u2019ll need to decide which data should be retained at full resolution, which can be aggregated, what should trigger an alert immediately, and what can be processed at the edge instead of being sent to the cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">These skills also apply to systems beyond IoT. Telemetry pipelines, time-series data, retention policies, dashboards, and alerting are used in areas such as infrastructure monitoring and industrial analytics, so the data skills you build here can carry over to other types of systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Strengthen your data engineering foundation:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/data-engineer-skills\/\"><strong>12 Essential Data Engineer Skills<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Security<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">IoT security has to account for the device as well as the connection and the systems handling its data. This can become difficult when you have thousands of physical devices deployed for years, since each one needs to remain authenticated and secure throughout its lifetime.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can start with device identity and provisioning. Each device should have an identity that can be authenticated, rotated, or revoked. Per-device certificates are preferable to one shared credential because compromising one device should not automatically give an attacker access to the entire fleet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Secure boot and signed firmware can prevent unauthorised software from running, while TLS\/DTLS protects communication. OTA updates also need a safe rollback mechanism, since a failed update can leave a device deployed in the field but unable to operate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As you work on larger IoT deployments, you\u2019ll need to think about how these processes work across the entire fleet. Provisioning 10,000 devices, revoking a compromised credential, rotating certificates, and recovering a device after a failed firmware update all need to be handled without requiring physical access to every device.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Emerging: Edge AI\/TinyML and Digital Twins<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019re working with a reliable IoT system, you can start exploring what happens when some of the processing moves closer to the device. TinyML typically involves training a model off-device, reducing and often quantising it, for example to 8-bit, and then running inference on a microcontroller with very limited RAM and compute.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can use this approach to classify a sound or sensor pattern locally instead of continuously sending raw data to the cloud. This can reduce latency, bandwidth use, and the amount of sensitive data leaving the device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Digital twins take a different approach by maintaining a software representation of a physical asset and its state. Both areas can be useful additions to your IoT skill set, particularly when you\u2019re working with systems that need local intelligence or a detailed software representation of physical equipment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re building your IoT skills from the beginning, you may want to work through the earlier parts first: getting a sensor reading reliably, sending it over a network, handling a disconnect, securing the device, and building the data pipeline. With those pieces working, you can use edge AI as an extension of the system rather than building it as a separate demonstration.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Build your machine learning skills with this:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/machine-learning-roadmap\/\"><strong>Machine Learning Roadmap<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"how-to-improve-your-iot-skills-%e2%80%93-a-four-stage-build-path\"><\/span><strong>How to Improve Your IoT Skills &#8211; A Four-Stage Build Path<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re wondering how to improve IoT skills, start with a small system and add one layer at a time. You can begin with a device that reads a sensor, then add connectivity, a cloud or data layer, and finally the reliability and security needed for a deployed system. This gives you a chance to understand each part before introducing another source of complexity.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stage 1 Breadboard: Make One Sensor Tell You the Truth<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>New problem:<\/strong> physical reality. If you&#8217;re wondering how to start IoT, keep the first project deliberately small.&nbsp; Start with one sensor, a microcontroller, and a simple output. The goal isn&#8217;t to connect ten components; it&#8217;s to understand why the reading changes and whether you can trust the data you&#8217;re getting.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You&#8217;re done when:<\/strong> you can explain why your readings drift and show what you did to calibrate or stabilise them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Time:<\/strong> 1 &#8211; 2 weeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cost:<\/strong> under \u20b91,000.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A 37-sensor kit can make it tempting to connect every component once and move on, but you should try to pick one sensor and spend the time understanding how its readings change instead for better learning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Learn C++ from the basics:<\/strong> <a href=\"https:\/\/www.scaler.com\/topics\/course\/cpp-beginners\/\"><strong>C++ Course Online For Free with Certificate<\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stage 2 Networked: Get the Data Off the Device<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>New problem:<\/strong> the network is unreliable. Send your sensor data to an MQTT broker, use a sensible topic hierarchy, configure a Last Will and Testament, and make the device reconnect with backoff.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You&#8217;re done when:<\/strong> you can unplug the router while the device is running and watch it recover the connection without manual intervention.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Time:<\/strong> 2 &#8211; 3 weeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cost:<\/strong> \u20b90 more if you already have the hardware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A network connection isn&#8217;t always reliable, so you should account for devices disconnecting, packets failing, brokers becoming unavailable, and connections needing to recover.<\/p>\n\n\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n    <!-- Source Sans Pro (topics font) -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+3:wght@400;600;700&#038;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\">\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n\n    <style>\n      :root {\n        --cl-primary: #005bb3;\n        --cl-brand-blue: #255aad;\n        --cl-card-bg: #ffffff;\n        --cl-surface: #f6f7f8;\n        --cl-border: #d6dee5;\n        --cl-text-primary: #1a2c47;   \/* neutral-scale-12 *\/\n        --cl-text-secondary: #61738e; \/* neutral-scale-9 *\/\n        --cl-radius: 16px;\n        --cl-radius-sm: 8px;\n        --cl-shadow: 0 8px 16px 0 rgba(50, 71, 102, 0.16);\n      }\n\n      .scaler-courses * { box-sizing: border-box; }\n\n      .scaler-courses {\n        font-family: \"Source Sans 3\", \"Source Sans Pro\", \"Roboto\", Arial, sans-serif;\n        padding: 24px;\n        width: 100%;\n      }\n      .scaler-courses__inner {\n        max-width: 1000px;\n        margin: 0 auto;\n        position: relative;\n        width: 100%;\n      }\n\n      \/* Header *\/\n      .scaler-courses__header {\n        display: flex;\n        align-items: center;\n        gap: 8px;\n        margin-bottom: 8px;\n        padding: 8px 0;\n      }\n      .scaler-courses__header-icon { display: inline-flex; color: var(--cl-text-primary); }\n      .scaler-courses__header-icon svg { width: 24px; height: 24px; }\n      .scaler-courses__title {\n        font-size: 18px;\n        font-weight: 700;\n        color: var(--cl-text-primary);\n        line-height: 1.3;\n        margin: 0;\n      }\n\n      \/* Swiper *\/\n      .scaler-courses__swiper-wrap { position: relative; }\n      .scaler-courses .swiper { width: 100%; padding: 4px; }\n      .scaler-courses-swiper .swiper-slide {\n        width: 296px;\n        height: auto;\n        display: flex;\n      }\n\n      \/* Card *\/\n      .scaler-course-card {\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        height: 100%;\n        min-height: 336px;\n        background: var(--cl-card-bg);\n        border: 1px solid var(--cl-border);\n        border-radius: var(--cl-radius);\n        overflow: hidden;\n        text-decoration: none;\n        cursor: pointer;\n        transition: box-shadow 0.2s ease;\n      }\n      .scaler-course-card:hover { box-shadow: 0 2px 12px rgba(50, 71, 102, 0.12); }\n\n      .scaler-course-card__image {\n        width: 100%;\n        height: 128px;\n        min-height: 128px;\n        object-fit: cover;\n        background: var(--cl-surface);\n        display: block;\n      }\n\n      .scaler-course-card__detail {\n        display: flex;\n        flex-direction: column;\n        flex: 1 1 auto;\n        padding: 16px 16px 8px;\n      }\n      .scaler-course-card__heading,\n      .scaler-course-card__heading:link,\n      .scaler-course-card__heading:visited {\n        font-size: 20px;\n        font-weight: 600;\n        line-height: 1.4;\n        color: var(--cl-text-primary) !important;\n        margin: 0 0 8px;\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n      .scaler-course-card__instructor {\n        font-size: 14px;\n        line-height: 1.86;\n        color: var(--cl-text-primary);\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      }\n      .scaler-course-card__instructor b { font-weight: 700; }\n      .scaler-course-card__desc {\n        flex-grow: 1;\n        margin-top: 8px;\n        margin-bottom: 12px;\n        font-size: 16px;\n        line-height: 1.5;\n        color: var(--cl-text-secondary);\n        display: -webkit-box;\n        -webkit-line-clamp: 2;\n        -webkit-box-orient: vertical;\n        overflow: hidden;\n      }\n\n      .scaler-course-card__footer {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        width: 100%;\n      }\n      .scaler-course-card__stat {\n        display: flex;\n        align-items: center;\n        gap: 4px;\n        font-size: 14px;\n        color: var(--cl-text-primary);\n      }\n      .scaler-course-card__stat svg { width: 18px; height: 18px; flex-shrink: 0; }\n      .scaler-course-card__stat img { width: 20px; height: 20px; flex-shrink: 0; }\n\n      \/* Side arrows *\/\n      .scaler-courses__nav {\n        position: absolute !important;\n        top: 50% !important;\n        transform: translateY(-50%) !important;\n        z-index: 2;\n        width: 46px !important; height: 46px !important; min-width: 46px;\n        display: flex !important; align-items: center; justify-content: center;\n        padding: 0 !important;\n        background: var(--cl-card-bg) !important;\n        border: none !important;\n        border-radius: var(--cl-radius-sm) !important;\n        box-shadow: var(--cl-shadow) !important;\n        color: var(--cl-text-secondary) !important;\n        cursor: pointer;\n        transition: opacity 0.2s ease, visibility 0.2s ease;\n      }\n      .scaler-courses__nav--prev { left: 8px !important; }\n      .scaler-courses__nav--next { right: 8px !important; }\n      .scaler-courses__nav svg { width: 20px !important; height: 20px !important; fill: var(--cl-text-secondary) !important; }\n      .scaler-courses__nav.swiper-button-disabled { opacity: 0; visibility: hidden; pointer-events: none; }\n\n      .scaler-courses .swiper-button-prev,\n      .scaler-courses .swiper-button-next,\n      .scaler-courses .swiper-pagination { display: none; }\n\n      \/* Skeleton *\/\n      .scaler-course-card--skeleton { pointer-events: none; }\n      .scaler-course-card--skeleton .scaler-course-card__image,\n      .scaler-course-card--skeleton .scaler-course-card__heading,\n      .scaler-course-card--skeleton .scaler-course-card__instructor,\n      .scaler-course-card--skeleton .scaler-course-card__desc,\n      .scaler-course-card--skeleton .scaler-course-card__footer {\n        background: linear-gradient(90deg, var(--cl-border) 25%, var(--cl-surface) 50%, var(--cl-border) 75%);\n        background-size: 200% 100%;\n        animation: cl-shimmer 1.5s infinite;\n        color: transparent !important;\n        border-radius: 4px;\n      }\n      .scaler-course-card--skeleton .scaler-course-card__heading { height: 24px; margin: 0 0 8px; }\n      .scaler-course-card--skeleton .scaler-course-card__instructor { height: 16px; }\n      .scaler-course-card--skeleton .scaler-course-card__footer { height: 20px; }\n      @keyframes cl-shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }\n\n      .scaler-courses__empty { display: none; }\n\n      @media (max-width: 768px) {\n        .scaler-courses { padding: 16px; }\n        .scaler-courses-swiper .swiper-slide { width: 260px; }\n        .scaler-courses__nav { display: none !important; }\n      }\n    <\/style>\n\n\n    <div class=\"scaler-courses js-scaler-courses\">\n\n      <template class=\"js-course-card-template\">\n        <div class=\"swiper-slide\">\n          <a class=\"scaler-course-card js-course-link\" href=\"#\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" class=\"scaler-course-card__image js-course-image\" src=\"\" alt=\"\" loading=\"lazy\">\n            <div class=\"scaler-course-card__detail\">\n              <div class=\"scaler-course-card__heading js-course-title\"><\/div>\n              <div class=\"scaler-course-card__instructor js-course-instructor\"><\/div>\n              <div class=\"scaler-course-card__desc js-course-desc\"><\/div>\n              <div class=\"scaler-course-card__footer\">\n                <span class=\"scaler-course-card__stat js-course-star\">\n                  <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M14.83 2.868c0.342-0.239 0.75-0.368 1.168-0.368s0.826 0.128 1.168 0.368c0.338 0.236 0.596 0.569 0.741 0.955l2.759 6.936c0.003 0.007 0.007 0.013 0.013 0.017s0.013 0.007 0.020 0.007l7.402 0.476c0.411 0.036 0.802 0.194 1.124 0.452s0.559 0.607 0.683 1 0.127 0.815 0.011 1.211c-0.116 0.396-0.347 0.748-0.664 1.013l-5.655 4.714c-0.013 0.011-0.022 0.025-0.028 0.040s-0.006 0.032-0.002 0.047l1.821 7.163c0.107 0.395 0.094 0.812-0.037 1.2-0.133 0.391-0.38 0.734-0.71 0.983s-0.727 0.393-1.14 0.413c-0.413 0.020-0.822-0.084-1.175-0.3l-0.015-0.009-6.307-4.005c-0.004-0.003-0.009-0.004-0.014-0.004s-0.009 0.001-0.013 0.004l-5.876 3.721c-0.389 0.235-0.839 0.347-1.292 0.323s-0.889-0.184-1.251-0.459c-0.361-0.275-0.632-0.652-0.777-1.082-0.143-0.426-0.157-0.885-0.038-1.319l1.684-6.629c0.004-0.016 0.003-0.033-0.002-0.049s-0.015-0.030-0.027-0.040l-5.653-4.714c-0.317-0.264-0.548-0.617-0.664-1.013s-0.112-0.817 0.011-1.211c0.124-0.394 0.361-0.742 0.683-1s0.713-0.416 1.124-0.452l0.023-0.002 7.38-0.476c0.007-0 0.014-0.003 0.020-0.007s0.010-0.010 0.013-0.017l0.008-0.020 2.746-6.913c0.145-0.386 0.403-0.719 0.741-0.956z\"\/><\/svg>\n                  <span class=\"js-course-star-val\"><\/span>\n                <\/span>\n                <span class=\"scaler-course-card__stat\">\n                  <img decoding=\"async\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/user-check-dark.svg\" alt=\"Enrolled\" loading=\"lazy\">\n                  <span class=\"js-course-reg\"><\/span>\n                <\/span>\n              <\/div>\n            <\/div>\n          <\/a>\n        <\/div>\n      <\/template>\n\n      <div class=\"scaler-courses__inner\">\n        <div class=\"scaler-courses__header\">\n          <span class=\"scaler-courses__header-icon\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M26.259 23.289h-20.518c-1.193 0-2.16-0.967-2.16-2.16v0-14.588c0-1.193 0.967-2.16 2.16-2.16v0h20.518c1.193 0 2.16 0.967 2.16 2.16v0 14.588c0 1.193-0.967 2.16-2.16 2.16v0zM5.741 5.501c-0.574 0-1.040 0.466-1.040 1.040v0 14.588c0 0.574 0.466 1.040 1.040 1.040v0h20.518c0.574 0 1.040-0.466 1.040-1.040v0-14.588c0-0.574-0.466-1.040-1.040-1.040v0z\"\/><path d=\"M19.764 27.619h-7.53c-0.309 0-0.56-0.251-0.56-0.56v0c0-0.309 0.251-0.56 0.56-0.56h7.53c0.309 0 0.56 0.251 0.56 0.56v0c0 0.309-0.251 0.56-0.56 0.56v0z\"\/><path d=\"M14.023 9.322c0.116 0 0.223 0.035 0.312 0.096l-0.002-0.001 5.93 3.953c0.151 0.102 0.249 0.272 0.249 0.466s-0.098 0.364-0.247 0.465l-0.002 0.001-5.93 3.953c-0.087 0.059-0.195 0.094-0.31 0.094-0.309 0-0.56-0.25-0.56-0.559v-7.906c0-0.309 0.251-0.56 0.56-0.56v0zM18.943 13.835l-4.36-2.906v5.813z\"\/><\/svg>\n          <\/span>\n          <h2 class=\"scaler-courses__title\"><span class=\"ez-toc-section\" id=\"free-courses-by-top-scaler-instructors\"><\/span>Free Courses by top Scaler instructors<span class=\"ez-toc-section-end\"><\/span><\/h2>\n        <\/div>\n\n        <div class=\"scaler-courses__swiper-wrap\">\n          <div class=\"swiper scaler-courses-swiper\">\n            <div class=\"swiper-wrapper js-courses-wrapper\"><\/div>\n            <div class=\"swiper-pagination\"><\/div>\n          <\/div>\n\n          <button class=\"scaler-courses__nav scaler-courses__nav--prev js-courses-prev\" aria-label=\"Previous\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(-90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"\/><\/svg>\n          <\/button>\n          <button class=\"scaler-courses__nav scaler-courses__nav--next js-courses-next\" aria-label=\"Next\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"\/><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      const EXTRA_COUNT_ADDED = 1000;\n\n      \/\/ Mirrors getInstructorStar(): first token of the headline.\n      function getInstructorStar(headline) {\n        return (headline || \"\").toString().split(\" \")[0] || \"\";\n      }\n\n      document.querySelectorAll(\".js-scaler-courses\").forEach(container => {\n        if (container.dataset.initialized === \"true\") return;\n        container.dataset.initialized = \"true\";\n\n        const swiperElement = container.querySelector(\".scaler-courses-swiper\");\n        const wrapper = container.querySelector(\".js-courses-wrapper\");\n        const template = container.querySelector(\".js-course-card-template\");\n        const nextBtn = container.querySelector(\".js-courses-next\");\n        const prevBtn = container.querySelector(\".js-courses-prev\");\n\n        if (!wrapper || !template) return;\n\n        const swiper = new Swiper(swiperElement, {\n          slidesPerView: \"auto\",\n          spaceBetween: 16,\n          grabCursor: true,\n          observer: true,\n          observeParents: true,\n          navigation: { nextEl: nextBtn, prevEl: prevBtn },\n        });\n\n        const pathParts = location.pathname.split(\"\/\").filter(Boolean);\n        const currentSlug = pathParts.length > 0 ? pathParts[pathParts.length - 1] : \"homepage\";\n\n        function showSkeletons(count = 4) {\n          wrapper.innerHTML = \"\";\n          for (let i = 0; i < count; i++) {\n            const clone = template.content.cloneNode(true);\n            clone.querySelector(\".scaler-course-card\").classList.add(\"scaler-course-card--skeleton\");\n            wrapper.appendChild(clone);\n          }\n          swiper.update();\n        }\n\n        function renderCourses(courses) {\n          wrapper.innerHTML = \"\";\n          if (!courses.length) { container.style.display = \"none\"; return; }\n\n          courses.forEach(item => {\n            const a = item.attributes || {};\n            const clone = template.content.cloneNode(true);\n            const instructor = (a.instructors_data && a.instructors_data[0]) || {};\n\n            clone.querySelector(\".js-course-link\").href =\n              `https:\/\/www.scaler.com\/topics\/course\/${a.slug}\/?utm_source=blog&utm_medium=free_courses&utm_content=${currentSlug}`;\n\n            const img = clone.querySelector(\".js-course-image\");\n            img.src = a.cover_image_thumbnail || a.featured_image || \"\";\n            img.alt = a.title || \"\";\n\n            clone.querySelector(\".js-course-title\").textContent = a.title || \"\";\n\n            const instrEl = clone.querySelector(\".js-course-instructor\");\n            if (instructor.name) {\n              instrEl.innerHTML = \"A Course by <b><\/b>\";\n              instrEl.querySelector(\"b\").textContent = instructor.name;\n            } else {\n              instrEl.style.display = \"none\";\n            }\n\n            clone.querySelector(\".js-course-desc\").textContent = a.description || \"\";\n\n            \/\/ Star\n            const star = getInstructorStar(instructor.star_headline);\n            const starWrap = clone.querySelector(\".js-course-star\");\n            if (star && star !== \"0\") clone.querySelector(\".js-course-star-val\").textContent = star;\n            else starWrap.style.display = \"none\";\n\n            \/\/ Enrolled count (+1000 like topics)\n            clone.querySelector(\".js-course-reg\").textContent =\n              ((a.user_registration_count || 0) + EXTRA_COUNT_ADDED).toLocaleString(\"en-US\");\n\n            wrapper.appendChild(clone);\n          });\n\n          swiper.update();\n          swiper.slideTo(0);\n        }\n\n        async function fetchCourses() {\n          try {\n            showSkeletons();\n            \/\/ Public same-origin endpoint (topics course search). Returns 6 free courses.\n            const res = await fetch(\"\/topics\/api\/v1\/search\/courses\", {\n              method: \"POST\",\n              headers: {\n                \"Content-Type\": \"application\/json\",\n                \"Accept\": \"application\/json\",\n                \"X-Requested-With\": \"XMLHttpRequest\",\n              },\n              body: JSON.stringify({\n                filters: {\n                  q: \"\",\n                  page: { limit: 6, current_page: 1 },\n                  sort: { key: \"user_registration_count\", order: \"desc\" },\n                  filter_type: null,\n                  tags: [],\n                  program: [],\n                  level: [],\n                  category_type: [],\n                },\n              }),\n            });\n            const json = await res.json();\n            const courses = (json && json.data) || [];\n            renderCourses(courses);\n          } catch (error) {\n            console.error(\"Failed to load courses:\", error);\n            container.style.display = \"none\";\n          }\n        }\n\n        fetchCourses();\n      });\n    });\n    <\/script>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stage 3 Cloud-Connected: Storage, Dashboards and Alerts<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>New problem:<\/strong> turning device messages into something someone can actually use. Build the path from device, cloud IoT service, time-series storage, Grafana, then add one alert based on a real threshold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Give each device its own certificate and avoid sharing a key across devices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You&#8217;re done when:<\/strong> someone else can open your dashboard, understand the data, and receive an alert on their phone when the condition is triggered.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Time:<\/strong> 3 &#8211; 4 weeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cost:<\/strong> \u20b90 on free tiers, but set a billing alarm before you start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Getting telemetry into the cloud is an important step, but you should also check what happens when the device disconnects, data is delayed or duplicated, or the cloud service becomes unavailable. A working data stream alone doesn&#8217;t tell you whether the system can handle these situations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Check out these:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/backend-developer-skills\/\"><strong>15 Backend Developer Skills<\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Stage 4 Fleet: Provisioning, OTA and Monitoring<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>New problem:<\/strong> managing more than one device. Move to three or more devices with automatic per-device identity, signed OTA updates, A\/B partitions, and a fleet-level view of device health.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>You&#8217;re done when:<\/strong> you can deliberately push a broken firmware image and watch the devices recover themselves rather than manually repairing each one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Time:<\/strong> 4 &#8211; 8 weeks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Cost:<\/strong> roughly \u20b9600 &#8211; 1,000.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At this stage, you can test the setup by deliberately sending a faulty update and checking whether the devices can recover without manual intervention. That gives you a chance to work through provisioning, device identity, OTA updates, rollback, and fleet monitoring as they would work together.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Also read:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/system-design-roadmap-2026-complete-guide-from-beginner-to-advanced\/\"><strong>System Design Roadmap<\/strong><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>How to Tell You&#8217;re Actually Improving<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It\u2019s a great start to follow a tutorial, and you can develop those skills further by putting them into practice while working on systems you build yourself. As you take on more projects, you should start seeing a few changes in how you approach them:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You can predict what might break before you build the system.<\/li>\n\n\n\n<li>You can open a datasheet and find the specific number you need without reading the entire document.<\/li>\n\n\n\n<li>You can explain a trade-off you made and why you chose one approach over another.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Working on complete systems also gives you room to move beyond individual tutorials, experiment with the hardware you have, and gradually explore more advanced areas of IoT.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"choosing-the-right-iot-protocol-%e2%80%93-a-decision-table\"><\/span><strong>Choosing the Right IoT Protocol &#8211; A Decision Table<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The network\/link layer determines how bits travel between devices: Wi-Fi, BLE, Zigbee, Thread, LoRaWAN, NB-IoT, and Ethernet. The application layer determines how that data is structured and exchanged: MQTT, CoAP, HTTP or WebSockets. You normally choose one from each layer, so \u201cMQTT vs LoRaWAN\u201d isn&#8217;t a meaningful comparison.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Protocol<\/strong><\/td><td><strong>Layer<\/strong><\/td><td><strong>Typical range<\/strong><\/td><td><strong>Power draw<\/strong><\/td><td><strong>Typical use<\/strong><\/td><td><strong>When it&#8217;s the wrong choice<\/strong><\/td><\/tr><tr><td>Wi-Fi<\/td><td>Network\/link<\/td><td>30 &#8211; 100 m<\/td><td>High<\/td><td>Connected devices with local network and power available<\/td><td>Battery-powered devices that need long life or wide-area coverage<\/td><\/tr><tr><td>BLE<\/td><td>Network\/link<\/td><td>10 &#8211; 100 m<\/td><td>Low<\/td><td>Wearables, sensors and phone-to-device connections<\/td><td>Devices needing direct internet connectivity or long-range coverage<\/td><\/tr><tr><td>Zigbee\/Thread<\/td><td>Network\/link<\/td><td>10 &#8211; 100 m per hop<\/td><td>Low<\/td><td>Low-power mesh networks in homes and buildings<\/td><td>Simple single-device deployments where mesh adds unnecessary complexity<\/td><\/tr><tr><td>LoRaWAN<\/td><td>Network\/link<\/td><td>Several km<\/td><td>Very low<\/td><td>Low-bandwidth, battery-powered sensors over large areas<\/td><td>High-throughput or low-latency applications<\/td><\/tr><tr><td>NB-IoT\/LTE-M<\/td><td>Network\/link<\/td><td>Cellular coverage<\/td><td>Low &#8211; moderate<\/td><td>Wide-area connected devices without local Wi-Fi<\/td><td>Deployments without reliable cellular coverage or where connectivity costs must be minimal<\/td><\/tr><tr><td>Ethernet<\/td><td>Network\/link<\/td><td>100 m per segment<\/td><td>High<\/td><td>Fixed industrial and infrastructure devices<\/td><td>Mobile or battery-powered devices<\/td><\/tr><tr><td>MQTT<\/td><td>Application<\/td><td>Depends on underlying network<\/td><td>Low overhead<\/td><td>Telemetry and device-to-cloud messaging<\/td><td>Large file transfers or simple one-off requests<\/td><\/tr><tr><td>CoAP<\/td><td>Application<\/td><td>Depends on underlying network<\/td><td>Very low overhead<\/td><td>Constrained devices and networks<\/td><td>Systems that need widespread HTTP tooling or browser compatibility<\/td><\/tr><tr><td>HTTP\/REST<\/td><td>Application<\/td><td>Depends on underlying network<\/td><td>Higher overhead<\/td><td>APIs, configuration and firmware downloads<\/td><td>Frequent telemetry from heavily constrained devices<\/td><\/tr><tr><td>WebSockets<\/td><td>Application<\/td><td>Depends on underlying network<\/td><td>Moderate<\/td><td>Persistent, bidirectional real-time communication<\/td><td>Simple periodic telemetry where MQTT is a better fit<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If you are building a connected device as a learner, you can start with Wi-Fi + MQTT + TLS and use that setup to learn how a device connects, sends data, and keeps communication secure. You can move to another combination when your device needs lower power consumption, greater range, different bandwidth, a different network topology, or has to work in a particular deployment environment.<\/p>\n\n\n<style data-wp-block-html=\"css\">\n<style>\n      :root {\n        --sp-brand: #255aad;            \/* brand blue *\/\n        --sp-brand-hover: #19468c;\n        --sp-card-bg: #ffffff;          \/* neutral-scale-0 *\/\n        --sp-surface: #f4f6f9;          \/* neutral-scale-2 *\/\n        --sp-pill-bg: #f8fafc;\n        --sp-border: #d6dee5;           \/* neutral-scale-4 *\/\n        --sp-text-primary: #1a2c47;     \/* neutral-scale-12 *\/\n        --sp-text-secondary: #61738e;   \/* neutral-scale-9 *\/\n      }\n\n      .scaler-placement * { box-sizing: border-box; }\n\n      .scaler-placement {\n        font-family: \"Source Sans 3\", \"Source Sans Pro\", \"Roboto\", Arial, sans-serif;\n        width: 100%;\n        max-width: 100%;\n        margin: 24px auto;\n        display: flex;\n        flex-direction: column;\n      }\n\n      \/* ---- Placement report (OnlineCallout) ---- *\/\n      .scaler-placement__title {\n        font-size: 24px;\n        font-weight: 600;\n        line-height: 1.3;\n        color: var(--sp-text-primary);\n        margin: 0 0 16px;\n      }\n\n      .scaler-placement__card {\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        background: var(--sp-card-bg);\n        border: 1px solid var(--sp-border);\n        border-radius: 20px;\n        padding: 16px;\n        box-shadow: 0 8px 32px rgba(37, 90, 173, 0.04);\n        overflow: hidden;\n        gap: 5px;\n      }\n\n      .scaler-placement__top {\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n        width: 100%;\n        gap: 18px;\n      }\n\n      .scaler-placement__stat-block {\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        align-items: center;\n        width: 30%;\n        min-width: 200px;\n        flex-shrink: 0;\n        background: var(--sp-surface);\n        border: 1px solid var(--sp-border);\n        border-radius: 16px;\n        padding: 16px 10px;\n        gap: 8px;\n      }\n      .scaler-placement__stat-number {\n        font-size: 48px;\n        font-weight: 600;\n        line-height: 1;\n        color: var(--sp-brand);\n        text-align: center;\n      }\n      .scaler-placement__stat-label {\n        font-size: 13px;\n        font-weight: 600;\n        line-height: 14px;\n        color: rgba(37, 90, 173, 0.85);\n        text-transform: uppercase;\n        letter-spacing: 0.8px;\n      }\n\n      .scaler-placement__info {\n        display: flex;\n        flex-direction: column;\n        justify-content: center;\n        flex: 1;\n        gap: 10px;\n      }\n      .scaler-placement__proof-header {\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n        gap: 8px;\n      }\n      .scaler-placement__proof-header svg { width: 18px; height: 18px; flex-shrink: 0; }\n      .scaler-placement__proof-label {\n        font-size: 12px;\n        font-weight: 600;\n        line-height: 16px;\n        color: var(--sp-brand);\n        text-transform: uppercase;\n        letter-spacing: 1px;\n      }\n      .scaler-placement__body-text {\n        font-size: 16px;\n        font-weight: 400;\n        line-height: 24px;\n        color: var(--sp-text-primary);\n        margin: 0;\n      }\n\n      .scaler-placement__bottom {\n        display: flex;\n        flex-direction: column;\n        align-items: flex-start;\n        margin-left: calc(30% + 18px);\n        width: calc(70% - 18px);\n        gap: 12px;\n      }\n      .scaler-placement__stats-row {\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n        gap: 24px;\n      }\n      .scaler-placement__stat-item {\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n        gap: 8px;\n      }\n      .scaler-placement__stat-item > svg {\n        color: var(--sp-brand);\n        width: 18px;\n        height: 18px;\n        flex-shrink: 0;\n      }\n      .scaler-placement__stat-text {\n        display: flex;\n        flex-direction: row;\n        align-items: center;\n        gap: 4px;\n      }\n      .scaler-placement__stat-value {\n        font-size: 16px;\n        font-weight: 600;\n        line-height: 24px;\n        color: var(--sp-text-primary);\n      }\n      .scaler-placement__stat-desc {\n        font-size: 14px;\n        font-weight: 400;\n        line-height: 20px;\n        color: var(--sp-text-secondary);\n      }\n\n      .scaler-placement__cta,\n      .scaler-placement__cta:link,\n      .scaler-placement__cta:visited {\n        display: inline-flex;\n        align-items: center;\n        align-self: flex-start;\n        font-size: 14px;\n        font-weight: 600;\n        line-height: 20px;\n        color: var(--sp-brand) !important;\n        gap: 6px;\n        text-decoration: none;\n        cursor: pointer;\n        margin-top: 2px;\n        transition: color 0.25s ease;\n      }\n      .scaler-placement__cta:hover,\n      .scaler-placement__cta:focus { color: var(--sp-brand-hover) !important; }\n      .scaler-placement__cta svg {\n        width: 14px;\n        height: 14px;\n        fill: currentColor;\n        transition: transform 0.25s ease;\n      }\n      .scaler-placement__cta:hover svg { transform: translateX(3px); }\n\n      \/* ---- Hiring Partners ---- *\/\n      .scaler-hiring {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-wrap: wrap;\n        gap: 8px 12px;\n        margin: 24px 0 8px;\n        padding-top: 16px;\n        border-top: 1px solid var(--sp-border);\n      }\n      .scaler-hiring__label {\n        font-size: 14px;\n        color: var(--sp-text-secondary);\n        white-space: nowrap;\n      }\n      .scaler-hiring__pills {\n        display: flex;\n        align-items: center;\n        flex-wrap: wrap;\n        gap: 8px;\n      }\n      .scaler-hiring__pill {\n        display: inline-flex;\n        align-items: center;\n        gap: 6px;\n        padding: 5px 12px 5px 5px;\n        background: var(--sp-pill-bg);\n        border-radius: 999px;\n      }\n      .scaler-hiring__badge {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        flex-shrink: 0;\n        width: 24px;\n        height: 24px;\n        border-radius: 50%;\n        background: #ffffff;\n      }\n      .scaler-hiring__logo {\n        width: 16px !important;\n        height: 16px !important;\n        object-fit: contain;\n        margin: 0 !important;\n        display: block;\n      }\n      .scaler-hiring__name {\n        font-size: 14px;\n        font-weight: 600;\n        color: var(--sp-text-primary);\n      }\n      .scaler-hiring__more {\n        font-size: 14px;\n        color: var(--sp-text-secondary);\n      }\n\n      @media (max-width: 768px) {\n        .scaler-placement__title { font-size: 18px; margin-bottom: 12px; }\n        .scaler-placement__card { gap: 16px; border-radius: 16px; }\n        .scaler-placement__top { gap: 12px; }\n        .scaler-placement__stat-block { width: 35%; min-width: 110px; padding: 12px 8px; gap: 4px; }\n        .scaler-placement__stat-number { font-size: 24px; }\n        .scaler-placement__stat-label { font-size: 10px; }\n        .scaler-placement__body-text { font-size: 14px; line-height: 20px; }\n        .scaler-placement__bottom { margin-left: 0; width: 100%; gap: 16px; }\n        .scaler-placement__stats-row { flex-wrap: wrap; gap: 10px 16px; }\n        .scaler-placement__stat-value { font-size: 14px; line-height: 20px; }\n        .scaler-placement__stat-desc { font-size: 12px; line-height: 16px; }\n      }\n<\/style>\n\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n    <!-- Source Sans Pro (topics font) -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+3:wght@400;600;700&#038;display=swap\" rel=\"stylesheet\">\n\n<div class=\"scaler-placement\">\n      <h2 class=\"scaler-placement__title\"><span class=\"ez-toc-section\" id=\"scaler-placement-report-and-statistics\"><\/span>Scaler Placement Report and Statistics<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n      <div class=\"scaler-placement__card\">\n        <div class=\"scaler-placement__top\">\n          <div class=\"scaler-placement__stat-block\">\n            <div class=\"scaler-placement__stat-number\">\u20b923L<\/div>\n            <div class=\"scaler-placement__stat-label\">AVG CTC<\/div>\n          <\/div>\n          <div class=\"scaler-placement__info\">\n            <div class=\"scaler-placement__proof-header\">\n              <svg viewBox=\"0 0 21 21\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M8.64 0 0 8.683V21h12.257l8.64-8.683V0H8.64zm-.11 17.257H3.725v-4.828H8.53v4.828zm7.901-1.88-4.174 4.194V8.684H1.447l4.076-4.14h10.914l-.006 10.83v.004z\" fill=\"#255aad\"><\/path><\/svg>\n              <span class=\"scaler-placement__proof-label\">SCALER PLACEMENT PROOF<\/span>\n            <\/div>\n            <p class=\"scaler-placement__body-text\">\n              Scaler learners achieved 2.5x salary growth with average post-Scaler CTC reaching \u20b923L.\n            <\/p>\n          <\/div>\n        <\/div>\n\n        <div class=\"scaler-placement__bottom\">\n          <div class=\"scaler-placement__stats-row\">\n            <div class=\"scaler-placement__stat-item\">\n              <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M11.199 7.957c-3.086 0-5.588 2.502-5.588 5.588s2.502 5.588 5.588 5.588c3.086 0 5.588-2.502 5.588-5.588s-2.502-5.588-5.588-5.588zM3.611 13.545c0-4.191 3.397-7.588 7.588-7.588s7.588 3.397 7.588 7.588c0 4.191-3.397 7.588-7.588 7.588s-7.588-3.397-7.588-7.588z\"><\/path><path d=\"M21.090 6.369h0.003c1.989 0 3.897 0.79 5.303 2.197s2.197 3.314 2.197 5.303-0.79 3.897-2.197 5.303c-1.406 1.407-3.314 2.197-5.303 2.197-0.552 0-1-0.448-1-1s0.448-1 1-1c1.459 0 2.858-0.579 3.889-1.611s1.611-2.43 1.611-3.889c0-1.459-0.58-2.858-1.611-3.889s-2.429-1.611-3.888-1.611c-0.507 0.002-1.013 0.070-1.502 0.203-0.533 0.145-1.082-0.17-1.227-0.703s0.17-1.082 0.703-1.227c0.659-0.179 1.339-0.27 2.021-0.272z\"><\/path><path d=\"M10.906 21.364c-1.605 0-3.186 0.386-4.61 1.126s-2.649 1.811-3.572 3.124c-0.318 0.452-0.941 0.561-1.393 0.243s-0.561-0.941-0.243-1.393c1.107-1.576 2.577-2.862 4.286-3.749s3.606-1.351 5.532-1.351 3.823 0.463 5.532 1.351c1.709 0.888 3.179 2.174 4.286 3.749 0.318 0.452 0.209 1.076-0.243 1.393s-1.076 0.209-1.393-0.243c-0.923-1.313-2.148-2.385-3.572-3.124s-3.005-1.126-4.61-1.126z\"><\/path><path d=\"M25.704 22.493c-1.424-0.74-3.005-1.125-4.61-1.124-0.552 0-1-0.447-1.001-0.999s0.447-1 0.999-1.001c1.926-0.001 3.824 0.462 5.533 1.349s3.179 2.174 4.286 3.751c0.317 0.452 0.208 1.076-0.244 1.393s-1.076 0.208-1.393-0.244c-0.922-1.313-2.147-2.385-3.571-3.125z\"><\/path><\/svg>\n              <div class=\"scaler-placement__stat-text\">\n                <span class=\"scaler-placement__stat-value\">11,000+<\/span>\n                <span class=\"scaler-placement__stat-desc\">placements<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"scaler-placement__stat-item\">\n              <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M1.2 27.5c0-0.442 0.358-0.8 0.8-0.8h28c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-28c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M3.727 4.227c0.338-0.338 0.795-0.527 1.273-0.527h12c0.477 0 0.935 0.19 1.273 0.527s0.527 0.795 0.527 1.273v22c0 0.442-0.358 0.8-0.8 0.8s-0.8-0.358-0.8-0.8v-22c0-0.053-0.021-0.104-0.059-0.141s-0.088-0.059-0.141-0.059h-12c-0.053 0-0.104 0.021-0.141 0.059s-0.059 0.088-0.059 0.141v22c0 0.442-0.358 0.8-0.8 0.8s-0.8-0.358-0.8-0.8v-22c0-0.477 0.19-0.935 0.527-1.273z\"><\/path><path d=\"M17.2 12.5c0-0.442 0.358-0.8 0.8-0.8h9c0.477 0 0.935 0.19 1.273 0.527s0.527 0.795 0.527 1.273v14c0 0.442-0.358 0.8-0.8 0.8s-0.8-0.358-0.8-0.8v-14c0-0.053-0.021-0.104-0.059-0.141s-0.088-0.059-0.141-0.059h-9c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M7.2 9.5c0-0.442 0.358-0.8 0.8-0.8h4c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-4c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M9.2 17.5c0-0.442 0.358-0.8 0.8-0.8h4c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-4c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M7.2 22.5c0-0.442 0.358-0.8 0.8-0.8h4c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-4c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M21.2 22.5c0-0.442 0.358-0.8 0.8-0.8h2c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-2c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><path d=\"M21.2 17.5c0-0.442 0.358-0.8 0.8-0.8h2c0.442 0 0.8 0.358 0.8 0.8s-0.358 0.8-0.8 0.8h-2c-0.442 0-0.8-0.358-0.8-0.8z\"><\/path><\/svg>\n              <div class=\"scaler-placement__stat-text\">\n                <span class=\"scaler-placement__stat-value\">650+<\/span>\n                <span class=\"scaler-placement__stat-desc\">companies<\/span>\n              <\/div>\n            <\/div>\n            <div class=\"scaler-placement__stat-item\">\n              <svg viewBox=\"0 0 25 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M5.60938 18.8906C4.74688 18.0281 5.31875 16.2188 4.87813 15.1594C4.4375 14.1 2.75 13.1719 2.75 12C2.75 10.8281 4.41875 9.9375 4.87813 8.84063C5.3375 7.74375 4.74688 5.97187 5.60938 5.10938C6.47187 4.24688 8.28125 4.81875 9.34063 4.37813C10.4 3.9375 11.3281 2.25 12.5 2.25C13.6719 2.25 14.5625 3.91875 15.6594 4.37813C16.7562 4.8375 18.5281 4.24688 19.3906 5.10938C20.2531 5.97187 19.6812 7.78125 20.1219 8.84063C20.5625 9.9 22.25 10.8281 22.25 12C22.25 13.1719 20.5813 14.0625 20.1219 15.1594C19.6625 16.2562 20.2531 18.0281 19.3906 18.8906C18.5281 19.7531 16.7188 19.1812 15.6594 19.6219C14.6 20.0625 13.6719 21.75 12.5 21.75C11.3281 21.75 10.4375 20.0813 9.34063 19.6219C8.24375 19.1625 6.47187 19.7531 5.60938 18.8906Z\" fill=\"#ffffff\" stroke=\"#255aad\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><path d=\"M16.625 9.75L11.1219 15L8.375 12.375\" stroke=\"#255aad\" stroke-width=\"1.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><\/path><\/svg>\n              <span class=\"scaler-placement__stat-desc\">Verified data<\/span>\n            <\/div>\n          <\/div>\n\n          <a class=\"scaler-placement__cta\" href=\"https:\/\/d2beiqkhq929f0.cloudfront.net\/public_assets\/assets\/000\/195\/869\/original\/Scaler_Career_Report.pdf?1778499863\" target=\"_blank\" rel=\"noopener\">\n            See full placement report\n            <svg viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"><\/path><\/svg>\n          <\/a>\n        <\/div>\n      <\/div>\n\n      <div class=\"scaler-hiring\">\n        <span class=\"scaler-hiring__label\">Hiring Partners:<\/span>\n        <div class=\"scaler-hiring__pills\">\n          <span class=\"scaler-hiring__pill\">\n            <span class=\"scaler-hiring__badge\"><img decoding=\"async\" class=\"scaler-hiring__logo\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/googleicon_.svg\" alt=\"Google\" loading=\"lazy\"><\/span>\n            <span class=\"scaler-hiring__name\">Google<\/span>\n          <\/span>\n          <span class=\"scaler-hiring__pill\">\n            <span class=\"scaler-hiring__badge\"><img decoding=\"async\" class=\"scaler-hiring__logo\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/amazonicon_.svg\" alt=\"Amazon\" loading=\"lazy\"><\/span>\n            <span class=\"scaler-hiring__name\">Amazon<\/span>\n          <\/span>\n          <span class=\"scaler-hiring__pill\">\n            <span class=\"scaler-hiring__badge\"><img decoding=\"async\" class=\"scaler-hiring__logo\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/microsoft.svg\" alt=\"Microsoft\" loading=\"lazy\"><\/span>\n            <span class=\"scaler-hiring__name\">Microsoft<\/span>\n          <\/span>\n          <span class=\"scaler-hiring__pill\">\n            <span class=\"scaler-hiring__badge\"><img decoding=\"async\" class=\"scaler-hiring__logo\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/flipkarticon_.svg\" alt=\"Flipkart\" loading=\"lazy\"><\/span>\n            <span class=\"scaler-hiring__name\">Flipkart<\/span>\n          <\/span>\n          <span class=\"scaler-hiring__pill\">\n            <span class=\"scaler-hiring__badge\"><img decoding=\"async\" class=\"scaler-hiring__logo\" src=\"https:\/\/d19zaobb0foqu6.cloudfront.net\/topics\/images\/adobeicon_.svg\" alt=\"Adobe\" loading=\"lazy\"><\/span>\n            <span class=\"scaler-hiring__name\">Adobe<\/span>\n          <\/span>\n          <span class=\"scaler-hiring__more\">1200+ more<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong>Why MQTT Beats HTTP for Telemetry (The Interview Answer)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">MQTT uses persistent connections and a publish\/subscribe model. A device sends telemetry to a broker, while applications that need that data subscribe to the relevant topic. The device doesn't need to know which applications will receive it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP typically follows a request\/response model, so frequent telemetry can involve repeated request overhead. MQTT also provides different QoS levels and a Last Will and Testament, which lets a broker publish a message when a connected client disappears unexpectedly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP still has clear advantages. A firmware download, one-time configuration request, or occasional hourly report may fit HTTP perfectly well. The interview answer isn't \u201cMQTT is always better\u201d; it's \u201cMQTT fits continuous telemetry because of its persistent connection and pub\/sub model, while HTTP fits request\/response workloads.\u201d<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"affordable-iot-hardware-for-indian-learners-and-what-you-can-learn-with-zero-hardware\"><\/span><strong>Affordable IoT Hardware for Indian Learners (And What You Can Learn With Zero Hardware)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can reach Stage 3 for under \u20b92,000 in hardware, and you can complete Stage 2 for \u20b90 using simulation. The key is buying hardware in an order that matches what you're trying to learn.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Boards Worth Buying, and in What Order<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Board<\/strong><\/td><td><strong>Indicative price<\/strong><\/td><td><strong>What it's for<\/strong><\/td><td><strong>Buy it when<\/strong><\/td><\/tr><tr><td>ESP8266\/NodeMCU<\/td><td>\u20b9250 - \u20b9500<\/td><td>Cheapest entry to Wi-Fi-based IoT.<\/td><td>You want the lowest-cost starting point.<\/td><\/tr><tr><td>ESP32 DevKit V1<\/td><td>\u20b9400 - \u20b9700<\/td><td>Best all-round board for Wi-Fi, BLE and IoT projects.<\/td><td>Default recommendation for most learners.<\/td><\/tr><tr><td>ESP32-S3\/CAM<\/td><td>\u20b9600 - \u20b91,200<\/td><td>Camera, AI and more demanding edge applications.<\/td><td>After you've built a basic ESP32 project.<\/td><\/tr><tr><td>Raspberry Pi Pico W<\/td><td>\u20b9500 - \u20b9800<\/td><td>Low-cost microcontroller projects with Wi-Fi.<\/td><td>When you want to explore an alternative MCU platform.<\/td><\/tr><tr><td>Arduino Uno clone<\/td><td>\u20b9300 - \u20b9500<\/td><td>Basic electronics and microcontroller fundamentals.<\/td><td>Only if your course or syllabus specifically uses Arduino Uno.<\/td><\/tr><tr><td>Raspberry Pi 4<\/td><td>\u20b94,000+<\/td><td>Linux-based edge computing and gateways.<\/td><td>When you actually need a Linux computer.<\/td><\/tr><tr><td>Raspberry Pi 5<\/td><td>\u20b95,000+<\/td><td>More demanding edge workloads and gateways.<\/td><td>When a Pi 4 no longer meets the workload.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Component prices can change, so these prices won\u2019t be fixed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And having all seven boards isn't necessary for these projects. For most of the projects in this guide, an ESP32 DevKit V1 is enough to get started, with Wi-Fi and BLE built in, so there\u2019s no need to begin with more expensive hardware.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For the supporting kit, start with a breadboard and jumper wires, a basic sensor set, and a multimeter. Add a USB logic analyser once you start debugging I2C, SPI, or serial communication. A LoRa module can wait until Stage 4, when you have a reason to work with long-range, low-power connectivity.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A realistic starter setup is ESP32 + breadboard + jumpers + basic sensors for roughly \u20b91,500 - 2,500. Avoid choosing an unbranded ESP32 solely because it is the cheapest listing. Poor boards can turn a hardware problem into a debugging problem you didn't create.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What You Can Learn With Zero Hardware<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can cover a good part of the learning path before buying any hardware. Wokwi lets you simulate ESP32 and Arduino projects in a browser and connect simulated devices to real MQTT brokers, so you can complete Stages 1 and 2 without a physical board. Tinkercad Circuits is another option for basic electronics simulation, while QEMU and Renode can help with more advanced embedded experimentation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The cloud side can also be practised through the free tiers of AWS IoT Core, Azure IoT Hub, HiveMQ, Grafana Cloud, and ThingsBoard. This means you can explore Tiers 4, 5, 6, and much of 7 without spending anything on hardware or cloud services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are some things simulation can't reproduce, though. You won't see what happens when a power supply sags, electrical noise affects a signal, or a device that works perfectly on your desk starts failing after deployment. You\u2019ll need physical hardware to work through those problems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"iot-security-skills-employers-actually-screen-for\"><\/span><strong>IoT Security Skills Employers Actually Screen For<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Security becomes especially important when you\u2019re dealing with a fleet of connected devices. A vulnerability in one device can affect many others if they share credentials or lack a reliable way to receive security updates. Devices may also remain deployed for years, so identity, secure communication, firmware updates, and access control need to be considered from the beginning.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For an India-focused reference point, the Telecommunication Engineering Centre (TEC) under the Department of Telecommunications publishes a Code of Practice for Securing Consumer IoT. Internationally, NIST IR 8259A and ETSI EN 303 645 provide established security baselines for connected devices.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Device Identity and Provisioning<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you give every device the same API key, a leak from one device can potentially expose the entire fleet. You also won't be able to revoke access for just the compromised device without affecting the others.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you give each device its own identity, you can authenticate and manage them individually. In a certificate-based setup, each device receives its own X.509 certificate, typically issued during manufacturing or through an automated provisioning process. The backend can then authenticate individual devices, revoke compromised credentials, and track which device is responsible for a connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a portfolio project, show the provisioning flow in your README and explain why each device receives its own credential. You can also show how that credential is authenticated and revoked.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TLS on Constrained Devices<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">TLS provides encrypted and authenticated communication, but on a small MCU, certificate processing and cryptographic operations also consume RAM, flash, and CPU time. You may find that a student project works only after certificate verification has been disabled, but leaving it that way creates a security problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you\u2019re setting up TLS on a constrained device, you can consider mutual TLS, certificate pinning, or a trimmed CA bundle depending on the architecture. You\u2019ll want to check what each option costs on the actual device, rather than treating TLS as something you simply switch on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should also check how much RAM and flash your security configuration uses. That gives you a clearer picture of whether the TLS setup fits within the resources available on the device.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Secure Boot and Signed Firmware<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Secure boot establishes a chain of trust from the device's startup process to the firmware it executes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In simplified terms:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The device starts from a trusted boot component.<\/li>\n\n\n\n<li>That component verifies the firmware's cryptographic signature.<\/li>\n\n\n\n<li>Only verified firmware is allowed to run.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This prevents an attacker from replacing legitimate firmware with an unauthorised image, even if they gain some form of physical access to the device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is an important hardware caveat for learners: enabling secure-boot features on some development boards can be irreversible or permanently change how the device accepts firmware. Don't experiment on the only board you own unless you're prepared to lock yourself out of your normal development workflow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>OTA Updates and Rollback<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you have devices deployed in the field, you need a way to update their firmware without physically accessing each device. With thousands of devices, the update process also needs to verify the new firmware, detect when an update has failed, and return the device to a working version.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A robust update flow verifies the firmware signature before installation, uses A\/B partitions or another recovery mechanism, rolls out updates gradually, checks device health after reboot, and automatically returns to the previous known-good image when the new one fails.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can test this by deliberately introducing a failure. If an update breaks your sensor driver, you should be able to make the device detect that it has not started correctly and recover without someone physically touching it. This gives you a practical way to work through signed updates, health checks, and rollback.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a portfolio project, record a short demo of pushing a broken firmware image and showing the device automatically roll back to the working version. This gives you something concrete to discuss when explaining how you handled firmware updates and recovery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Strengthen your cybersecurity skills with:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/cyber-security-roadmap-from-non-tech-to-specialist\/\"><strong>Cyber-Security Roadmap<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"where-iot-skills-are-actually-hired-in-india-the-honest-version\"><\/span><strong>Where IoT Skills Are Actually Hired in India (The Honest Version)<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">IoT is a multidisciplinary specialism built on top of embedded or backend engineering, not usually an entry-level career path by itself. That distinction matters when you're looking at job titles and deciding what to prepare for: most people enter through an adjacent engineering role and build IoT depth from there.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Sectors That Actually Hire<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">IoT work is concentrated in industries where physical devices need to communicate, be monitored, or controlled remotely. In India, that includes embedded product companies, industrial IoT and factory automation, automotive and EV, telecom, energy and utilities, agritech, medical devices, logistics and cold chain, and hardware startups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Automotive roles can involve telematics, battery-management systems (BMS), CAN and AUTOSAR. Telecom companies work with technologies such as NB-IoT and LTE-M, while energy and utilities have large-scale smart-metering deployments.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Geographically, opportunities are concentrated around Bengaluru, Pune, Hyderabad, Chennai, the NCR and Coimbatore, where manufacturing, electronics and R&amp;D activity create more hardware-linked roles than the broader IT-services market.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Job Titles - \u201cIoT Engineer\u201d Is Rarely One of Them<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Searching only for \u201cIoT Engineer\u201d can make the market look smaller than it is. Companies often hire for the underlying engineering function instead.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Look for titles such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Embedded Software Engineer<\/li>\n\n\n\n<li>Firmware Engineer<\/li>\n\n\n\n<li>Embedded Systems Engineer<\/li>\n\n\n\n<li>IoT Solutions Architect<\/li>\n\n\n\n<li>Connectivity Engineer<\/li>\n\n\n\n<li>Edge\/Embedded ML Engineer<\/li>\n\n\n\n<li>Platform Engineer<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Search the skills as well as the title: MQTT, FreeRTOS, ESP32, LoRaWAN, AWS IoT, and CAN bus can surface roles that never mention \u201cIoT\u201d in the job title.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Is IoT a Good First Job? An Honest Assessment<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Usually, not if you are looking for this exact title. IoT spans enough layers that employers generally want a solid base in embedded systems, software, networking, or another engineering discipline before handing someone end-to-end responsibility for connected devices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That isn't bad news for a fresher. An IoT portfolio can be particularly effective for landing an adjacent first role, because a Stage 3 or Stage 4 project can demonstrate firmware, networking, cloud, security and data skills in one system rather than as disconnected tutorials.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For ECE and EEE students, that can make IoT a direct bridge into software-adjacent engineering roles without pretending that \u201cIoT Engineer\u201d is a standard fresher position.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What the Money Looks Like<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">IoT engineer salary in India varies by role, experience, location, and industry. Glassdoor currently reports a base-pay range of <a href=\"https:\/\/www.glassdoor.co.in\/Salaries\/iot-engineer-salary-SRCH_KO0,12.htm\" target=\"_blank\" rel=\"noopener\">\u20b93 - \u20b97 LPA<\/a>, and you can check the updated ranges too. Salary data varies across platforms and individual roles, so these figures are approximate ranges.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Entry-level embedded roles often start below comparable web or cloud roles, but the gap can narrow as you develop deeper domain expertise. Automotive, semiconductor and industrial roles can also pay above the broader embedded average.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is an uncomfortable trade-off here: hardware-heavy roles often start lower and rise more slowly in India, but they also face less competition and typically have lower churn than some mainstream software tracks.<\/p>\n\n\n<meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\n    <!-- Source Sans Pro (topics font) -->\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Source+Sans+3:wght@400;600;700&amp;display=swap\" rel=\"stylesheet\">\n    <link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.css\">\n    <script src=\"https:\/\/cdn.jsdelivr.net\/npm\/swiper@11\/swiper-bundle.min.js\"><\/script>\n\n    <style>\n      :root {\n        --ss-primary: #005bb3;        \/* primary-color-80 *\/\n        --ss-card-bg: #ffffff;\n        --ss-border: #e6e6e6;\n        --ss-quote-bg: #f6f6f6;\n        --ss-text-dark: #1c1c1c;\n        --ss-text-mid: #6b6b6b;\n        --ss-text-muted: #9a9a9a;\n        --ss-radius: 12px;\n        --ss-radius-sm: 8px;\n        --ss-shadow: 0 8px 16px 0 rgba(50, 71, 102, 0.16);\n      }\n\n      .scaler-ss * { box-sizing: border-box; }\n\n      .scaler-ss {\n        font-family: \"Source Sans 3\", \"Source Sans Pro\", \"Roboto\", Arial, sans-serif;\n        padding: 24px;\n        width: 100%;\n      }\n      .scaler-ss__inner {\n        max-width: 1000px;\n        margin: 0 auto;\n        position: relative;\n        width: 100%;\n      }\n\n      \/* Heading *\/\n      .scaler-ss__heading {\n        font-size: 26px;\n        line-height: 34px;\n        font-weight: 700;\n        margin: 0 0 16px;\n        text-align: center;\n        color: var(--ss-text-dark);\n      }\n\n      \/* Swiper *\/\n      .scaler-ss__swiper-wrap { position: relative; }\n      .scaler-ss .swiper { width: 100%; padding: 4px; }\n      .scaler-ss-swiper .swiper-slide {\n        width: 300px;          \/* topics card width *\/\n        height: auto;\n        display: flex;\n      }\n\n      \/* Card *\/\n      .scaler-ss-card {\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        border: 1px solid var(--ss-border);\n        border-radius: var(--ss-radius);\n        overflow: hidden;\n        background: var(--ss-card-bg);\n      }\n\n      .scaler-ss-card__hike {\n        padding: 8px 12px;\n        background: var(--ss-primary);\n        color: #ffffff;\n        font-size: 14px;\n        font-weight: 700;\n        text-align: center;\n        letter-spacing: 0.4px;\n      }\n\n      .scaler-ss-card__body {\n        display: flex;\n        flex: 1 1 auto;\n        flex-direction: column;\n        gap: 12px;\n        padding: 16px;\n      }\n\n      \/* Person *\/\n      .scaler-ss-card__person {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n      }\n      .scaler-ss-card__avatar {\n        width: 44px;\n        height: 44px;\n        min-width: 44px;\n        border-radius: 50%;\n        object-fit: cover;\n        background: var(--ss-quote-bg);\n      }\n      .scaler-ss-card__name {\n        font-size: 16px;\n        font-weight: 700;\n        line-height: 20px;\n        color: var(--ss-text-dark);\n      }\n      .scaler-ss-card__city {\n        font-size: 13px;\n        line-height: 18px;\n        color: var(--ss-text-mid);\n      }\n\n      \/* Before \/ Now transition *\/\n      .scaler-ss-card__transition {\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        gap: 8px;\n      }\n      .scaler-ss-card__col {\n        flex: 1;\n        min-width: 0;\n      }\n      .scaler-ss-card__col-label {\n        font-size: 11px;\n        font-weight: 600;\n        letter-spacing: 0.4px;\n        color: var(--ss-text-muted);\n        margin-bottom: 2px;\n      }\n      .scaler-ss-card__col-role {\n        font-size: 13px;\n        line-height: 18px;\n        color: var(--ss-text-mid);\n      }\n      .scaler-ss-card__col-company {\n        font-size: 14px;\n        font-weight: 700;\n        line-height: 20px;\n        color: var(--ss-text-dark);\n      }\n      .scaler-ss-card__company-logo {\n        margin-top: 2px;\n        max-width: 64px;\n        max-height: 20px;\n        width: auto;\n        height: auto;\n        object-fit: contain;\n        display: block;\n      }\n      .scaler-ss-card__arrow {\n        flex-shrink: 0;\n        width: 28px;\n        height: 8px;\n        color: var(--ss-text-mid);\n        fill: currentColor;\n      }\n\n      \/* Quote *\/\n      .scaler-ss-card__quote {\n        font-size: 13px;\n        font-style: italic;\n        line-height: 19px;\n        color: var(--ss-text-mid);\n        background: var(--ss-quote-bg);\n        border-radius: var(--ss-radius-sm);\n        padding: 8px 10px;\n      }\n\n      \/* View Profile *\/\n      .scaler-ss-card__cta,\n      .scaler-ss-card__cta:link,\n      .scaler-ss-card__cta:visited {\n        display: block;\n        margin-top: auto;\n        text-align: center;\n        font-size: 14px;\n        font-weight: 600;\n        color: var(--ss-primary) !important;\n        text-decoration: none;\n        border: 1px solid var(--ss-primary);\n        border-radius: var(--ss-radius-sm);\n        padding: 9px 12px;\n        cursor: pointer;\n        transition: background 0.2s ease, color 0.2s ease;\n      }\n      .scaler-ss-card__cta:hover,\n      .scaler-ss-card__cta:focus {\n        background: var(--ss-primary);\n        color: #ffffff !important;\n      }\n\n      \/* Side navigation arrows *\/\n      .scaler-ss__nav {\n        position: absolute !important;\n        top: 50% !important;\n        transform: translateY(-50%) !important;\n        z-index: 2;\n        width: 46px !important;\n        height: 46px !important;\n        min-width: 46px;\n        display: flex !important;\n        align-items: center;\n        justify-content: center;\n        padding: 0 !important;\n        background: var(--ss-card-bg) !important;\n        border: none !important;\n        border-radius: var(--ss-radius-sm) !important;\n        box-shadow: var(--ss-shadow) !important;\n        color: #61738e !important;\n        cursor: pointer;\n        transition: opacity 0.2s ease, visibility 0.2s ease;\n      }\n      .scaler-ss__nav--prev { left: 8px !important; }\n      .scaler-ss__nav--next { right: 8px !important; }\n      .scaler-ss__nav svg {\n        width: 20px !important;\n        height: 20px !important;\n        fill: #61738e !important;\n      }\n      .scaler-ss__nav.swiper-button-disabled {\n        opacity: 0;\n        visibility: hidden;\n        pointer-events: none;\n      }\n\n      .scaler-ss .swiper-button-prev,\n      .scaler-ss .swiper-button-next,\n      .scaler-ss .swiper-pagination { display: none; }\n\n      \/* Skeleton *\/\n      .scaler-ss-card--skeleton { pointer-events: none; }\n      .scaler-ss-card--skeleton .scaler-ss-card__hike,\n      .scaler-ss-card--skeleton .scaler-ss-card__avatar,\n      .scaler-ss-card--skeleton .scaler-ss-card__person-text,\n      .scaler-ss-card--skeleton .scaler-ss-card__transition,\n      .scaler-ss-card--skeleton .scaler-ss-card__quote,\n      .scaler-ss-card--skeleton .scaler-ss-card__cta {\n        background: linear-gradient(90deg, var(--ss-border) 25%, var(--ss-quote-bg) 50%, var(--ss-border) 75%);\n        background-size: 200% 100%;\n        animation: ss-shimmer 1.5s infinite;\n        color: transparent !important;\n        border-color: transparent !important;\n        border-radius: 4px;\n      }\n      .scaler-ss-card--skeleton .scaler-ss-card__person-text { flex: 1; height: 32px; }\n      .scaler-ss-card--skeleton .scaler-ss-card__transition { height: 56px; }\n      .scaler-ss-card--skeleton .scaler-ss-card__quote { height: 48px; }\n      .scaler-ss-card--skeleton .scaler-ss-card__cta { height: 38px; }\n\n      @keyframes ss-shimmer {\n        0% { background-position: 200% 0; }\n        100% { background-position: -200% 0; }\n      }\n\n      @media (max-width: 768px) {\n        .scaler-ss { padding: 16px; }\n        .scaler-ss__heading { font-size: 22px; line-height: 30px; }\n        .scaler-ss-swiper .swiper-slide { width: 270px; }\n        .scaler-ss__nav { display: none !important; }\n      }\n    <\/style>\n\n\n\n    <div class=\"scaler-ss js-scaler-ss\">\n\n      <template class=\"js-ss-card-template\">\n        <div class=\"swiper-slide\">\n          <article class=\"scaler-ss-card\">\n            <div class=\"scaler-ss-card__hike js-ss-hike\"><\/div>\n            <div class=\"scaler-ss-card__body\">\n              <div class=\"scaler-ss-card__person\">\n                <img decoding=\"async\" class=\"scaler-ss-card__avatar js-ss-avatar\" src=\"\" alt=\"\" loading=\"lazy\">\n                <div class=\"scaler-ss-card__person-text\">\n                  <div class=\"scaler-ss-card__name js-ss-name\"><\/div>\n                  <div class=\"scaler-ss-card__city js-ss-city\"><\/div>\n                <\/div>\n              <\/div>\n\n              <div class=\"scaler-ss-card__transition\">\n                <div class=\"scaler-ss-card__col\">\n                  <div class=\"scaler-ss-card__col-label\">BEFORE:<\/div>\n                  <div class=\"scaler-ss-card__col-role js-ss-before-role\"><\/div>\n                  <div class=\"scaler-ss-card__col-company js-ss-before-company\"><\/div>\n                <\/div>\n                <svg class=\"scaler-ss-card__arrow\" viewBox=\"0 0 32 8\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M31.3882 4.35355C31.5835 4.15829 31.5835 3.84171 31.3882 3.64645L28.2062 0.464466C28.011 0.269204 27.6944 0.269204 27.4991 0.464466C27.3039 0.659728 27.3039 0.976311 27.4991 1.17157L30.3276 4L27.4991 6.82843C27.3039 7.02369 27.3039 7.34027 27.4991 7.53553C27.6944 7.7308 28.011 7.7308 28.2062 7.53553L31.3882 4.35355ZM0.034668 4.5H31.0347V3.5H0.034668V4.5Z\"><\/path><\/svg>\n                <div class=\"scaler-ss-card__col\">\n                  <div class=\"scaler-ss-card__col-label\">NOW:<\/div>\n                  <div class=\"scaler-ss-card__col-role js-ss-now-role\"><\/div>\n                  <div class=\"js-ss-now-company\"><\/div>\n                <\/div>\n              <\/div>\n\n              <div class=\"scaler-ss-card__quote js-ss-quote\"><\/div>\n\n              <a class=\"scaler-ss-card__cta js-ss-cta\" href=\"#\" target=\"_blank\" rel=\"noopener\">View Profile<\/a>\n            <\/div>\n          <\/article>\n        <\/div>\n      <\/template>\n\n      <div class=\"scaler-ss__inner\">\n        <h2 class=\"scaler-ss__heading\"><span class=\"ez-toc-section\" id=\"scaler-alumni-and-their-success-stories\"><\/span>Scaler Alumni and Their Success Stories<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n        <div class=\"scaler-ss__swiper-wrap\">\n          <div class=\"swiper scaler-ss-swiper\">\n            <div class=\"swiper-wrapper js-ss-wrapper\"><\/div>\n          <\/div>\n\n          <button class=\"scaler-ss__nav scaler-ss__nav--prev js-ss-prev\" aria-label=\"Previous\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(-90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"><\/path><\/svg>\n          <\/button>\n          <button class=\"scaler-ss__nav scaler-ss__nav--next js-ss-next\" aria-label=\"Next\">\n            <svg fill=\"currentColor\" viewBox=\"0 0 32 32\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"transform: rotate(90deg);\"><path d=\"M5.313 16l10.688-10.688 10.688 10.688-1.938 1.875-7.438-7.438v16.25h-2.625v-16.25l-7.5 7.438z\"><\/path><\/svg>\n          <\/button>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <script>\n    document.addEventListener(\"DOMContentLoaded\", () => {\n\n      const ASSET_CDN = \"https:\/\/d2beiqkhq929f0.cloudfront.net\/public_assets\/assets\";\n      const AVATAR_FALLBACK =\n        \"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='44' height='44' viewBox='0 0 44 44'%3E%3Ccircle cx='22' cy='22' r='22' fill='%23e6e6e6'\/%3E%3Ccircle cx='22' cy='17' r='7' fill='%23b9b9b9'\/%3E%3Cpath d='M8 40c0-8 6.3-13 14-13s14 5 14 13' fill='%23b9b9b9'\/%3E%3C\/svg%3E\";\n\n      \/\/ Mirrors buildAssetUrl(): pass through absolute urls, else build the CDN url.\n      function buildAssetUrl(raw) {\n        if (!raw) return \"\";\n        if (String(raw).startsWith(\"http\")) return raw;\n        return `${ASSET_CDN}\/${raw}\/original`;\n      }\n\n      const instances = document.querySelectorAll(\".js-scaler-ss\");\n\n      instances.forEach(container => {\n        if (container.dataset.initialized === \"true\") return;\n        container.dataset.initialized = \"true\";\n\n        const swiperElement = container.querySelector(\".scaler-ss-swiper\");\n        const wrapper = container.querySelector(\".js-ss-wrapper\");\n        const template = container.querySelector(\".js-ss-card-template\");\n        const nextBtn = container.querySelector(\".js-ss-next\");\n        const prevBtn = container.querySelector(\".js-ss-prev\");\n\n        if (!wrapper || !template) {\n          console.error(\"Scaler Success Stories: missing required elements\");\n          return;\n        }\n\n        const swiper = new Swiper(swiperElement, {\n          slidesPerView: \"auto\",\n          spaceBetween: 16,\n          grabCursor: true,\n          observer: true,\n          observeParents: true,\n          navigation: { nextEl: nextBtn, prevEl: prevBtn },\n        });\n\n        const pathParts = location.pathname.split(\"\/\").filter(Boolean);\n        const currentSlug = pathParts.length > 0 ? pathParts[pathParts.length - 1] : \"homepage\";\n        const profileUrl =\n          `https:\/\/www.scaler.com\/review\/?utm_source=blog&utm_medium=success_stories&utm_content=${currentSlug}`;\n\n        function showSkeletons(count = 4) {\n          wrapper.innerHTML = \"\";\n          for (let i = 0; i < count; i++) {\n            const clone = template.content.cloneNode(true);\n            clone.querySelector(\".scaler-ss-card\").classList.add(\"scaler-ss-card--skeleton\");\n            wrapper.appendChild(clone);\n          }\n          swiper.update();\n        }\n\n        function renderStories(stories) {\n          wrapper.innerHTML = \"\";\n          if (!stories.length) {\n            container.style.display = \"none\";   \/\/ match topics: render nothing when empty\n            return;\n          }\n\n          stories.forEach(story => {\n            const a = story.attributes || {};\n            const clone = template.content.cloneNode(true);\n\n            const hike = String(a.growth || \"\").replace(\"%\", \"\").trim() || \"150\";\n            clone.querySelector(\".js-ss-hike\").textContent = `${hike}% HIKE`;\n\n            \/\/ Avatar\n            const avatar = buildAssetUrl(a.image_url) || a.generated_thumbnail_url || \"\";\n            const img = clone.querySelector(\".js-ss-avatar\");\n            img.src = avatar || AVATAR_FALLBACK;\n            img.alt = a.name || \"Scaler alumnus\";\n            img.onerror = function () { this.onerror = null; this.src = AVATAR_FALLBACK; };\n\n            clone.querySelector(\".js-ss-name\").textContent = a.name || \"\";\n            const cityEl = clone.querySelector(\".js-ss-city\");\n            if (a.city) cityEl.textContent = a.city; else cityEl.style.display = \"none\";\n\n            \/\/ BEFORE\n            clone.querySelector(\".js-ss-before-role\").textContent = a.pre_scaler_role || a.pre_academy_company || \"\";\n            const beforeCompany = clone.querySelector(\".js-ss-before-company\");\n            if (a.pre_academy_company) beforeCompany.textContent = a.pre_academy_company;\n            else beforeCompany.style.display = \"none\";\n\n            \/\/ NOW\n            clone.querySelector(\".js-ss-now-role\").textContent = a.role || \"\";\n            const nowCompanyBox = clone.querySelector(\".js-ss-now-company\");\n            const companyLogo = buildAssetUrl(a.company_logo_url);\n            if (companyLogo) {\n              const logo = document.createElement(\"img\");\n              logo.className = \"scaler-ss-card__company-logo\";\n              logo.src = companyLogo;\n              logo.alt = a.post_academy_company || \"company\";\n              logo.loading = \"lazy\";\n              logo.onerror = function () {\n                this.onerror = null;\n                this.replaceWith(Object.assign(document.createElement(\"div\"), {\n                  className: \"scaler-ss-card__col-company\",\n                  textContent: a.post_academy_company || \"\",\n                }));\n              };\n              nowCompanyBox.appendChild(logo);\n            } else if (a.post_academy_company) {\n              nowCompanyBox.className = \"scaler-ss-card__col-company\";\n              nowCompanyBox.textContent = a.post_academy_company;\n            }\n\n            \/\/ Quote (clip to 110 chars like topics)\n            const quoteEl = clone.querySelector(\".js-ss-quote\");\n            quoteEl.textContent = `\u201c${String(a.content).slice(0, 110)}\u2026\u201d`;\n\n            \/\/ View Profile\n            clone.querySelector(\".js-ss-cta\").href = profileUrl;\n\n            wrapper.appendChild(clone);\n          });\n\n          swiper.update();\n          swiper.slideTo(0);\n        }\n\n        async function fetchStories() {\n          try {\n            showSkeletons();\n            \/\/ Same-origin POST on www.scaler.com (the blog canonical host).\n            \/\/ The endpoint only returns JSON when the Referer is a \/topics\/ page\n            \/\/ (a soft anti-hotlinking gate); a \/blog\/ referer gets a Turbolinks\n            \/\/ redirect. Since blog + topics are the same origin, we set the\n            \/\/ fetch referrer to a topics URL so the server serves the data.\n            const res = await fetch(\"\/success-stories\/testimonials\", {\n              method: \"POST\",\n              credentials: \"include\",\n              referrer: \"https:\/\/www.scaler.com\/topics\/\",\n              referrerPolicy: \"unsafe-url\",\n              headers: {\n                \"Content-Type\": \"application\/json\",\n                \"Accept\": \"application\/json\",\n                \"X-Requested-With\": \"XMLHttpRequest\",\n              },\n              \/\/ q:{} => all programs (no program filter)\n              body: JSON.stringify({\n                page_number: 1,\n                per_page: 12,\n                sort_by: \"eligible_for_qna\",\n                new_quick_filters: true,\n                quick_filter: [],\n                q: {},\n              }),\n            });\n            const json = await res.json();\n            const all = (json && json.data && json.data.data) || [];\n            \/\/ Only show stories that carry a testimonial quote (matches topics).\n            const withQuote = all.filter(s => s.attributes && s.attributes.content);\n            renderStories(withQuote);\n          } catch (error) {\n            console.error(\"Failed to load success stories:\", error);\n            container.style.display = \"none\";\n          }\n        }\n\n        fetchStories();\n      });\n    });\n    <\/script>\n\n\n<p class=\"wp-block-paragraph\"><strong>Explore:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/highest-paying-it-jobs\/\"><strong>The highest-paying IT career options<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Growing Role of Edge AI<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Edge AI brings together embedded systems and machine learning, so you\u2019ll need to understand both the constraints of running models on small devices and the models themselves. That combination is becoming increasingly relevant as AI skills continue to shape technology roles in India. You can read more about this at: <a href=\"https:\/\/www.scaler.com\/blog\/india-ai-workforce-report-2026\/\">India AI Workforce Report 2026 by Scaler<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can explore Edge AI once your IoT fundamentals are in place. Running a model on a microcontroller is only one part of the work; you\u2019ll still need to understand why a device loses power, drops its connection, or fails an OTA update. Building those fundamentals first gives you a better base for working with Edge AI systems.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you\u2019re also considering where IoT skills can take your career, these <a href=\"https:\/\/www.scaler.com\/blog\/software-engineer-career-path\/\">Career Paths for Software Engineers<\/a> cover several directions you can explore as you build your technical skill set.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"how-to-evidence-iot-skills-on-a-resume-and-in-interviews\"><\/span><strong>How to Evidence IoT Skills on a Resume and in Interviews<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What a Credible IoT Portfolio Looks Like<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You can add two Stage 3 or 4 projects to beat eight blinking-LED projects. A reviewer should be able to inspect the system without guessing what you built or why you made certain decisions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A credible repo should include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Wiring diagram showing how the hardware is connected<\/li>\n\n\n\n<li>Bill of materials with indicative prices<\/li>\n\n\n\n<li>README explaining the architecture and key decisions<\/li>\n\n\n\n<li>Power budget showing expected and measured consumption<\/li>\n\n\n\n<li>Photo or video of the working system<\/li>\n\n\n\n<li>Failure log explaining what broke, how you diagnosed it, and what you changed<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">And that last section could be your strongest evidence. A project that documents a failed sensor reading, a dropped connection, or an OTA rollback tells an interviewer far more than a project that simply says everything worked.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your resume line should lead with the system and the result; it should read something like: Built a 4-node MQTT telemetry system with per-device X.509 provisioning and signed OTA updates; 6-month projected battery life on 2\u00d7AA.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, don\u2019t reduce your hard work to a basic line; add specificity so the recruiter understands what you\u2019ve made.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Interview Questions You Should Be Able to Answer Cold<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Be ready to explain:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Why does a 5 V sensor need a level shifter with a 3.3 V MCU?<\/li>\n\n\n\n<li>What's the difference between an ISR and a task? Why can delay() be a problem? What is priority inversion?<\/li>\n\n\n\n<li>Why MQTT instead of HTTP? What does QoS 1 provide that QoS 0 doesn't?<\/li>\n\n\n\n<li>What is a device shadow, and how would you provision 10,000 devices without a shared key?<\/li>\n\n\n\n<li>How would you push firmware safely to devices you cannot physically reach?<\/li>\n\n\n\n<li>If 1,000 devices send data at 1 Hz, what would you store, at what resolution, and for how long?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Also, don\u2019t make the mistake of preparing these as definition questions. A hiring engineer will usually push one level deeper: what happens when the assumption fails? If you say MQTT, be ready to explain the connectivity failure and reconnect strategy. If you say X.509, be ready to explain provisioning and revocation. If you say OTA, be ready to explain what happens when the new firmware doesn't boot.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That is the difference between having seen an IoT technology and having actually worked with it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Learn the steps to landing your first IT role:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/how-to-get-a-job-in-it\/\"><strong>How to Get a Job in IT: 7 Step Guide<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"common-mistakes-that-stall-iot-learners\"><\/span><strong>Common Mistakes That Stall IoT Learners<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Buying the 37-in-1 kit first:<\/strong> Having dozens of sensors can make it easy to move from one component to another without spending enough time understanding how any one of them behaves. Start with one board, one sensor, and one problem you can actually diagnose.<\/li>\n\n\n\n<li><strong>Treating the network as reliable:<\/strong> A device that works perfectly while connected to Wi-Fi can behave very differently when the connection is interrupted. Test what happens when the broker goes offline, packets are lost, or the device reconnects with stale data.<\/li>\n\n\n\n<li><strong>Skipping the power budget:<\/strong> If a device needs to run on a battery, measure its active and sleep current while you are building it rather than estimating battery life later. This becomes particularly important for devices that are expected to operate without regular access to a power source.<\/li>\n\n\n\n<li><strong>Using shared credentials across devices:<\/strong> One API key or certificate for the entire fleet means a compromised device can potentially expose the others. Give each device its own identity so its access can be revoked without affecting the rest of the fleet.<\/li>\n\n\n\n<li><strong>Leaving updates until the end:<\/strong> OTA affects the firmware architecture from the beginning. Signed updates, health checks, and rollback need to be considered before devices are deployed, because recovering a failed update becomes much harder once the hardware is in the field.<\/li>\n\n\n\n<li><strong>Jumping to LoRaWAN or TinyML too early:<\/strong> These technologies introduce additional constraints of their own. Starting with Wi-Fi and MQTT lets you work through the basic device-to-cloud flow first, after which you can introduce LoRaWAN or TinyML when a particular project gives you a reason to use them.<\/li>\n\n\n\n<li><strong>Never measuring anything:<\/strong> \u201cIt seems faster\u201d and \u201cthe battery should last a month\u201d don't tell you how the system actually performs. Measure current, latency, packet loss, memory use, storage volume, or whichever metric matters for the system you are building.<\/li>\n\n\n\n<li><strong>Building only the device half:<\/strong> A sensor reading on an OLED covers the hardware side of the project. Send that reading somewhere, store it, visualise it, and add at least one alert to work through the cloud and data side as well.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Build the skills employers look for in DevOps:<\/strong> <a href=\"https:\/\/www.scaler.com\/blog\/devops-engineer-skills\/\"><strong><\/strong><strong>Key DevOps Engineer Skills You Need<\/strong><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"conclusion\"><\/span><strong>Conclusion<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can start building your IoT skills from one area and gradually take on the others as your projects become more involved. If your background is in embedded systems, you can build out your networking and cloud skills; if you come from software or cloud, you can spend more time with electronics and firmware. The goal is to understand enough of each part to work with the complete system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Start with one sensor and make sure you understand the readings you\u2019re getting. Then connect the device to a network, send the data to a cloud system, and build on it with provisioning, OTA updates, and fleet monitoring. By the time you reach those later stages, you\u2019ll have worked with the different parts of an IoT system in a way that gives each new skill a clear purpose.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can start with a \u20b9500 board or a free simulator. Pick a small project, work through the problems it gives you, and build from there.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"faqs\"><\/span><strong>FAQs<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. What skills are required for IoT?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">IoT brings together seven areas: electronics, embedded programming, connectivity, cloud platforms, data, security, and newer areas such as edge AI and digital twins. You don't need to become an expert in all of them. The level of depth you need depends on the role you want and which part of the IoT stack you'll be working on.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. What programming language is used for IoT?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C and C++ are the main choices for firmware, while MicroPython and CircuitPython can be used for prototyping on supported hardware. The cloud side can use languages such as Python, Java, JavaScript, or Go, depending on the platform and application.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>3. How can I improve my IoT skills?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Begin with a single sensor on a breadboard, then connect it to a network using MQTT, send the data to cloud storage and dashboards, and finally move to fleet management with provisioning and OTA updates. Each stage adds one new class of problem without changing everything at once.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>4. Can I learn IoT without buying hardware?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Largely, yes. Wokwi and Tinkercad Circuits can cover much of the early work, while free cloud tiers let you practise connectivity, data and cloud skills. Physical hardware becomes necessary mainly for Tier 1, where you need to experience power, electrical noise and real sensor behaviour.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>5. Is IoT a good career in India?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yes, as a specialisation, although \u201cIoT Engineer\u201d is not usually the best first-job target. Opportunities exist across embedded product companies, industrial automation, automotive and EV, telecom, energy and utilities, agritech, medical devices, logistics and hardware startups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>6. What is the difference between IoT and embedded systems?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All IoT systems include embedded or device-side engineering, but not every embedded system is connected. Networking is the dividing line: IoT adds connectivity and the systems that process, store, or act on data outside the device.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>7. Which protocol is used in IoT?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Several protocols are used at different layers. Wi-Fi, BLE, Zigbee, Thread, LoRaWAN, cellular and Ethernet handle connectivity, while MQTT, CoAP, HTTP\/REST and WebSockets handle application-level communication. You normally choose a protocol from each layer based on the system's constraints.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>8. How long does it take to learn IoT?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With consistent part-time work, three to six months is a reasonable target for building and understanding a cloud-connected IoT system. Reaching fleet-level competence with provisioning, OTA, security, and monitoring is closer to a year, because those skills require handling more complex failure modes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An IoT device can be working perfectly on your test bench and still run into problems once it is deployed. Imagine a device that goes offline at 3 am because its Wi-Fi radio is consuming more power than the regulator can provide. You could start by looking at the network connection, only to find that [&hellip;]<\/p>\n","protected":false},"author":241,"featured_media":14457,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[35],"tags":[621],"class_list":["post-14456","post","type-post","status-publish","format-standard","has-post-thumbnail","category-software-development","tag-iot-skills"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/posts\/14456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/users\/241"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/comments?post=14456"}],"version-history":[{"count":1,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/posts\/14456\/revisions"}],"predecessor-version":[{"id":14458,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/posts\/14456\/revisions\/14458"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/media\/14457"}],"wp:attachment":[{"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/media?parent=14456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/categories?post=14456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scaler.com\/blog\/wp-json\/wp\/v2\/tags?post=14456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}