Merge branch 'kamranahmedse:master' into master

pull/7761/head
Hang 3 days ago committed by GitHub
commit 3e562d1ac7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      .astro/settings.json
  2. 1
      .gitignore
  3. 104
      contributing.md
  4. 5
      license
  5. 1
      package.json
  6. 18
      pnpm-lock.yaml
  7. BIN
      public/pdfs/roadmaps/engineering-manager.pdf
  8. 1698
      public/roadmap-content/ai-engineer.json
  9. 247
      public/roadmap-content/api-design.json
  10. 19
      public/roadmap-content/backend.json
  11. 555
      public/roadmap-content/blockchain.json
  12. 30
      public/roadmap-content/computer-science.json
  13. 36
      public/roadmap-content/cyber-security.json
  14. 29
      public/roadmap-content/devops.json
  15. 621
      public/roadmap-content/devrel.json
  16. 5
      public/roadmap-content/frontend.json
  17. 1798
      public/roadmap-content/game-developer.json
  18. 6
      public/roadmap-content/git-github.json
  19. 11
      public/roadmap-content/javascript.json
  20. 32
      public/roadmap-content/nodejs.json
  21. 4
      public/roadmap-content/postgresql-dba.json
  22. 26
      public/roadmap-content/python.json
  23. 10
      public/roadmap-content/react.json
  24. 25
      public/roadmap-content/technical-writer.json
  25. 30
      public/roadmap-content/terraform.json
  26. 11
      public/roadmap-content/typescript.json
  27. 199
      public/roadmap-content/ux-design.json
  28. 284
      public/roadmap-content/vue.json
  29. BIN
      public/roadmaps/engineering-manager.png
  30. 1
      readme.md
  31. 18
      src/components/Analytics/Analytics.astro
  32. 3
      src/components/AuthenticationFlow/GitHubButton.tsx
  33. 17
      src/components/AuthenticationFlow/GoogleButton.tsx
  34. 12
      src/components/AuthenticationFlow/LinkedInButton.tsx
  35. 3
      src/components/AuthenticationFlow/TriggerVerifyAccount.tsx
  36. 10
      src/components/Dashboard/ProgressStack.tsx
  37. 115
      src/components/FrameRenderer/ProgressNudge.tsx
  38. 8
      src/components/FrameRenderer/renderer.ts
  39. 2
      src/components/GenerateRoadmap/RoadmapTopicDetail.tsx
  40. 11
      src/components/Guide/GuideContent.astro
  41. 74
      src/components/Guide/RelatedGuides.tsx
  42. 9
      src/components/OnboardingNudge.tsx
  43. 36
      src/components/PageSponsor.tsx
  44. 104
      src/components/PageSponsors/BottomRightSponsor.tsx
  45. 195
      src/components/PageSponsors/PageSponsors.tsx
  46. 91
      src/components/PageSponsors/StickyTopSponsor.tsx
  47. 6
      src/components/Questions/QuestionGuide.astro
  48. 37
      src/components/ReactIcons/AppleCalendarIcon.tsx
  49. 22
      src/components/ReactIcons/FileIcon.tsx
  50. 40
      src/components/ReactIcons/GoogleCalendarIcon.tsx
  51. 40
      src/components/ReactIcons/OutlookCalendarIcon.tsx
  52. 2
      src/components/RelatedRoadmaps.astro
  53. 17
      src/components/RoadCard/RoadmapSelect.tsx
  54. 16
      src/components/RoadmapHeader.astro
  55. 40
      src/components/Schedule/ScheduleButton.tsx
  56. 342
      src/components/Schedule/ScheduleEventModal.tsx
  57. 2
      src/components/ShareRoadmapButton.tsx
  58. 8
      src/components/TableOfContent/TableOfContent.tsx
  59. 2
      src/components/Toast.tsx
  60. 2
      src/components/TopicDetail/TopicDetail.tsx
  61. 8
      src/components/UpdateProfile/UpdatePublicProfileForm.tsx
  62. 1
      src/data/best-practices/frontend-performance/content/compress-your-images.md
  63. 22
      src/data/changelogs/ai-roadmaps-depth.md
  64. 22
      src/data/changelogs/devops-project-ideas.md
  65. 9
      src/data/guides/backend-developer-skills.md
  66. 9
      src/data/guides/backend-developer-tools.md
  67. 9
      src/data/guides/backend-frameworks.md
  68. 281
      src/data/guides/backend-job-description.md
  69. 9
      src/data/guides/backend-languages.md
  70. 9
      src/data/guides/backend-project-ideas.md
  71. 9
      src/data/guides/backend-technologies.md
  72. 1
      src/data/guides/consistency-patterns-in-distributed-systems.md
  73. 210
      src/data/guides/devops-automation.md
  74. 9
      src/data/guides/devops-career-path.md
  75. 268
      src/data/guides/devops-lifecycle.md
  76. 9
      src/data/guides/devops-principles.md
  77. 156
      src/data/guides/devops-shift-left-testing.md
  78. 9
      src/data/guides/devops-skills.md
  79. 224
      src/data/guides/devops-vs-full-stack.md
  80. 9
      src/data/guides/frontend-developer-skills.md
  81. 13
      src/data/guides/frontend-frameworks.md
  82. 415
      src/data/guides/frontend-job-description.md
  83. 13
      src/data/guides/frontend-languages.md
  84. 202
      src/data/guides/frontend-vs-backend-ai.md
  85. 307
      src/data/guides/frontend-web-developer-portfolio.md
  86. 191
      src/data/guides/full-stack-job-description.md
  87. 183
      src/data/guides/full-stack-vs-backend.md
  88. 64
      src/data/guides/how-to-become-devops-engineer.md
  89. 21
      src/data/guides/how-to-become-frontend-developer.md
  90. 42
      src/data/projects/age-calculator.md
  91. 1
      src/data/projects/caching-server.md
  92. 36
      src/data/projects/custom-dropdown.md
  93. 1
      src/data/projects/database-backup-utility.md
  94. 5
      src/data/projects/expense-tracker.md
  95. 39
      src/data/projects/flash-cards.md
  96. 1
      src/data/projects/github-user-activity.md
  97. 1
      src/data/projects/number-guessing-game.md
  98. 4
      src/data/projects/portfolio-website.md
  99. 1
      src/data/projects/task-tracker.md
  100. 9
      src/data/question-groups/backend/backend.md
  101. Some files were not shown because too many files have changed in this diff Show More

@ -3,6 +3,6 @@
"enabled": false "enabled": false
}, },
"_variables": { "_variables": {
"lastUpdateCheck": 1728296475293 "lastUpdateCheck": 1731065649795
} }
} }

1
.gitignore vendored

@ -1,5 +1,6 @@
.idea .idea
.temp .temp
.astro
# build output # build output
dist/ dist/

@ -1,71 +1,18 @@
# Contribution # Contribution Guidelines ✨
First of all, thank you for considering to contribute. Please look at the details below: First of all, thank you for considering to contribute. Please look at the details below:
- [Hacktoberfest Contributions](#hacktoberfest-contributions)
- [New Roadmaps](#new-roadmaps) - [New Roadmaps](#new-roadmaps)
- [Existing Roadmaps](#existing-roadmaps) - [Existing Roadmaps](#existing-roadmaps)
- [Adding Projects](#adding-projects) - [Adding Projects](#adding-projects)
- [Adding Content](#adding-content) - [Adding Content](#adding-content)
- [Guidelines](#guidelines) - [Guidelines](#guidelines)
- [Good vs. Not So Good Contributions](#good-vs-not-so-good-contributions)
## Hacktoberfest Contributions
We are taking part in [Hacktoberfest 11](https://hacktoberfest.com/)!
Before you start to contribute to our project in order to satisfy [Hacktoberfest requirements](https://hacktoberfest.com/participation/#contributors), please bare in mind the following:
* There is not a Hacktoberfest t-shirt this year [(see their FAQ)](https://hacktoberfest.com/participation/#faq).
* There is not an infinite opportunity to contribute to the roadmap.sh project.
### Hacktoberfest Specific Contribution rules
As Hacktoberfest attracts a lot of contributors (which is awesome), it does require a more rigid and strictly enforced set of guidelines than the average contribution.
These are as follows:
1. No single file contributions, please contribute to a minimum of two.
Whilst single file contributions, such as adding one link to a single topic, is perfectly fine outside of hacktoberfest, this can (and probably will) result it an easy 4 pull requests for everyone and we will just become a Hacktoberfest farming project.
***Note: If you contribute the entire contents of a topic i.e. the topic has 0 copy and 0 links, this will count.***
2. Typo fixes will not count (by themselves).
Whilst fixing typos is a great thing to do, lets bundle them in with actual contributions if we see them!
3. The same basic rules apply.
- Content must be in English.
- Maximum of 8 links per topic.
- Follow the below style guide for content.
Here is an example of a **fully complete** topic:
```markdown
# Redis
Redis is an open-source, in-memory data structure store known for its speed and versatility. It supports various data types, including strings, lists, sets, hashes, and sorted sets, and provides functionalities such as caching, session management, real-time analytics, and message brokering. Redis operates as a key-value store, allowing for rapid read and write operations, and is often used to enhance performance and scalability in applications. It supports persistence options to save data to disk, replication for high availability, and clustering for horizontal scaling. Redis is widely used for scenarios requiring low-latency access to data and high-throughput performance.
Learn more from the following resources:
[@official@Link 1](https:/google.com)
[@article@Link 2](https:/google.com)
[@article@Link 3](https:/google.com)
[@course@Link 4](https:/google.com)
[@course@Link 5](https:/google.com)
[@video@Link 6](https:/google.com)
[@video@Link 7](https:/google.com)
[@video@Link 8](https:/google.com)
```
Contributions to the project that meet these requirements will be given the label `hacktoberfest-accepted` and merged, contributions that do not meet the requirements will simply be closed.
Any attempts at spam PRs will be given the `spam` tag. If you recieve 2 `spam` tags against you, you will be [disqualified from Hacktoberfest](https://hacktoberfest.com/participation/#spam).
## New Roadmaps ## New Roadmaps
For new roadmaps, you can either: For new roadmaps, you can either:
- Submit a roadmap by providing [a textual roadmap similar to this roadmap](https://gist.github.com/kamranahmedse/98758d2c73799b3a6ce17385e4c548a5) in an [issue](https://github.com/kamranahmedse/developer-roadmap/issues). - Submit a roadmap by providing [a textual roadmap similar to this roadmap](https://gist.github.com/kamranahmedse/98758d2c73799b3a6ce17385e4c548a5) in an [issue](https://github.com/kamranahmedse/developer-roadmap/issues).
- Create an interactive roadmap yourself using [our roadmap editor](https://draw.roadmap.sh/) & submit the link to that roadmap in an [issue](https://github.com/kamranahmedse/developer-roadmap/issues). - Create an interactive roadmap yourself using [our roadmap editor](https://draw.roadmap.sh/) & submit the link to that roadmap in an [issue](https://github.com/kamranahmedse/developer-roadmap/issues).
@ -73,10 +20,10 @@ For new roadmaps, you can either:
For the existing roadmaps, please follow the details listed for the nature of contribution: For the existing roadmaps, please follow the details listed for the nature of contribution:
- **Fixing Typos** — Make your changes in the [roadmap JSON file](https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps) and submit a [PR](https://github.com/kamranahmedse/developer-roadmap/pulls). - **Fixing Typos** — Make your changes in the [roadmap markdown file](https://github.com/kamranahmedse/developer-roadmap/tree/master/src/data/roadmaps) and submit a [PR](https://github.com/kamranahmedse/developer-roadmap/pulls).
- **Adding or Removing Nodes** — Please open an [issue](https://github.com/kamranahmedse/developer-roadmap/issues) with your suggestion. - **Adding or Removing Nodes** — Please open an [issue](https://github.com/kamranahmedse/developer-roadmap/issues) with your suggestion.
**Note:** Please note that our goal is <strong>not to have the biggest list of items</strong>. Our goal is to list items or skills most relevant today. **Note:** Please note that our goal is **not to have the biggest list of items**. Our goal is to list items or skills most relevant today.
## Adding Projects ## Adding Projects
@ -84,7 +31,7 @@ If you have a project idea that you think we should add to the roadmap, feel fre
The detailed format for the issue should be as follows: The detailed format for the issue should be as follows:
``` ```md
## What is this project about? ## What is this project about?
(Add an introduction to the project.) (Add an introduction to the project.)
@ -112,14 +59,14 @@ Find [the content directory inside the relevant roadmap](https://github.com/kamr
Please adhere to the following style when adding content to a topic: Please adhere to the following style when adding content to a topic:
``` ```md
# Topic Title # Topic Title
(Content) (Content)
Visit the following resources to learn more: Visit the following resources to learn more:
- [@type@Description of link](Link) - [@type@Title/Description of Link](Link)
``` ```
`@type@` must be one of the following and describe the type of content you are adding: `@type@` must be one of the following and describe the type of content you are adding:
@ -131,19 +78,19 @@ Visit the following resources to learn more:
- `@podcast@` - `@podcast@`
- `@video@` - `@video@`
It's important to add a valid type, this will help us categorize the content and display it properly on the roadmap. It's important to add a valid type, this will help us categorize the content and display it properly on the roadmap. The order of the links based on type is same as above.
## Guidelines ## Guidelines
- <p><strong>Please don't use the project for self-promotion!</strong><br /> - <p><strong>Please don't use the project for self-promotion!</strong><br/>
We believe this project is a valuable asset to the developer community, and it includes numerous helpful resources. We kindly ask you to avoid submitting pull requests for the sole purpose of self-promotion. We appreciate contributions that genuinely add value, such as guides from maintainers of well-known frameworks, and will consider accepting these even if they're self authored. Thank you for your understanding and cooperation! We believe this project is a valuable asset to the developer community, and it includes numerous helpful resources. We kindly ask you to avoid submitting pull requests for the sole purpose of self-promotion. We appreciate contributions that genuinely add value, such as guides from maintainers of well-known frameworks, and will consider accepting these even if they're self authored. Thank you for your understanding and cooperation!
- <p><strong>Adding everything available out there is not the goal!</strong><br /> - <p><strong>Adding everything available out there is not the goal!</strong><br/>
The roadmaps represent the skillset most valuable today, i.e., if you were to enter any of the listed fields today, what would you learn? There might be things that are of-course being used today, but prioritize the things that are most in demand today, e.g., agree that lots of people are using angular.js today, but you wouldn't want to learn that instead of React, Angular, or Vue. Use your critical thinking to filter out non-essential stuff. Give honest arguments for why the resource should be included.</p> The roadmaps represent the skillset most valuable today, i.e., if you were to enter any of the listed fields today, what would you learn? There might be things that are of-course being used today, but prioritize the things that are most in demand today, e.g., agree that lots of people are using angular.js today, but you wouldn't want to learn that instead of React, Angular, or Vue. Use your critical thinking to filter out non-essential stuff. Give honest arguments for why the resource should be included.</p>
- <p><strong>Do not add things you have not evaluated personally!</strong><br /> - <p><strong>Do not add things you have not evaluated personally!</strong><br/>
Use your critical thinking to filter out non-essential stuff. Give honest arguments for why the resource should be included. Have you read this book? Can you give a short article?</p> Use your critical thinking to filter out non-essential stuff. Give honest arguments for why the resource should be included. Have you read this book? Can you give a short article?</p>
@ -151,26 +98,31 @@ It's important to add a valid type, this will help us categorize the content and
If you are planning to contribute by adding content to the roadmaps, I recommend you to clone the repository, add content to the [content directory of the roadmap](./src/data/roadmaps/) and create a single PR to make it easier for me to review and merge the PR. If you are planning to contribute by adding content to the roadmaps, I recommend you to clone the repository, add content to the [content directory of the roadmap](./src/data/roadmaps/) and create a single PR to make it easier for me to review and merge the PR.
- <p><strong>Write meaningful commit messages</strong><br > - <p><strong>Write meaningful commit messages</strong><br/>
Meaningful commit messages help speed up the review process as well as help other contributors gain a good overview of the repositories commit history without having to dive into every commit. Meaningful commit messages help speed up the review process as well as help other contributors gain a good overview of the repositories commit history without having to dive into every commit.
</p> </p>
- <p><strong>Look at the existing issues/pull requests before opening new ones</strong></p> - <p><strong>Look at the existing issues/pull requests before opening new ones</strong></p>
### Good vs. Not So Good Contributions ## Good vs. Not So Good Contributions
<strong>Good</strong> <strong>Good</strong>
- New Roadmaps. - New Roadmaps.
- Engaging, fresh content links. - Engaging and fresh content links.
- Typos and grammatical fixes. - Typos and grammatical fixes.
- Content copy in topics that do not have any (or minimal copy exists). - Enhanced Existing Content.
- Content copy in topics that do not have any (or minimal copy exists).
<strong>Not So Good</strong> <strong>Not So Good</strong>
- Adding whitespace that doesn't add to the readability of the content. - Adding whitespace that doesn't add to the readability of the content.
- Rewriting content in a way that doesn't add any value. - Rewriting content in a way that doesn't add any value.
- Non-English content. - Non-English content.
- PR's that don't follow our style guide, have no description, and a default title. - PR's that don't follow our style guide, have no description, and a default title.
- Links to your own blog articles. - Links to your own blog articles.
***
Have a look at the [License](./license) file.

@ -1,7 +1,6 @@
Everything including text and images in this project are protected by the copyright laws. Everything including text and images in this project are protected by the copyright laws.
You are allowed to use this material for personal use but are not allowed to use it for You are allowed to use this material for personal use but are not allowed to use it for
any other purpose including publishing the images, the project files or the content in the any other purpose including publishing the images, the project files or the content in the images in any form either digital, non-digital, textual, graphical or written formats.
images in any form either digital, non-digital, textual, graphical or written formats.
You are allowed to share the links to the repository or the website roadmap.sh but not You are allowed to share the links to the repository or the website roadmap.sh but not
the content for any sort of usage that involves the content of this repository taken out the content for any sort of usage that involves the content of this repository taken out
of the repository and be shared from any other medium including but not limited to blog of the repository and be shared from any other medium including but not limited to blog
@ -9,7 +8,7 @@ posts, articles, newsletters, you must get prior consent from the understated. T
conditions do not apply to the readonly GitHub forks created using the Fork button on conditions do not apply to the readonly GitHub forks created using the Fork button on
GitHub with the whole purpose of contributing to the project. GitHub with the whole purpose of contributing to the project.
Copyright © 2023 Kamran Ahmed <kamranahmed.se@gmail.com> Copyright © 2017 - Present. Kamran Ahmed <kamranahmed.se@gmail.com>
Please note that I am really flexible with allowing the usage of the content in this Please note that I am really flexible with allowing the usage of the content in this
repository. If you reach out to me with a brief detail of why and how you would like repository. If you reach out to me with a brief detail of why and how you would like

@ -37,6 +37,7 @@
"@nanostores/react": "^0.8.0", "@nanostores/react": "^0.8.0",
"@napi-rs/image": "^1.9.2", "@napi-rs/image": "^1.9.2",
"@resvg/resvg-js": "^2.6.2", "@resvg/resvg-js": "^2.6.2",
"@tanstack/react-query": "^5.59.16",
"@types/react": "^18.3.11", "@types/react": "^18.3.11",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.1",
"astro": "^4.16.1", "astro": "^4.16.1",

@ -32,6 +32,9 @@ importers:
'@resvg/resvg-js': '@resvg/resvg-js':
specifier: ^2.6.2 specifier: ^2.6.2
version: 2.6.2 version: 2.6.2
'@tanstack/react-query':
specifier: ^5.59.16
version: 5.59.16(react@18.3.1)
'@types/react': '@types/react':
specifier: ^18.3.11 specifier: ^18.3.11
version: 18.3.11 version: 18.3.11
@ -1198,6 +1201,14 @@ packages:
peerDependencies: peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
'@tanstack/query-core@5.59.16':
resolution: {integrity: sha512-crHn+G3ltqb5JG0oUv6q+PMz1m1YkjpASrXTU+sYWW9pLk0t2GybUHNRqYPZWhxgjPaVGC4yp92gSFEJgYEsPw==}
'@tanstack/react-query@5.59.16':
resolution: {integrity: sha512-MuyWheG47h6ERd4PKQ6V8gDyBu3ThNG22e1fRVwvq6ap3EqsFhyuxCAwhNP/03m/mLg+DAb0upgbPaX6VB+CkQ==}
peerDependencies:
react: ^18 || ^19
'@tybys/wasm-util@0.9.0': '@tybys/wasm-util@0.9.0':
resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==}
@ -4278,6 +4289,13 @@ snapshots:
postcss-selector-parser: 6.0.10 postcss-selector-parser: 6.0.10
tailwindcss: 3.4.13 tailwindcss: 3.4.13
'@tanstack/query-core@5.59.16': {}
'@tanstack/react-query@5.59.16(react@18.3.1)':
dependencies:
'@tanstack/query-core': 5.59.16
react: 18.3.1
'@tybys/wasm-util@0.9.0': '@tybys/wasm-util@0.9.0':
dependencies: dependencies:
tslib: 2.7.0 tslib: 2.7.0

File diff suppressed because it is too large Load Diff

@ -9,7 +9,17 @@
"description": "APIs, or Application Programming Interfaces, provide a manner in which software applications communicate with each other. They abstract the complexity of applications to allow developers to use only the essentials of the software they are working with. They define the methods and data formats an application should use in order to perform tasks, like sending, retrieving, or modifying data. Understanding APIs is integral to mastering modern software development, primarily because they allow applications to exchange data and functionality with ease, thus enabling integration and convergence of technological services. Therefore, a solid understanding of what APIs are forms the basic cornerstone of API design.\n\nVisit the following resources to learn more:", "description": "APIs, or Application Programming Interfaces, provide a manner in which software applications communicate with each other. They abstract the complexity of applications to allow developers to use only the essentials of the software they are working with. They define the methods and data formats an application should use in order to perform tasks, like sending, retrieving, or modifying data. Understanding APIs is integral to mastering modern software development, primarily because they allow applications to exchange data and functionality with ease, thus enabling integration and convergence of technological services. Therefore, a solid understanding of what APIs are forms the basic cornerstone of API design.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "What is an API?", "title": "Getting Started with APIs - Postman",
"url": "https://www.postman.com/what-is-an-api/",
"type": "article"
},
{
"title": "API - IBM",
"url": "https://www.ibm.com/topics/api",
"type": "article"
},
{
"title": "What is an API? - AWS",
"url": "https://aws.amazon.com/what-is/api/", "url": "https://aws.amazon.com/what-is/api/",
"type": "article" "type": "article"
}, },
@ -61,7 +71,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "HTTP: 1.0 vs. 1.1 vs 2.0 vs. 3.0", "title": "HTTP: 1.0 vs 1.1 vs 2.0 vs 3.0",
"url": "https://www.baeldung.com/cs/http-versions", "url": "https://www.baeldung.com/cs/http-versions",
"type": "article" "type": "article"
} }
@ -72,7 +82,7 @@
"description": "HTTP (Hypertext Transfer Protocol) Methods play a significant role in API design. They define the type of request a client can make to a server, providing the framework for interaction between client and server. Understanding HTTP methods is paramount to creating a robust and effective API. Some of the common HTTP methods used in API design include GET, POST, PUT, DELETE, and PATCH. Each of these methods signifies a different type of request, allowing for various interactions with your API endpoints. This in turn creates a more dynamic, functional, and user-friendly API.\n\nLearn more from the following resources:", "description": "HTTP (Hypertext Transfer Protocol) Methods play a significant role in API design. They define the type of request a client can make to a server, providing the framework for interaction between client and server. Understanding HTTP methods is paramount to creating a robust and effective API. Some of the common HTTP methods used in API design include GET, POST, PUT, DELETE, and PATCH. Each of these methods signifies a different type of request, allowing for various interactions with your API endpoints. This in turn creates a more dynamic, functional, and user-friendly API.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "HTTP request methods", "title": "HTTP Methods - MDN",
"url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods", "url": "https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods",
"type": "article" "type": "article"
}, },
@ -82,7 +92,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "What are HTTP Methods?", "title": "What are HTTP Methods? - Postman",
"url": "https://blog.postman.com/what-are-http-methods/", "url": "https://blog.postman.com/what-are-http-methods/",
"type": "article" "type": "article"
} }
@ -124,12 +134,12 @@
"type": "article" "type": "article"
}, },
{ {
"title": "What are HTTP headers?", "title": "What are HTTP Headers?",
"url": "https://blog.postman.com/what-are-http-headers/", "url": "https://blog.postman.com/what-are-http-headers/",
"type": "article" "type": "article"
}, },
{ {
"title": "What are HTTP Headers & Understand different types of HTTP headers", "title": "What are HTTP Headers & Types of HTTP headers",
"url": "https://requestly.com/blog/what-are-http-headers-understand-different-types-of-http-headers/", "url": "https://requestly.com/blog/what-are-http-headers-understand-different-types-of-http-headers/",
"type": "article" "type": "article"
} }
@ -150,7 +160,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Path parameters", "title": "Path Parameters",
"url": "https://help.iot-x.com/api/how-to-use-the-api/parameters/path-parameters", "url": "https://help.iot-x.com/api/how-to-use-the-api/parameters/path-parameters",
"type": "article" "type": "article"
} }
@ -166,7 +176,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Cookes - Mozilla", "title": "Cookies - Mozilla",
"url": "https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies", "url": "https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/cookies",
"type": "article" "type": "article"
} }
@ -182,7 +192,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Content Negotiation in practice", "title": "Content Negotiation in Practice",
"url": "https://softwaremill.com/content-negotiation-in-practice/", "url": "https://softwaremill.com/content-negotiation-in-practice/",
"type": "article" "type": "article"
} }
@ -258,8 +268,19 @@
}, },
"o8i093VQv-T5Qf1yGqU0R": { "o8i093VQv-T5Qf1yGqU0R": {
"title": "Different API Styles", "title": "Different API Styles",
"description": "Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering efficient overall system architecture, and promoting an intuitive and easy-to-use application.", "description": "Application Programming Interface (API) design isn't a one-size-fits-all endeavor. APIs can be structured in various styles, each with its own unique characteristics, advantages, and use cases. Early identification of the appropriate API style is crucial in ensuring a functional, efficient and seamless end-user experience. Commonly used API styles include REST, SOAP, GraphQL, and gRPC. Understanding these diverse API styles would help in making better design choices, fostering efficient overall system architecture, and promoting an intuitive and easy-to-use application.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "API Styles",
"url": "https://www.redhat.com/architect/api-styles",
"type": "article"
},
{
"title": "Top API Styles",
"url": "https://www.youtube.com/watch?v=4vLxWqE94l4",
"type": "video"
}
]
}, },
"BvwdASMvuNQ9DNgzdSZ4o": { "BvwdASMvuNQ9DNgzdSZ4o": {
"title": "RESTful APIs", "title": "RESTful APIs",
@ -287,45 +308,30 @@
"description": "Simple JSON (JavaScript Object Notation) APIs are a popular form of API or \"Application Programming Interface\" which utilise JSON to exchange data between servers and web applications. This method has gained prominence mainly for its simplicity, light weight, and easy readability. In the context of API design, a well-structured JSON API allows developers to efficiently interact with the backend and retrieve only the data they need in a consistent and comprehensible manner. From reducing redundant data to enabling quick parsing, Simple JSON APIs provide numerous benefits to improve the overall performance of applications. Designing a good JSON API requires careful planning, sound knowledge of HTTP methods, endpoints, error handling mechanisms, and most importantly, a clear understanding of the application's data requirements.\n\nLearn more from the following resources:", "description": "Simple JSON (JavaScript Object Notation) APIs are a popular form of API or \"Application Programming Interface\" which utilise JSON to exchange data between servers and web applications. This method has gained prominence mainly for its simplicity, light weight, and easy readability. In the context of API design, a well-structured JSON API allows developers to efficiently interact with the backend and retrieve only the data they need in a consistent and comprehensible manner. From reducing redundant data to enabling quick parsing, Simple JSON APIs provide numerous benefits to improve the overall performance of applications. Designing a good JSON API requires careful planning, sound knowledge of HTTP methods, endpoints, error handling mechanisms, and most importantly, a clear understanding of the application's data requirements.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "A specification for building JSON APIs", "title": "Specification for Building JSON APIs",
"url": "https://github.com/json-api/json-api", "url": "https://github.com/json-api/json-api",
"type": "opensource" "type": "opensource"
}, },
{ {
"title": "JSON API: Explained in 4 minutes (+ EXAMPLES)", "title": "JSON API: Explained in 4 Minutes",
"url": "https://www.youtube.com/watch?v=N-4prIh7t38", "url": "https://www.youtube.com/watch?v=N-4prIh7t38",
"type": "video" "type": "video"
} }
] ]
}, },
"Wwd-0PjrtViMFWxRGaQey": { "Wwd-0PjrtViMFWxRGaQey": {
"title": "gRPC APIs", "title": "SOAP APIs",
"description": "gRPC is a platform agnostic serialization protocol that is used to communicate between services. Designed by Google in 2015, it is a modern alternative to REST APIs. It is a binary protocol that uses HTTP/2 as a transport layer. It is a high performance, open source, general-purpose RPC framework that puts mobile and HTTP/2 first.\n\nIt's main use case is for communication between two different languages within the same application. You can use Python to communicate with Go, or Java to communicate with C#.\n\ngRPC uses the protocol buffer language to define the structure of the data that is\n\nVisit the following resources to learn more:", "description": "SOAP (Simple Object Access Protocol) APIs are a standard communication protocol system that permits programs that run on different operating systems (like Linux and Windows) to communicate using Hypertext Transfer Protocol (HTTP) and its Extensible Markup Language (XML). In the context of API Design, SOAP APIs offer a robust and well-defined process for interaction between various software applications, mostly over a network. They are highly extensible, versatile and support a wide range of communications protocols. Despite being more complex compared to other API types like REST, SOAP APIs ensure high reliability and security, making them the choice for certain business-focused, high-transaction applications.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "gRPC Website", "title": "What are SOAP APIs?",
"url": "https://grpc.io/", "url": "https://www.indeed.com/career-advice/career-development/what-is-soap-api",
"type": "article" "type": "article"
}, },
{ {
"title": "gRPC Introduction", "title": "SOAP vs REST 101: Understand The Differences",
"url": "https://grpc.io/docs/what-is-grpc/introduction/", "url": "https://www.soapui.org/learn/api/soap-vs-rest-api/",
"type": "article" "type": "article"
},
{
"title": "gRPC Core Concepts",
"url": "https://grpc.io/docs/what-is-grpc/core-concepts/",
"type": "article"
},
{
"title": "Explore top posts about gRPC",
"url": "https://app.daily.dev/tags/grpc?ref=roadmapsh",
"type": "article"
},
{
"title": "Stephane Maarek - gRPC Introduction",
"url": "https://youtu.be/XRXTsQwyZSU",
"type": "video"
} }
] ]
}, },
@ -338,13 +344,18 @@
"url": "https://github.com/graphql-kit/graphql-apis", "url": "https://github.com/graphql-kit/graphql-apis",
"type": "opensource" "type": "opensource"
}, },
{
"title": "Visit Dedicated GraphQL Roadmap",
"url": "https://roadmap.sh/graphql",
"type": "article"
},
{ {
"title": "GraphQL Website", "title": "GraphQL Website",
"url": "https://graphql.org/", "url": "https://graphql.org/",
"type": "article" "type": "article"
}, },
{ {
"title": "GraphQL explained in 100 seconds", "title": "GraphQL Explained in 100 Seconds",
"url": "https://www.youtube.com/watch?v=eIQh02xuVw4", "url": "https://www.youtube.com/watch?v=eIQh02xuVw4",
"type": "video" "type": "video"
} }
@ -355,12 +366,12 @@
"description": "Building JSON/RESTful APIs involves designing and implementing APIs that adhere to the architectural constraints of Representational State Transfer (REST). These APIs use JSON (JavaScript Object Notation) as a format for information interchange, due to its lightweight, easy-to-understand, and universally accepted nature. A well-designed RESTful API, utilizing JSON, is key in developing applications that are scalable, maintainable, and easily integrated with other systems. This design approach enables the resources on a server to be accessed and manipulated using standard HTTP protocols, facilitating communication between different services and systems. Furthermore, it enables client-server interactions to be stateless, meaning each request from a client must contain all the information needed by the server to understand and process the request.\n\nLearn more from the following resources:", "description": "Building JSON/RESTful APIs involves designing and implementing APIs that adhere to the architectural constraints of Representational State Transfer (REST). These APIs use JSON (JavaScript Object Notation) as a format for information interchange, due to its lightweight, easy-to-understand, and universally accepted nature. A well-designed RESTful API, utilizing JSON, is key in developing applications that are scalable, maintainable, and easily integrated with other systems. This design approach enables the resources on a server to be accessed and manipulated using standard HTTP protocols, facilitating communication between different services and systems. Furthermore, it enables client-server interactions to be stateless, meaning each request from a client must contain all the information needed by the server to understand and process the request.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "A specification for building APIs in JSON", "title": "Specification for Building APIs in JSON",
"url": "https://jsonapi.org/", "url": "https://jsonapi.org/",
"type": "article" "type": "article"
}, },
{ {
"title": "How to make a REST API", "title": "How to Make a RESTful API",
"url": "https://www.integrate.io/blog/how-to-make-a-rest-api/", "url": "https://www.integrate.io/blog/how-to-make-a-rest-api/",
"type": "article" "type": "article"
}, },
@ -392,7 +403,7 @@
"description": "URI (Uniform Resource Identifier) is a string of characters used to identify a name or a resource on the Internet. Designing URIs carefully is a crucial part of creating a smooth API interface that is easy to understand, remember and use. Good URI design ensures that related resources are grouped together in a logical manner and can greatly impact the usability and maintainability of an API. It involves crafting standardised, intuitive HTTP paths that take advantage of the hierarchical nature of URLs to provide a better structure to the API. This hierarchy can then be used to expand the API over time without breaking existing clients' functionality.\n\nLearn more from the following resources:", "description": "URI (Uniform Resource Identifier) is a string of characters used to identify a name or a resource on the Internet. Designing URIs carefully is a crucial part of creating a smooth API interface that is easy to understand, remember and use. Good URI design ensures that related resources are grouped together in a logical manner and can greatly impact the usability and maintainability of an API. It involves crafting standardised, intuitive HTTP paths that take advantage of the hierarchical nature of URLs to provide a better structure to the API. This hierarchy can then be used to expand the API over time without breaking existing clients' functionality.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Guidelines for URI design", "title": "Guidelines for URI Design",
"url": "https://css-tricks.com/guidelines-for-uri-design/", "url": "https://css-tricks.com/guidelines-for-uri-design/",
"type": "article" "type": "article"
}, },
@ -408,12 +419,12 @@
"description": "API Versioning is a critical component of API Design and Management. As the APIs evolve over time to meet the new business requirements and functionality enhancements, it is crucial to manage the changes in a way that doesn't break the existing client applications. This calls for effective versioning strategies in API design. There are different versioning strategies like URI versioning, Request Header versioning, and Media Type versioning which are adopted based on the ease of implementation, client compatibility, and accessibility. Understanding each strategy and its pros and cons can lead to better API Design and maintainability.\n\nLearn more from the following resources:", "description": "API Versioning is a critical component of API Design and Management. As the APIs evolve over time to meet the new business requirements and functionality enhancements, it is crucial to manage the changes in a way that doesn't break the existing client applications. This calls for effective versioning strategies in API design. There are different versioning strategies like URI versioning, Request Header versioning, and Media Type versioning which are adopted based on the ease of implementation, client compatibility, and accessibility. Understanding each strategy and its pros and cons can lead to better API Design and maintainability.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is API versioning?", "title": "What is API Versioning?",
"url": "https://www.postman.com/api-platform/api-versioning/", "url": "https://www.postman.com/api-platform/api-versioning/",
"type": "article" "type": "article"
}, },
{ {
"title": "4 API versioning best practices", "title": "API Versioning Best Practices",
"url": "https://kodekloud.com/blog/api-versioning-best-practices/", "url": "https://kodekloud.com/blog/api-versioning-best-practices/",
"type": "article" "type": "article"
}, },
@ -513,7 +524,7 @@
"description": "Error Handling is a crucial aspect of API design that ensures the stability, usability, and reliability of the API in production. APIs are designed to help systems communicate with each other. However, there can be instances where these systems might encounter exceptions or errors. The process of predicting, catching, and managing these error occurrences is what we refer to as 'Error Handling'. In the context of API Design, it involves defining and implementing specific strategies to detect, manage and inform consumers of any exception or error that occurs while executing requests. Configuring this appropriately provides a more robust and seamless communication experience, enabling developers to debug and rectify issues more efficiently.\n\nLearn more from the following resources:", "description": "Error Handling is a crucial aspect of API design that ensures the stability, usability, and reliability of the API in production. APIs are designed to help systems communicate with each other. However, there can be instances where these systems might encounter exceptions or errors. The process of predicting, catching, and managing these error occurrences is what we refer to as 'Error Handling'. In the context of API Design, it involves defining and implementing specific strategies to detect, manage and inform consumers of any exception or error that occurs while executing requests. Configuring this appropriately provides a more robust and seamless communication experience, enabling developers to debug and rectify issues more efficiently.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Best practices for API error handling", "title": "Best Practices for API Error Handling",
"url": "https://blog.postman.com/best-practices-for-api-error-handling/", "url": "https://blog.postman.com/best-practices-for-api-error-handling/",
"type": "article" "type": "article"
}, },
@ -563,13 +574,24 @@
}, },
"cQnQ9v3mH27MGNwetz3JW": { "cQnQ9v3mH27MGNwetz3JW": {
"title": "Authentication Methods", "title": "Authentication Methods",
"description": "Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs.", "description": "Application Programming Interfaces (APIs) are critical components in software development that allow different software systems to communicate and share functionality. To ensure secure communication, it's essential to authenticate the parties involved in the API transactions. The authentication process confirms the identity of the API user. There are numerous authentication methods available when designing an API, each with its own pros and cons. This includes Basic Authentication, API Key Authentication, OAuth, and JWT among others. Understanding these different methods and their best use cases is fundamental to designing secure and effective APIs.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "API Authentication",
"url": "https://www.postman.com/api-platform/api-authentication/",
"type": "article"
}
]
}, },
"0FzHERK5AeYL5wv1FBJbH": { "0FzHERK5AeYL5wv1FBJbH": {
"title": "Basic Auth", "title": "Basic Auth",
"description": "Basic Auth, short for Basic Authentication, is a simple method often used in API design for handling user authentication. In this method, client credentials, consisting of a username and password pair, are passed to the API server in a field in the HTTP header. The server then verifies these credentials before granting access to protected resources. Although Basic Auth is straightforward to implement, it is less secure compared to more advanced methods since it involves transmitting credentials in an encoded, but not encrypted, format. It is often used in cases where simplicity is paramount, or High security levels are not required.\n\nLearn more from the following resources:", "description": "Basic Auth, short for Basic Authentication, is a simple method often used in API design for handling user authentication. In this method, client credentials, consisting of a username and password pair, are passed to the API server in a field in the HTTP header. The server then verifies these credentials before granting access to protected resources. Although Basic Auth is straightforward to implement, it is less secure compared to more advanced methods since it involves transmitting credentials in an encoded, but not encrypted, format. It is often used in cases where simplicity is paramount, or High security levels are not required.\n\nLearn more from the following resources:",
"links": [ "links": [
{
"title": "Basic Authentication",
"url": "https://roadmap.sh/guides/basic-authentication",
"type": "article"
},
{ {
"title": "Basic Auth Generation Header", "title": "Basic Auth Generation Header",
"url": "https://www.debugbear.com/basic-auth-header-generator", "url": "https://www.debugbear.com/basic-auth-header-generator",
@ -591,6 +613,11 @@
"title": "Token Based Auth", "title": "Token Based Auth",
"description": "Token-based authentication is a crucial aspect of API design. It involves providing the user with a token that validates their identity after they have successfully logged in. Once the token is obtained, users can use it to access resources and services provided by the API. This token is usually passed in the headers of subsequent HTTP requests done by the client. One key advantage of token-based auth is that tokens can be created and checked by the server without storing them persistently, which can help to scale applications more easily. This authentication method enhances the security and scalability of web applications and it is mainly used in modern API strategies, including RESTful APIs.\n\nLearn more from the following resources:", "description": "Token-based authentication is a crucial aspect of API design. It involves providing the user with a token that validates their identity after they have successfully logged in. Once the token is obtained, users can use it to access resources and services provided by the API. This token is usually passed in the headers of subsequent HTTP requests done by the client. One key advantage of token-based auth is that tokens can be created and checked by the server without storing them persistently, which can help to scale applications more easily. This authentication method enhances the security and scalability of web applications and it is mainly used in modern API strategies, including RESTful APIs.\n\nLearn more from the following resources:",
"links": [ "links": [
{
"title": "Token Based Authentication",
"url": "https://roadmap.sh/guides/token-authentication",
"type": "article"
},
{ {
"title": "What Is Token-Based Authentication?", "title": "What Is Token-Based Authentication?",
"url": "https://www.okta.com/uk/identity-101/what-is-token-based-authentication/", "url": "https://www.okta.com/uk/identity-101/what-is-token-based-authentication/",
@ -600,11 +627,6 @@
"title": "Session vs Token Authentication in 100 Seconds", "title": "Session vs Token Authentication in 100 Seconds",
"url": "https://www.youtube.com/watch?v=UBUNrFtufWo", "url": "https://www.youtube.com/watch?v=UBUNrFtufWo",
"type": "video" "type": "video"
},
{
"title": "Token based auth",
"url": "https://www.youtube.com/watch?v=woNZJMSNbuo",
"type": "video"
} }
] ]
}, },
@ -612,6 +634,11 @@
"title": "JWT ", "title": "JWT ",
"description": "JSON Web Tokens, or JWT, are a popular and secure method of transferring information between two parties in the domain of API design. As a compact, URL-safe means of representing claims to be transferred between two parties, they play a vital role in security and authorization in modern APIs. By encoding these claims, the information can be verified and trusted with a digital signature - ensuring that the API end-points can handle requests in a secure and reliable way. JWT is a relatively lightweight and scalable method that brings improved authentication and information exchange processes in API design.\n\nLearn more from the following resources:", "description": "JSON Web Tokens, or JWT, are a popular and secure method of transferring information between two parties in the domain of API design. As a compact, URL-safe means of representing claims to be transferred between two parties, they play a vital role in security and authorization in modern APIs. By encoding these claims, the information can be verified and trusted with a digital signature - ensuring that the API end-points can handle requests in a secure and reliable way. JWT is a relatively lightweight and scalable method that brings improved authentication and information exchange processes in API design.\n\nLearn more from the following resources:",
"links": [ "links": [
{
"title": "JWT Authentication",
"url": "https://roadmap.sh/guides/jwt-authentication",
"type": "article"
},
{ {
"title": "Introduction to JSON Web Tokens", "title": "Introduction to JSON Web Tokens",
"url": "https://jwt.io/introduction", "url": "https://jwt.io/introduction",
@ -633,6 +660,11 @@
"title": "OAuth 2.0", "title": "OAuth 2.0",
"description": "OAuth 2.0 is an authorization framework that allows applications to obtain limited access to user accounts on an HTTP service, such as Facebook, GitHub, DigitalOcean, and others. It works by delegating user authentication to the service that hosts the user account and authorizing third-party applications to access the user account. OAuth 2.0 defines four roles: resource owner, client, resource server and authorization server. With regards to API design, OAuth 2.0 can be used to protect API endpoints by ensuring that the client applications having valid access tokens can only interact with the API. It provides detailed workflow processes and a set of protocols for the client application to get authorization to access resources.\n\nLearn more from the following resources:", "description": "OAuth 2.0 is an authorization framework that allows applications to obtain limited access to user accounts on an HTTP service, such as Facebook, GitHub, DigitalOcean, and others. It works by delegating user authentication to the service that hosts the user account and authorizing third-party applications to access the user account. OAuth 2.0 defines four roles: resource owner, client, resource server and authorization server. With regards to API design, OAuth 2.0 can be used to protect API endpoints by ensuring that the client applications having valid access tokens can only interact with the API. It provides detailed workflow processes and a set of protocols for the client application to get authorization to access resources.\n\nLearn more from the following resources:",
"links": [ "links": [
{
"title": "OAuth",
"url": "https://roadmap.sh/guides/oauth",
"type": "article"
},
{ {
"title": "OAuth Website", "title": "OAuth Website",
"url": "https://oauth.net/2/", "url": "https://oauth.net/2/",
@ -655,7 +687,7 @@
"description": "Application Programming Interfaces (APIs) are critical for building software applications. Among several key considerations during API design, one is deciding how to implement authentication and security. Session Based Authentication is one popular way to apply security in API design.\n\nThis method revolves around the server creating a session for the user after they successfully log in, associating it with a session identifier. This Session ID is then stored client-side within a cookie. On subsequent requests, the server validates the Session ID before processing the API call. The server will destroy the session after the user logs out, thereby invalidating the Session ID.\n\nUnderstanding Session Based Authentication is crucial for secure API design, especially in scenarios where security is a top priority or in legacy systems where this method is prevalent.\n\nLearn more from the following resources:", "description": "Application Programming Interfaces (APIs) are critical for building software applications. Among several key considerations during API design, one is deciding how to implement authentication and security. Session Based Authentication is one popular way to apply security in API design.\n\nThis method revolves around the server creating a session for the user after they successfully log in, associating it with a session identifier. This Session ID is then stored client-side within a cookie. On subsequent requests, the server validates the Session ID before processing the API call. The server will destroy the session after the user logs out, thereby invalidating the Session ID.\n\nUnderstanding Session Based Authentication is crucial for secure API design, especially in scenarios where security is a top priority or in legacy systems where this method is prevalent.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Session Based Authentication - Roadmap.sh", "title": "Session Based Authentication",
"url": "https://roadmap.sh/guides/session-based-authentication", "url": "https://roadmap.sh/guides/session-based-authentication",
"type": "article" "type": "article"
}, },
@ -673,8 +705,14 @@
}, },
"nHbn8_sMY7J8o6ckbD-ER": { "nHbn8_sMY7J8o6ckbD-ER": {
"title": "Authorization Methods", "title": "Authorization Methods",
"description": "In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others.", "description": "In API design, authorization methods play a crucial role in ensuring the security and integrity of data transactions. They are the mechanisms through which an API identifies and validates a user, system, or application before granting them access to specific resources. These methods include Basic Authentication, OAuth, Token-based authentication, JSON Web Tokens (JWT), and API Key based, among others. So, understanding these methods enhances the ability to design APIs that effectively protect resources while allowing necessary access. Each method has its own pros and cons, usage scenarios and security features that make them more suitable for certain situations rather than others.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "API Authorization Methods",
"url": "https://konghq.com/blog/engineering/common-api-authentication-methods",
"type": "article"
}
]
}, },
"wFsbmMi5Ey9UyDADdbdPW": { "wFsbmMi5Ey9UyDADdbdPW": {
"title": "Role Based Access Control (RBAC)", "title": "Role Based Access Control (RBAC)",
@ -686,12 +724,12 @@
"type": "article" "type": "article"
}, },
{ {
"title": "What is role-based access control (RBAC)?", "title": "What is Role-based Access Control (RBAC)?",
"url": "https://www.redhat.com/en/topics/security/what-is-role-based-access-control", "url": "https://www.redhat.com/en/topics/security/what-is-role-based-access-control",
"type": "article" "type": "article"
}, },
{ {
"title": "Role-based access control (RBAC) vs. Attribute-based access control (ABAC)", "title": "Role-based Access Control (RBAC) vs. Attribute-based Access Control (ABAC)",
"url": "https://www.youtube.com/watch?v=rvZ35YW4t5k", "url": "https://www.youtube.com/watch?v=rvZ35YW4t5k",
"type": "video" "type": "video"
} }
@ -718,12 +756,12 @@
"description": "API keys and management is an integral part of API design. An API key is a unique identifier used to authenticate a user, developer, or calling program to an API. This ensures security and control over API endpoints, as only those with a valid API key can make requests. API Management, on the other hand, refers to the practices and tools that enable an organization to govern and monitor its API usage. It involves all the aspects of managing APIs including design, deployment, documentation, security, versioning, and analytics. Both elements play crucial roles in securing and organizing API access for efficient and controlled data sharing and communication.\n\nLearn more from the following resources:", "description": "API keys and management is an integral part of API design. An API key is a unique identifier used to authenticate a user, developer, or calling program to an API. This ensures security and control over API endpoints, as only those with a valid API key can make requests. API Management, on the other hand, refers to the practices and tools that enable an organization to govern and monitor its API usage. It involves all the aspects of managing APIs including design, deployment, documentation, security, versioning, and analytics. Both elements play crucial roles in securing and organizing API access for efficient and controlled data sharing and communication.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is API key management?", "title": "What is API Key Management?",
"url": "https://www.akeyless.io/secrets-management-glossary/api-key-management/", "url": "https://www.akeyless.io/secrets-management-glossary/api-key-management/",
"type": "article" "type": "article"
}, },
{ {
"title": "API Key Management | Definition and Best Practices", "title": "API Key Management - Definition and Best Practices",
"url": "https://infisical.com/blog/api-key-management", "url": "https://infisical.com/blog/api-key-management",
"type": "article" "type": "article"
} }
@ -760,13 +798,13 @@
"type": "article" "type": "article"
}, },
{ {
"title": "What is Swagger?", "title": "OpenAPI Inititive",
"url": "https://blog.hubspot.com/website/what-is-swagger", "url": "https://www.openapis.org/",
"type": "article" "type": "article"
}, },
{ {
"title": "OpenAPI Inititive", "title": "What is Swagger?",
"url": "https://www.openapis.org/", "url": "https://blog.hubspot.com/website/what-is-swagger",
"type": "article" "type": "article"
} }
] ]
@ -781,7 +819,12 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Postman Api Testing Tutorial for beginners", "title": "Postman Docs",
"url": "https://www.postman.com/api-documentation-tool/",
"type": "article"
},
{
"title": "Postman Tutorial for Beginners",
"url": "https://www.youtube.com/watch?v=MFxk5BZulVU", "url": "https://www.youtube.com/watch?v=MFxk5BZulVU",
"type": "video" "type": "video"
} }
@ -792,12 +835,12 @@
"description": "[Readme.com](http://Readme.com) is an invaluable tool in the realm of API Design, renowned for providing a collaborative platform for creating beautiful, dynamic and intuitive documentation. It's a tool which aids developers in outlining clear, comprehensive documentation for their API interfaces. The API documentation created with [Readme.com](http://Readme.com) is not just about the presentation of information, but enhances the reader's understanding by making it interactive. This interactive approach encourages practical learning and offers insights into how the API will behave under different circumstances. With [Readme.com](http://Readme.com), developers can create a user-focused documentation environment that streamlines the learning process and makes their APIs easier to consume and implement.\n\nLearn more from the following resources:", "description": "[Readme.com](http://Readme.com) is an invaluable tool in the realm of API Design, renowned for providing a collaborative platform for creating beautiful, dynamic and intuitive documentation. It's a tool which aids developers in outlining clear, comprehensive documentation for their API interfaces. The API documentation created with [Readme.com](http://Readme.com) is not just about the presentation of information, but enhances the reader's understanding by making it interactive. This interactive approach encourages practical learning and offers insights into how the API will behave under different circumstances. With [Readme.com](http://Readme.com), developers can create a user-focused documentation environment that streamlines the learning process and makes their APIs easier to consume and implement.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "readmeio", "title": "ReadMe",
"url": "https://github.com/readmeio", "url": "https://github.com/orgs/readmeio/repositories?type=source",
"type": "opensource" "type": "opensource"
}, },
{ {
"title": "readme.com", "title": "ReadMe Website",
"url": "https://readme.com", "url": "https://readme.com",
"type": "article" "type": "article"
} }
@ -856,12 +899,12 @@
"description": "API design has rapidly emerged as a vital component of software development. When designing an API, it is crucial to follow best practices to ensure optimization, scalability, and efficiency. The best practices in API design revolve around principles such as simplicity, consistency, security, and proper documentation among others. These practices not only smoothens the development process but also makes the API more user-friendly, stable, and easily maintainable. Thus, following the best practices in API design is not an option but rather a must for developers and organizations looking to create APIs that last longer and perform better.\n\nLearn more from the following resources:", "description": "API design has rapidly emerged as a vital component of software development. When designing an API, it is crucial to follow best practices to ensure optimization, scalability, and efficiency. The best practices in API design revolve around principles such as simplicity, consistency, security, and proper documentation among others. These practices not only smoothens the development process but also makes the API more user-friendly, stable, and easily maintainable. Thus, following the best practices in API design is not an option but rather a must for developers and organizations looking to create APIs that last longer and perform better.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Best practices for REST API design", "title": "Best Practices for REST API Design",
"url": "https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/", "url": "https://stackoverflow.blog/2020/03/02/best-practices-for-rest-api-design/",
"type": "article" "type": "article"
}, },
{ {
"title": "Best practices in API design", "title": "Best Practices in API Design",
"url": "https://swagger.io/resources/articles/best-practices-in-api-design/", "url": "https://swagger.io/resources/articles/best-practices-in-api-design/",
"type": "article" "type": "article"
} }
@ -893,7 +936,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "How does API monitoring improve API performance?", "title": "How does API Monitoring Improves API Performance?",
"url": "https://tyk.io/blog/api-product-metrics-what-you-need-to-know/", "url": "https://tyk.io/blog/api-product-metrics-what-you-need-to-know/",
"type": "article" "type": "article"
} }
@ -909,7 +952,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Using caching strategies to improve API performance", "title": "Using Caching Strategies to Improve API Performance",
"url": "https://www.lonti.com/blog/using-caching-strategies-to-improve-api-performance", "url": "https://www.lonti.com/blog/using-caching-strategies-to-improve-api-performance",
"type": "article" "type": "article"
}, },
@ -925,17 +968,22 @@
"description": "Load Balancing plays a crucial role in the domain of API Design. It primarily revolves around evenly and efficiently distributing network traffic across a group of backend servers, also known as a server farm or server pool. When it comes to API design, implementing load balancing algorithms is of immense importance to ensure that no single server bears too much demand. This allows for high availability and reliability by rerouting the traffic in case of server failure, effectively enhancing application performance and contributing to a positive user experience. Therefore, it's a vital tactic in ensuring the scalability and robustness of system architectures which heavily rely on API interactions.\n\nLearn more from the following resources:", "description": "Load Balancing plays a crucial role in the domain of API Design. It primarily revolves around evenly and efficiently distributing network traffic across a group of backend servers, also known as a server farm or server pool. When it comes to API design, implementing load balancing algorithms is of immense importance to ensure that no single server bears too much demand. This allows for high availability and reliability by rerouting the traffic in case of server failure, effectively enhancing application performance and contributing to a positive user experience. Therefore, it's a vital tactic in ensuring the scalability and robustness of system architectures which heavily rely on API interactions.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is load balancing?", "title": "What is Load Balancing?",
"url": "https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/", "url": "https://www.cloudflare.com/en-gb/learning/performance/what-is-load-balancing/",
"type": "article" "type": "article"
}, },
{
"title": "Load Balancers in API",
"url": "https://learn.microsoft.com/en-us/rest/api/load-balancer/",
"type": "article"
},
{ {
"title": "API Gateway vs Load Balancer: Which is Right for Your Application?", "title": "API Gateway vs Load Balancer: Which is Right for Your Application?",
"url": "https://konghq.com/blog/engineering/api-gateway-vs-load-balancer", "url": "https://konghq.com/blog/engineering/api-gateway-vs-load-balancer",
"type": "article" "type": "article"
}, },
{ {
"title": "What is a load balancer?", "title": "What is a Load Balancer?",
"url": "https://www.youtube.com/watch?v=sCR3SAVdyCc", "url": "https://www.youtube.com/watch?v=sCR3SAVdyCc",
"type": "video" "type": "video"
} }
@ -967,7 +1015,7 @@
"description": "Profiling and monitoring are critical aspects of API design and implementation. Profiling, in this context, refers to the process of analyzing the behavior of your API in order to understand various performance metrics including response times, request rates, error rates, and the overall health and functionality of your API. On the other hand, monitoring is the ongoing process of checking the status of your API to ensure it's functioning as expected while also providing an early warning system for potential issues and improvements. Together, profiling and monitoring your API can lead to a more reliable, efficient, and high-performing service.\n\nLearn more from the following resources:", "description": "Profiling and monitoring are critical aspects of API design and implementation. Profiling, in this context, refers to the process of analyzing the behavior of your API in order to understand various performance metrics including response times, request rates, error rates, and the overall health and functionality of your API. On the other hand, monitoring is the ongoing process of checking the status of your API to ensure it's functioning as expected while also providing an early warning system for potential issues and improvements. Together, profiling and monitoring your API can lead to a more reliable, efficient, and high-performing service.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Monitor health and performance of your APIs", "title": "Monitor Health and Performance of your APIs",
"url": "https://learning.postman.com/docs/monitoring-your-api/intro-monitors/", "url": "https://learning.postman.com/docs/monitoring-your-api/intro-monitors/",
"type": "article" "type": "article"
}, },
@ -1004,7 +1052,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "API Integration Patterns", "title": "API Integration Patterns - Devoteam",
"url": "https://uk.devoteam.com/expert-view/api-integration-patterns/", "url": "https://uk.devoteam.com/expert-view/api-integration-patterns/",
"type": "article" "type": "article"
} }
@ -1036,12 +1084,12 @@
"description": "Event-driven architecture (EDA) is a software design concept that revolves around the production, interpretation, and consumption of events. With regards to API design, EDA grants systems the flexibility to decentralize analytics, microservices, and operations, thus promoting real-time information sharing and reaction. Event-driven APIs prioritize asynchronous communication, allowing applications to stay responsive even when tackling heavy data loads. For an effective API, adhering to EDA provides data reliability, maturity with a scalable structure, and efficient real-time data processing capabilities.\n\nLearn more form the following resources:", "description": "Event-driven architecture (EDA) is a software design concept that revolves around the production, interpretation, and consumption of events. With regards to API design, EDA grants systems the flexibility to decentralize analytics, microservices, and operations, thus promoting real-time information sharing and reaction. Event-driven APIs prioritize asynchronous communication, allowing applications to stay responsive even when tackling heavy data loads. For an effective API, adhering to EDA provides data reliability, maturity with a scalable structure, and efficient real-time data processing capabilities.\n\nLearn more form the following resources:",
"links": [ "links": [
{ {
"title": "Event-driven architecture style", "title": "Event Driven Architecture Style",
"url": "https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/event-driven", "url": "https://learn.microsoft.com/en-us/azure/architecture/guide/architecture-styles/event-driven",
"type": "article" "type": "article"
}, },
{ {
"title": "Event-driven architecture", "title": "Event-driven Architecture",
"url": "https://aws.amazon.com/event-driven-architecture/", "url": "https://aws.amazon.com/event-driven-architecture/",
"type": "article" "type": "article"
}, },
@ -1083,7 +1131,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Microservices explained in 5 minutes", "title": "Microservices Explained in 5 Minutes",
"url": "https://www.youtube.com/watch?v=lL_j7ilk7rc", "url": "https://www.youtube.com/watch?v=lL_j7ilk7rc",
"type": "video" "type": "video"
} }
@ -1094,12 +1142,12 @@
"description": "Messaging Queues play a fundamental role in API design, particularly in creating robust, decoupled, and efficient systems. These queues act like a buffer, storing messages or data sent from a sender (producer), allowing a receiver (consumer) to retrieve and process them at its own pace. In the context of API design, this concept enables developers to handle high-volume data processing requirements, providing an asynchronous communication protocol between multiple services. The benefits of messaging queues in API design include better system scalability, fault tolerance, and increased overall system resiliency.\n\nLearn more from the following resources:", "description": "Messaging Queues play a fundamental role in API design, particularly in creating robust, decoupled, and efficient systems. These queues act like a buffer, storing messages or data sent from a sender (producer), allowing a receiver (consumer) to retrieve and process them at its own pace. In the context of API design, this concept enables developers to handle high-volume data processing requirements, providing an asynchronous communication protocol between multiple services. The benefits of messaging queues in API design include better system scalability, fault tolerance, and increased overall system resiliency.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is a message queue?", "title": "What is a Message Queue?",
"url": "https://aws.amazon.com/message-queue/", "url": "https://aws.amazon.com/message-queue/",
"type": "article" "type": "article"
}, },
{ {
"title": "REST API message queues explained", "title": "REST API Message Queues Explained",
"url": "https://www.youtube.com/watch?v=2idPgA6IN_Q", "url": "https://www.youtube.com/watch?v=2idPgA6IN_Q",
"type": "video" "type": "video"
} }
@ -1126,12 +1174,12 @@
"description": "Batch Processing refers to the method of handling bulk data requests in API design. Here, multiple API requests are packed and processed as a single group or 'batch'. Instead of making numerous individual API calls, a user can make one batch request with numerous operations. This approach can increase performance and efficiency by reducing the overhead of establishing and closing multiple connections. The concept of 'batch processing' in API design is particularly useful in data-intensive applications or systems where the need for processing high volumes of data is prevalent.\n\nLearn more from the following resources:", "description": "Batch Processing refers to the method of handling bulk data requests in API design. Here, multiple API requests are packed and processed as a single group or 'batch'. Instead of making numerous individual API calls, a user can make one batch request with numerous operations. This approach can increase performance and efficiency by reducing the overhead of establishing and closing multiple connections. The concept of 'batch processing' in API design is particularly useful in data-intensive applications or systems where the need for processing high volumes of data is prevalent.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "API design guidance: bulk vs batch import", "title": "API Design Guidance: Bulk vs Batch Import",
"url": "https://tyk.io/blog/api-design-guidance-bulk-and-batch-import/", "url": "https://tyk.io/blog/api-design-guidance-bulk-and-batch-import/",
"type": "article" "type": "article"
}, },
{ {
"title": "Stream vs Batch processing explained with examples", "title": "Stream vs Batch Processing Explained with Examples",
"url": "https://www.youtube.com/watch?v=1xgBQTF24mU", "url": "https://www.youtube.com/watch?v=1xgBQTF24mU",
"type": "video" "type": "video"
} }
@ -1139,7 +1187,7 @@
}, },
"H22jAI2W5QLL-b1rq-c56": { "H22jAI2W5QLL-b1rq-c56": {
"title": "Rabbit MQ", "title": "Rabbit MQ",
"description": "RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects.\n\nIn API design, RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading.\n\nLearn more from the following resources:", "description": "RabbitMQ is an open-source message-broker software/system that plays a crucial role in API design, specifically in facilitating effective and efficient inter-process communication. It implements the Advanced Message Queuing Protocol (AMQP) to enable secure and reliable data transmission in various formats such as text, binary, or serialized objects. RabbitMQ comes in handy in decoupling application processes for scalability and robustness, whilst ensuring that data delivery occurs safely and seamlessly. It introduces queuing as a way of handling multiple users or service calls at once hence enhancing responsiveness and performance of APIs. Its queue system elegantly digests API request loads, allowing services to evenly process data while preventing overloading.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "RabbitMQ Website", "title": "RabbitMQ Website",
@ -1179,7 +1227,7 @@
"description": "API Testing refers to the process of checking the functionality, reliability, performance, and security of Application Programming Interfaces (APIs). It plays a crucial role in API design as it ensures that the APIs work correctly and as expected. This kind of testing does not require a user interface and mainly focuses on the business logic layer of the software architecture. API Testing is integral to guarantee that the data communication and responses between different software systems are error-free and streamlined.\n\nLearn more from the following resources:", "description": "API Testing refers to the process of checking the functionality, reliability, performance, and security of Application Programming Interfaces (APIs). It plays a crucial role in API design as it ensures that the APIs work correctly and as expected. This kind of testing does not require a user interface and mainly focuses on the business logic layer of the software architecture. API Testing is integral to guarantee that the data communication and responses between different software systems are error-free and streamlined.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is API testing?", "title": "What is API Testing?",
"url": "https://www.postman.com/api-platform/api-testing/", "url": "https://www.postman.com/api-platform/api-testing/",
"type": "article" "type": "article"
}, },
@ -1224,7 +1272,7 @@
}, },
"6lm3wy9WTAERTqXCn6pFt": { "6lm3wy9WTAERTqXCn6pFt": {
"title": "Functional Testing", "title": "Functional Testing",
"description": "Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API -- whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications.\n\nLearn more from the following resources:", "description": "Functional testing in the context of API design involves validating the endpoints and key-value pairs of an API. It ensures the server response works as expected and assesses the functionality of the API whether it is performing all the intended functions correctly. Various approaches like testing request-response pairs, error codes, and data accuracy are used. Functional testing can provide invaluable insights into how well an API meets the specified requirements and whether it is ready for integration into applications.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "API Functional Testing – Why Is It Important And How to Test", "title": "API Functional Testing – Why Is It Important And How to Test",
@ -1243,17 +1291,17 @@
"description": "Load testing is a crucial aspect of API design that ensures reliability, efficiency and performance under varying loads. It primarily focuses on identifying the maximum capacity of the API in terms of the volume of requests it can handle and its subsequent behavior when this threshold is reached or overloaded. By simulating varying degrees of user load, developers can identify and rectify bottlenecks or breakdown points in the system, hence enhancing overall API resilience.\n\nLearn more from the following resources:", "description": "Load testing is a crucial aspect of API design that ensures reliability, efficiency and performance under varying loads. It primarily focuses on identifying the maximum capacity of the API in terms of the volume of requests it can handle and its subsequent behavior when this threshold is reached or overloaded. By simulating varying degrees of user load, developers can identify and rectify bottlenecks or breakdown points in the system, hence enhancing overall API resilience.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "API load testing - a beginners guide", "title": "API Load Testing - Beginners Guide",
"url": "https://grafana.com/blog/2024/01/30/api-load-testing/", "url": "https://grafana.com/blog/2024/01/30/api-load-testing/",
"type": "article" "type": "article"
}, },
{ {
"title": "Test your API’s performance by simulating real-world traffic", "title": "Test Your API’s Performance by Simulating Real-world Traffic",
"url": "https://blog.postman.com/postman-api-performance-testing/", "url": "https://blog.postman.com/postman-api-performance-testing/",
"type": "article" "type": "article"
}, },
{ {
"title": "Load testing your API's", "title": "Load Testing API's",
"url": "https://www.youtube.com/watch?v=a5hWE4hMOoY", "url": "https://www.youtube.com/watch?v=a5hWE4hMOoY",
"type": "video" "type": "video"
} }
@ -1285,12 +1333,12 @@
"description": "Contract Testing is a critical aspect of maintaining a robust and reliable API infrastructure. In the realm of API design, Contract Testing refers to the method of ensuring that APIs work as anticipated and that changes to them do not break their intended functionality. This approach validates the interaction between two different systems, typically consumer and provider ( API), ensuring they comply with their agreed-upon contract. By defining clear and concise contracts for our APIs, developers can avoid common deployment issues and enhance system integration processes.\n\nLearn more from the following resources:", "description": "Contract Testing is a critical aspect of maintaining a robust and reliable API infrastructure. In the realm of API design, Contract Testing refers to the method of ensuring that APIs work as anticipated and that changes to them do not break their intended functionality. This approach validates the interaction between two different systems, typically consumer and provider ( API), ensuring they comply with their agreed-upon contract. By defining clear and concise contracts for our APIs, developers can avoid common deployment issues and enhance system integration processes.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "A complete guide to Contract Testing", "title": "Complete Guide to Contract Testing",
"url": "https://testsigma.com/blog/api-contract-testing/", "url": "https://testsigma.com/blog/api-contract-testing/",
"type": "article" "type": "article"
}, },
{ {
"title": "Get started with API Contract Testing", "title": "Geting Started with API Contract Testing",
"url": "https://saucelabs.com/resources/blog/getting-started-with-api-contract-testing", "url": "https://saucelabs.com/resources/blog/getting-started-with-api-contract-testing",
"type": "article" "type": "article"
}, },
@ -1303,7 +1351,7 @@
}, },
"XD1vDtrRQFbLyKJaD1AlA": { "XD1vDtrRQFbLyKJaD1AlA": {
"title": "Error Handling / Retries", "title": "Error Handling / Retries",
"description": "When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences.\n\nIn this context, error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation. The criteria and mechanisms of retries, including the count, delay, and conditions for retries, are crucial aspects to solidify during the API design.\n\nLearn more from the following resources:", "description": "When creating effective API designs, addressing Error Handling and Retries forms an essential facet. This is primarily due to the fact that APIs aren't always error-free and instances of network hiccups or input inaccuracies from users can occur. Without robust error handling, such occurrences can easily lead to catastrophic application failure or unsatisfactory user experiences. Error handling can refer to validating inputs, managing exceptions, and returning appropriate error message or status codes to the user. Meanwhile, the concept of retries comes into play to ensure maximum request success amidst transient failures. Through correctly implemented retries, an API can repeatedly attempt to execute a request until it is successful, thus ensuring seamless operation.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "How To Improve Your Backend By Adding Retries to Your API Calls", "title": "How To Improve Your Backend By Adding Retries to Your API Calls",
@ -1311,7 +1359,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "How to make resilient web applications with retries", "title": "How to Make Resilient Web Applications with Retries",
"url": "https://www.youtube.com/watch?v=Gly94hp3Eec", "url": "https://www.youtube.com/watch?v=Gly94hp3Eec",
"type": "video" "type": "video"
} }
@ -1343,12 +1391,12 @@
"type": "article" "type": "article"
}, },
{ {
"title": "What are websockets?", "title": "What are Web Sockets?",
"url": "https://www.pubnub.com/guides/websockets/", "url": "https://www.pubnub.com/guides/websockets/",
"type": "article" "type": "article"
}, },
{ {
"title": "How web sockets work", "title": "How Web Sockets Work",
"url": "https://www.youtube.com/watch?v=pnj3Jbho5Ck", "url": "https://www.youtube.com/watch?v=pnj3Jbho5Ck",
"type": "video" "type": "video"
} }
@ -1372,20 +1420,20 @@
}, },
"yvdfoly5WHHTq2Puss355": { "yvdfoly5WHHTq2Puss355": {
"title": "Standards and Compliance", "title": "Standards and Compliance",
"description": "When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs.\n\nCompliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems.\n\nIn essence, Standards and Compliance in API Design contributes towards building more secure, robust, and efficient APIs that are user-friendly and universally understandable.\n\nLearn more from the following resources:", "description": "When designing APIs, it's crucial to consider the concept of standards and compliance. Standards represent the set of rules and best practices that guide developers to create well-structured and easily maintainable APIs. They can range from the proper structure of the endpoints, the standardization of error responses, to naming conventions, and the usage of HTTP verbs. Compliance on the other hand, emphasizes on meeting protocol requirements or standards such as REST or SOAP. Furthermore, operating within regulated industries can also necessitate certain compliance measures like GDPR, HIPAA and others. Compliance in API Design ensures interoperability and safety of data transmission between systems.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is API compliance?", "title": "What is API Compliance?",
"url": "https://tyk.io/learning-center/api-compliance/", "url": "https://tyk.io/learning-center/api-compliance/",
"type": "article" "type": "article"
}, },
{ {
"title": "What is API compliance and why is it important?", "title": "What is API Compliance and Why is it important?",
"url": "https://www.traceable.ai/blog-post/achieve-api-compliance", "url": "https://www.traceable.ai/blog-post/achieve-api-compliance",
"type": "article" "type": "article"
}, },
{ {
"title": "REST API standards", "title": "REST API Standards",
"url": "https://www.integrate.io/blog/rest-api-standards/", "url": "https://www.integrate.io/blog/rest-api-standards/",
"type": "article" "type": "article"
} }
@ -1412,17 +1460,17 @@
"description": "API Lifecycle Management is a crucial aspect in API design that oversees the process of creating, managing, and retiring APIs. This involves various stages from initial planning, designing, testing, deployment, to eventual retirement of the API. Proper lifecycle management ensures that an API meets the requirements, is reliable, and that it evolves with the needs of end users and developers. Moreover, it helps in maintaining the security, performance, and accessibility of the API throughout its lifetime. This comprehensive approach enables organizations to make the most of their APIs, mitigate issues, and facilitate successful digital transformation.\n\nLearn more from the following resources:", "description": "API Lifecycle Management is a crucial aspect in API design that oversees the process of creating, managing, and retiring APIs. This involves various stages from initial planning, designing, testing, deployment, to eventual retirement of the API. Proper lifecycle management ensures that an API meets the requirements, is reliable, and that it evolves with the needs of end users and developers. Moreover, it helps in maintaining the security, performance, and accessibility of the API throughout its lifetime. This comprehensive approach enables organizations to make the most of their APIs, mitigate issues, and facilitate successful digital transformation.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is the API lifecycle?", "title": "What is the API Lifecycle?",
"url": "https://www.postman.com/api-platform/api-lifecycle/", "url": "https://www.postman.com/api-platform/api-lifecycle/",
"type": "article" "type": "article"
}, },
{ {
"title": "What is API lifescycle management?", "title": "What is API Lifecycle Management?",
"url": "https://swagger.io/blog/api-strategy/what-is-api-lifecycle-management/", "url": "https://swagger.io/blog/api-strategy/what-is-api-lifecycle-management/",
"type": "article" "type": "article"
}, },
{ {
"title": "Day in the lifecycle of an API", "title": "Day in the Lifecycle of an API",
"url": "https://www.youtube.com/watch?v=VxY_cz0VQXE", "url": "https://www.youtube.com/watch?v=VxY_cz0VQXE",
"type": "video" "type": "video"
} }
@ -1491,5 +1539,10 @@
"type": "article" "type": "article"
} }
] ]
},
"grpc-apis@1DrqtOwxCuFtWQXQ6ZALp.md": {
"title": "gRPC APIs",
"description": "",
"links": []
} }
} }

@ -295,7 +295,7 @@
}, },
{ {
"title": "Explore top posts about C#", "title": "Explore top posts about C#",
"url": "https://app.daily.dev/tags/c#?ref=roadmapsh", "url": "https://app.daily.dev/tags/csharp?ref=roadmapsh",
"type": "article" "type": "article"
}, },
{ {
@ -1310,7 +1310,12 @@
"description": "Unit testing is a software testing method where individual components or units of a program are tested in isolation to ensure they function correctly. This approach focuses on verifying the smallest testable parts of an application, such as functions or methods, by executing them with predefined inputs and comparing the results to expected outcomes. Unit tests are typically automated and written by developers during the coding phase to catch bugs early, facilitate code refactoring, and ensure that each unit of code performs as intended. By isolating and testing each component, unit testing helps improve code reliability and maintainability.\n\nVisit the following resources to learn more:", "description": "Unit testing is a software testing method where individual components or units of a program are tested in isolation to ensure they function correctly. This approach focuses on verifying the smallest testable parts of an application, such as functions or methods, by executing them with predefined inputs and comparing the results to expected outcomes. Unit tests are typically automated and written by developers during the coding phase to catch bugs early, facilitate code refactoring, and ensure that each unit of code performs as intended. By isolating and testing each component, unit testing helps improve code reliability and maintainability.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Unit Testing Tutorial", "title": "Unit testing",
"url": "https://en.wikipedia.org/wiki/Unit_testing",
"type": "article"
},
{
"title": "What is Unit Testing?",
"url": "https://www.guru99.com/unit-testing-guide.html", "url": "https://www.guru99.com/unit-testing-guide.html",
"type": "article" "type": "article"
}, },
@ -1695,6 +1700,16 @@
"url": "https://app.daily.dev/tags/kafka?ref=roadmapsh", "url": "https://app.daily.dev/tags/kafka?ref=roadmapsh",
"type": "article" "type": "article"
}, },
{
"title": "Apache Kafka Streams",
"url": "https://docs.confluent.io/platform/current/streams/concepts.html",
"type": "article"
},
{
"title": "Kafka Streams Confluent",
"url": "https://kafka.apache.org/documentation/streams/",
"type": "article"
},
{ {
"title": "Apache Kafka Fundamentals", "title": "Apache Kafka Fundamentals",
"url": "https://www.youtube.com/watch?v=B5j3uNBH8X4", "url": "https://www.youtube.com/watch?v=B5j3uNBH8X4",

File diff suppressed because it is too large Load Diff

@ -3966,6 +3966,11 @@
"title": "Operating Systems and System Programming", "title": "Operating Systems and System Programming",
"url": "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c", "url": "https://archive.org/details/ucberkeley-webcast-PL-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c",
"type": "article" "type": "article"
},
{
"title": "25 hour Operating Systems Course - freecodecamp",
"url": "https://youtu.be/yK1uBHPdp30?si=gGPdK7cM4KlP6Qq0",
"type": "video"
} }
] ]
}, },
@ -4040,8 +4045,29 @@
}, },
"Ge2nagN86ofa2y-yYR1lv": { "Ge2nagN86ofa2y-yYR1lv": {
"title": "Scheduling Algorithms", "title": "Scheduling Algorithms",
"description": "CPU Scheduling is the process of selecting a process from the ready queue and allocating the CPU to it. The selection of a process is based on a particular scheduling algorithm. The scheduling algorithm is chosen depending on the type of system and the requirements of the processes.\n\nHere is the list of some of the most commonly used scheduling algorithms:\n\n* **First Come First Serve (FCFS):** The process that arrives first is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Job First (SJF):** The process with the smallest execution time is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Remaining Time First (SRTF):** The process with the smallest remaining execution time is allocated the CPU first. It is a preemptive algorithm.\n* **Round Robin (RR):** The process is allocated the CPU for a fixed time slice. The time slice is usually 10 milliseconds. It is a preemptive algorithm.\n* **Priority Scheduling:** The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm.\n* **Lottery Scheduling:** The process is allocated the CPU based on a lottery system. It is a preemptive algorithm.\n* **Multilevel Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm.", "description": "CPU Scheduling is the process of selecting a process from the ready queue and allocating the CPU to it. The selection of a process is based on a particular scheduling algorithm. The scheduling algorithm is chosen depending on the type of system and the requirements of the processes.\n\nHere is the list of some of the most commonly used scheduling algorithms:\n\n* **First Come First Serve (FCFS):** The process that arrives first is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Job First (SJF):** The process with the smallest execution time is allocated the CPU first. It is a non-preemptive algorithm.\n* **Shortest Remaining Time First (SRTF):** The process with the smallest remaining execution time is allocated the CPU first. It is a preemptive algorithm.\n* **Round Robin (RR):** The process is allocated the CPU for a fixed time slice. The time slice is usually 10 milliseconds. It is a preemptive algorithm.\n* **Priority Scheduling:** The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. It is a preemptive algorithm.\n* **Multi-level Feedback Queue Scheduling:** The processes are divided into different queues based on their priority. The process with the highest priority is allocated the CPU first. If a process is preempted, it is moved to the next queue. It is a preemptive algorithm.\n* **Highest Response Ratio Next(HRRN):** CPU is allotted to the next process which has the highest response ratio and not to the process having less burst time. It is a Non-Preemptive algorithm.\n* **Lottery Scheduling:** The process is allocated the CPU based on a lottery system. It is a preemptive algorithm.\n\nVisit the following resources to learn more :",
"links": [] "links": [
{
"title": "CPU Scheduling in Operating Systems - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/cpu-scheduling-in-operating-systems/",
"type": "article"
},
{
"title": "Lottery Scheduling for Operating Systems - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/lottery-process-scheduling-in-operating-system/",
"type": "article"
},
{
"title": "Program for Round Robin Scheduling for the same Arrival time - geeksforgeeks",
"url": "https://www.geeksforgeeks.org/program-for-round-robin-scheduling-for-the-same-arrival-time/",
"type": "article"
},
{
"title": "Introduction to CPU Scheduling",
"url": "https://youtu.be/EWkQl0n0w5M?si=Lb-PxN_t-rDfn4JL",
"type": "video"
}
]
}, },
"cpQvB0qMDL3-NWret7oeA": { "cpQvB0qMDL3-NWret7oeA": {
"title": "CPU Interrupts", "title": "CPU Interrupts",

@ -78,7 +78,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Libra Office", "title": "LibreOffice",
"url": "https://www.libreoffice.org/", "url": "https://www.libreoffice.org/",
"type": "article" "type": "article"
} }
@ -811,13 +811,8 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Lets subnet your home network!", "title": "Subnetting",
"url": "https://www.youtube.com/watch?v=mJ_5qeqGOaI&list=PLIhvC56v63IKrRHh3gvZZBAGvsvOhwrRF&index=6", "url": "https://www.youtube.com/playlist?list=PLIhvC56v63IKrRHh3gvZZBAGvsvOhwrRF",
"type": "video"
},
{
"title": "Subnetting for hackers",
"url": "https://www.youtube.com/watch?v=o0dZFcIFIAw",
"type": "video" "type": "video"
} }
] ]
@ -1058,7 +1053,7 @@
}, },
"lwSFIbIX-xOZ0QK2sGFb1": { "lwSFIbIX-xOZ0QK2sGFb1": {
"title": "Router", "title": "Router",
"description": "Amazon Simple Storage Service (S3) is a scalable, object-based cloud storage service provided by AWS. It allows users to store and retrieve large amounts of data, such as files, backups, or media content, with high durability and availability. S3 is designed for flexibility, enabling users to access data from anywhere via the internet while offering security features like encryption and access controls. It is widely used for data storage, content distribution, disaster recovery, and big data analytics, providing cost-effective, scalable storage for a variety of applications.\n\nLearn more from the following resources:", "description": "A router is a networking device that directs data packets between different networks, ensuring they reach their destination. It operates at the network layer (Layer 3) of the OSI model and forwards data based on the IP addresses of the source and destination. Routers are essential for connecting devices to the internet or linking multiple networks together. They maintain a routing table to decide the best path for data and can dynamically update routes using protocols like RIP, OSPF, or BGP. Routers also handle Network Address Translation (NAT), allowing multiple devices to share a single public IP address. Many modern routers offer Wi-Fi for wireless connectivity and include basic firewall security to protect the network from threats.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What is a Router", "title": "What is a Router",
@ -1069,6 +1064,16 @@
"title": "What is a router and how does it work?", "title": "What is a router and how does it work?",
"url": "https://www.youtube.com/watch?v=UIJzHLpG9bM", "url": "https://www.youtube.com/watch?v=UIJzHLpG9bM",
"type": "video" "type": "video"
},
{
"title": "Everything Routers do",
"url": "https://youtu.be/AzXys5kxpAM?si=nEsCH6jG2Lj6Ua8N",
"type": "video"
},
{
"title": "How Routers forward Packets?",
"url": "https://youtu.be/Ep-x_6kggKA?si=II5xBPoXjYEjLvWX",
"type": "video"
} }
] ]
}, },
@ -1393,11 +1398,16 @@
}, },
"LKK1A5-xawA7yCIAWHS8P": { "LKK1A5-xawA7yCIAWHS8P": {
"title": "SSL / TLS", "title": "SSL / TLS",
"description": "Single Sign-On (SSO) is an authentication method that allows users to access multiple applications or systems with one set of login credentials. It enables users to log in once and gain access to various connected systems without re-entering credentials. SSO enhances user experience by reducing password fatigue, streamlines access management for IT departments, and can improve security by centralizing authentication controls. It typically uses protocols like SAML, OAuth, or OpenID Connect to securely share authentication information across different domains. While SSO offers convenience and can strengthen security when implemented correctly, it also presents a single point of failure if compromised, making robust security measures for the SSO system critical.\n\nLearn more from the following resources:", "description": "Secure Sockets Layer (SSL) and Transport Layer Security (TLS) are cryptographic protocols used to provide security in internet communications. These protocols encrypt the data that is transmitted over the web, so anyone who tries to intercept packets will not be able to interpret the data. One difference that is important to know is that SSL is now deprecated due to security flaws, and most modern web browsers no longer support it. But TLS is still secure and widely supported, so preferably use TLS.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "What’s the Difference Between SSL and TLS?", "title": "What is SSL? | SSL definition",
"url": "https://aws.amazon.com/compare/the-difference-between-ssl-and-tls/", "url": "https://www.cloudflare.com/en-gb/learning/ssl/what-is-ssl/",
"type": "article"
},
{
"title": "TLS Basics",
"url": "https://www.internetsociety.org/deploy360/tls/basics/",
"type": "article" "type": "article"
}, },
{ {
@ -1795,7 +1805,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "", "title": "What is LDAP",
"url": "https://www.youtube.com/watch?v=vy3e6ekuqqg", "url": "https://www.youtube.com/watch?v=vy3e6ekuqqg",
"type": "video" "type": "video"
} }

@ -1509,11 +1509,6 @@
"title": "White / Grey Listing", "title": "White / Grey Listing",
"description": "Whitelisting involves creating a list of trusted entities (such as IP addresses, email addresses, or applications) that are explicitly allowed to access a system or send messages. Anything not on the whitelist is denied by default. Whitelisting offers a high level of security by limiting access to only known and approved entities, but it can be inflexible and require frequent updates to accommodate legitimate changes. Greylisting is a more flexible approach used primarily in email filtering. When an email is received from an unknown sender, the server temporarily rejects it with a \"try again later\" response. Legitimate mail servers will retry sending the email after a short delay, while spammers, which often do not retry, are blocked. This method reduces spam by taking advantage of the fact that spammers usually do not follow retry mechanisms. Greylisting can be less intrusive than whitelisting, but it may introduce slight delays in email delivery for first-time senders.\n\nVisit the following resources to learn more:", "description": "Whitelisting involves creating a list of trusted entities (such as IP addresses, email addresses, or applications) that are explicitly allowed to access a system or send messages. Anything not on the whitelist is denied by default. Whitelisting offers a high level of security by limiting access to only known and approved entities, but it can be inflexible and require frequent updates to accommodate legitimate changes. Greylisting is a more flexible approach used primarily in email filtering. When an email is received from an unknown sender, the server temporarily rejects it with a \"try again later\" response. Legitimate mail servers will retry sending the email after a short delay, while spammers, which often do not retry, are blocked. This method reduces spam by taking advantage of the fact that spammers usually do not follow retry mechanisms. Greylisting can be less intrusive than whitelisting, but it may introduce slight delays in email delivery for first-time senders.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{
"title": "Basic Introduction to whitelisting",
"url": "https://www.cblohm.com/blog/education-marketing-trends/what-is-email-whitelisting/",
"type": "article"
},
{ {
"title": "Detailed Introduction to greylisting", "title": "Detailed Introduction to greylisting",
"url": "https://en.wikipedia.org/wiki/Greylisting_(email)", "url": "https://en.wikipedia.org/wiki/Greylisting_(email)",
@ -2659,31 +2654,21 @@
}, },
"Yq8kVoRf20aL_o4VZU5--": { "Yq8kVoRf20aL_o4VZU5--": {
"title": "Container Orchestration", "title": "Container Orchestration",
"description": "Containers are a construct in which cgroups, namespaces, and chroot are used to fully encapsulate and isolate a process. This encapsulated process, called a container image, shares the kernel of the host with other containers, allowing containers to be significantly smaller and faster than virtual machines, These images are designed for portability, allowing for full local testing of a static image, and easy deployment to a container management platform.\n\nVisit the following resources to learn more:", "description": "Container orchestration is the process of managing and automating the lifecycle of containers, including their deployment, scaling, and networking across multiple hosts. It is a critical technology for running complex containerized applications in production environments.\n\nBy leveraging tools like Kubernetes, Docker Swarm, and Apache Mesos, organizations can ensure high availability, scalability, and reliability for their applications. Container orchestration simplifies operations by automating routine tasks and providing a robust foundation for microservices, cloud-native development, and DevOps practices.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "What are Containers?", "title": "What is Container Orchestration?",
"url": "https://cloud.google.com/learn/what-are-containers", "url": "https://www.redhat.com/en/topics/containers/what-is-container-orchestration",
"type": "article" "type": "article"
}, },
{ {
"title": "What is a Container?", "title": "What is Kubernetes?",
"url": "https://www.docker.com/resources/what-container/", "url": "https://kubernetes.io/docs/tutorials/kubernetes-basics/",
"type": "article" "type": "article"
}, },
{ {
"title": "Articles about Containers - The New Stack", "title": "Introduction to Kubernetes",
"url": "https://thenewstack.io/category/containers/", "url": "https://www.youtube.com/watch?v=PH-2FfFD2PU",
"type": "article"
},
{
"title": "Explore top posts about Containers",
"url": "https://app.daily.dev/tags/containers?ref=roadmapsh",
"type": "article"
},
{
"title": "What are Containers?",
"url": "https://www.youtube.com/playlist?list=PLawsLZMfND4nz-WDBZIj8-nbzGFD4S9oz",
"type": "video" "type": "video"
} }
] ]

@ -227,8 +227,24 @@
}, },
"c0w241EL0Kh4ek76IgsEs": { "c0w241EL0Kh4ek76IgsEs": {
"title": "Blog Posts", "title": "Blog Posts",
"description": "", "description": "Writing blog posts is about creating valuable, informative content that resonates with developers by addressing their interests, challenges, and learning needs. Effective blog posts should be well-structured, beginning with a clear introduction that outlines the problem or topic, followed by detailed, actionable insights, code examples, or step-by-step guides that help readers understand and apply the concepts. It’s essential to write in a clear, engaging tone that balances technical accuracy with readability, making sure to anticipate common questions and challenges developers might have.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to Write an SEO Blog Post: 11 Key Tips",
"url": "https://www.semrush.com/blog/seo-blog-post/",
"type": "article"
},
{
"title": "How to Write an Awesome Blog Post in 5 Steps",
"url": "https://www.wordstream.com/blog/ws/2015/02/09/how-to-write-a-blog-post",
"type": "article"
},
{
"title": "How to Write a PERFECT Blog Post in 2024",
"url": "https://www.youtube.com/watch?v=HoT9naGLgNk",
"type": "video"
}
]
}, },
"X0xUzEP0S6SyspvqyoDDk": { "X0xUzEP0S6SyspvqyoDDk": {
"title": "Technical Documentation", "title": "Technical Documentation",
@ -288,7 +304,7 @@
}, },
"iKYmUvWFT_C0wnO0iB6gM": { "iKYmUvWFT_C0wnO0iB6gM": {
"title": "Engaging Audience", "title": "Engaging Audience",
"description": "", "description": "Engaging the audience in public speaking involves capturing and maintaining their attention through dynamic delivery, relatable content, and interactive elements. Effective speakers use storytelling, humor, and real-life examples to make complex ideas more accessible and memorable. Varying tone, pace, and body language helps keep the presentation lively and prevents monotony. Additionally, asking questions, encouraging participation, and inviting feedback can make the audience feel involved and connected. Engaging speakers not only convey information but also create an experience that resonates, making it easier for the audience to absorb and remember key points.",
"links": [] "links": []
}, },
"VTGsmk3p4RVXiNhDmx2l8": { "VTGsmk3p4RVXiNhDmx2l8": {
@ -298,8 +314,19 @@
}, },
"LixiZj3-QcmQgGAqaaDr6": { "LixiZj3-QcmQgGAqaaDr6": {
"title": "Contrast Principle", "title": "Contrast Principle",
"description": "", "description": "The contrast principle is a psychological concept where the perception of something is influenced by what came before it. In practical terms, it means that when two items are presented one after the other, the differences between them seem more pronounced. For example, if a developer sees a complex solution first, a simpler one that follows will appear even easier than it would on its own. This principle is often used in marketing, presentations, and negotiations to shape how choices are perceived, making certain options more attractive by strategically setting up contrasts.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to have influence",
"url": "https://www.ethosdebate.com/influence-part-2-contrast-principle/",
"type": "article"
},
{
"title": "Psychology of perceptual contrast",
"url": "https://www.linkedin.com/pulse/psychology-perceptual-contrast-devender-kumar/",
"type": "article"
}
]
}, },
"tbIAEStaoVWnEWbdk7EGc": { "tbIAEStaoVWnEWbdk7EGc": {
"title": "Handouts", "title": "Handouts",
@ -318,18 +345,46 @@
}, },
"UdUDngq425NYSvIuOd7St": { "UdUDngq425NYSvIuOd7St": {
"title": "Active Listening", "title": "Active Listening",
"description": "", "description": "Active listening in developer relations is about genuinely engaging with the developer community to understand their needs, challenges, and feedback. It involves more than just hearing what is said; it requires attention to verbal cues, context, and non-verbal signals, as well as asking clarifying questions and reflecting on what has been shared. By actively listening, developer advocates can build trust, foster open communication, and gain insights that help shape better products, documentation, and community experiences, ultimately creating a more supportive and responsive environment for developers.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What is active listening?",
"url": "https://hbr.org/2024/01/what-is-active-listening",
"type": "article"
},
{
"title": "7 Active Listening Techniques For Better Communication",
"url": "https://www.verywellmind.com/what-is-active-listening-3024343",
"type": "article"
}
]
}, },
"jyScVS-sYMcZcH3hOwbMK": { "jyScVS-sYMcZcH3hOwbMK": {
"title": "Anticipate Questions", "title": "Anticipate Questions",
"description": "", "description": "When giving talks, especially at developer conferences or events, its important to anticipate the audience asking questions at the end of your talk. Being prepared to handle common questions related to your topic can help you with confidence and show that you're a subject matter expert when you answer them correctly. It's important however not to lie or give incorrect answers so make sure that if you don't know the answer, you're honest about it.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to handle questions during a presentation",
"url": "https://www.secondnature.com.au/blog/how-to-handle-questions-during-a-presentation",
"type": "article"
}
]
}, },
"rhs6QwxZ7PZthLfi38FJn": { "rhs6QwxZ7PZthLfi38FJn": {
"title": "Be Concise", "title": "Be Concise",
"description": "", "description": "Being concise during a Q&A means delivering clear, direct answers that address the core of the question without unnecessary detail or digression. This approach respects the time of both the person asking and the audience, ensuring that key information is communicated effectively.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to handle a Q&A",
"url": "https://anthonysanni.com/blog/3-common-difficult-q-session-questions-turn-advantage",
"type": "article"
},
{
"title": "How to answer any presentation question",
"url": "https://www.youtube.com/watch?v=lfiNFNTwFGU",
"type": "video"
}
]
}, },
"VSOdD9KKF_Qz8nbRdHNo3": { "VSOdD9KKF_Qz8nbRdHNo3": {
"title": "Managing Difficult Questions", "title": "Managing Difficult Questions",
@ -354,7 +409,7 @@
}, },
"C2w8R4tNy2lOhhWU9l32s": { "C2w8R4tNy2lOhhWU9l32s": {
"title": "Event Participation", "title": "Event Participation",
"description": "", "description": "Event participation involves encouraging members to actively join and contribute to events such as workshops, webinars, hackathons, or meetups. Effective participation starts with understanding the community’s interests and creating events that provide value, whether through learning opportunities, networking, or problem-solving. To boost attendance, clear communication, easy registration processes, and engaging promotions are essential. During the event, interactive elements like Q&A sessions, polls, and group activities help keep participants involved and foster a sense of community.",
"links": [] "links": []
}, },
"gvMbo22eRxqOzszc_w4Gz": { "gvMbo22eRxqOzszc_w4Gz": {
@ -447,7 +502,7 @@
}, },
"sUEZHmKxtjO9gXKJoOdbF": { "sUEZHmKxtjO9gXKJoOdbF": {
"title": "APIs & SDKs", "title": "APIs & SDKs",
"description": "", "description": "APIs (Application Programming Interfaces) and SDKs (Software Development Kits) are essential tools in developer relations as they provide the building blocks for developers to integrate and extend functionality within their own applications. An API allows developers to interact with a service or platform through a defined set of rules and endpoints, enabling data exchange and functionality use without needing to understand the underlying code. SDKs go a step further by offering a collection of pre-built libraries, tools, and documentation that simplify the process of developing with an API, reducing the time and effort needed to create robust integrations. Together, APIs and SDKs empower developers to quickly build and innovate, driving adoption and engagement with a platform.",
"links": [] "links": []
}, },
"pqp9FLRJRDDEnni72KHmv": { "pqp9FLRJRDDEnni72KHmv": {
@ -457,8 +512,24 @@
}, },
"h6R3Vyq0U8t8WL3G5xC2l": { "h6R3Vyq0U8t8WL3G5xC2l": {
"title": "Building SDKs", "title": "Building SDKs",
"description": "", "description": "Building SDKs (Software Development Kits) involves creating a set of tools, libraries, and documentation that help developers easily integrate and interact with a platform or service. A well-designed SDK abstracts the complexities of an API, providing a streamlined, user-friendly interface that enables developers to focus on building their applications rather than handling low-level technical details. It should be intuitive, well-documented, and robust, offering clear examples, error handling, and flexibility to suit different use cases.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to build an SDK from scratch: Tutorial & best practices",
"url": "https://liblab.com/blog/how-to-build-an-sdk/",
"type": "article"
},
{
"title": "Guiding Principles for Building SDKs",
"url": "https://auth0.com/blog/guiding-principles-for-building-sdks/",
"type": "article"
},
{
"title": "API vs SDK",
"url": "https://www.youtube.com/watch?v=kG-fLp9BTRo",
"type": "video"
}
]
}, },
"7Q6_tdRaeb8BgreG8Mw-a": { "7Q6_tdRaeb8BgreG8Mw-a": {
"title": "Understanding APIs", "title": "Understanding APIs",
@ -472,13 +543,40 @@
}, },
"a-i1mgF3VAxbbpA1gMWyK": { "a-i1mgF3VAxbbpA1gMWyK": {
"title": "Git", "title": "Git",
"description": "", "description": "Git is a distributed version control system designed to handle projects of any size with speed and efficiency. Created by Linus Torvalds in 2005, it tracks changes in source code during software development, allowing multiple developers to work together on non-linear development. Git maintains a complete history of all changes, enabling easy rollbacks and comparisons between versions. Its distributed nature means each developer has a full copy of the repository, allowing for offline work and backup. Git’s key features include branching and merging capabilities, staging area for commits, and support for collaborative workflows like pull requests. Its speed, flexibility, and robust branching and merging capabilities have made it the most widely used version control system in software development, particularly for open-source projects and team collaborations.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What is Git?",
"url": "https://www.atlassian.com/git/tutorials/what-is-git",
"type": "article"
},
{
"title": "What is Git? Our beginner’s guide to version control",
"url": "https://github.blog/developer-skills/programming-languages-and-frameworks/what-is-git-our-beginners-guide-to-version-control/",
"type": "article"
},
{
"title": "What is Git? Explained in 2 Minutes!",
"url": "https://www.youtube.com/watch?v=2ReR1YJrNOM",
"type": "video"
}
]
}, },
"8O1AgUKXe35kdiYD02dyt": { "8O1AgUKXe35kdiYD02dyt": {
"title": "GitHub", "title": "GitHub",
"description": "", "description": "GitHub is a web-based platform for version control and collaboration using Git. Owned by Microsoft, it provides hosting for software development and offers features beyond basic Git functionality. GitHub includes tools for project management, code review, and social coding. Key features include repositories for storing code, pull requests for proposing and reviewing changes, issues for tracking bugs and tasks, and actions for automating workflows. It supports both public and private repositories, making it popular for open-source projects and private development. GitHub’s collaborative features, like forking repositories and inline code comments, facilitate team development and community contributions. With its extensive integrations and large user base, GitHub has become a central hub for developers, serving as a portfolio, collaboration platform, and deployment tool for software projects of all sizes.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "GitHub Website",
"url": "https://github.com",
"type": "article"
},
{
"title": "How to Use GitHub",
"url": "https://www.youtube.com/watch?v=v_1iqtOnUMg",
"type": "video"
}
]
}, },
"J2WunUJBzYw_D5cQH_pnH": { "J2WunUJBzYw_D5cQH_pnH": {
"title": "Managing Discussions", "title": "Managing Discussions",
@ -538,13 +636,35 @@
}, },
"4ZvzY_xGO5BZOmfqj0TTq": { "4ZvzY_xGO5BZOmfqj0TTq": {
"title": "Community Guidelines", "title": "Community Guidelines",
"description": "", "description": "Community guidelines serve as the cornerstone of a thriving developer community, establishing essential rules and principles that govern interactions among members. By setting clear expectations for behavior and promoting respectful communication, these guidelines create a safe and inclusive environment where all participants can flourish. Covering a range of crucial topics such as code of conduct, content moderation, intellectual property rights, and dispute resolution, well-crafted guidelines provide a comprehensive framework for community engagement. Through the implementation and enforcement of these standards, communities can effectively foster collaboration, encourage knowledge sharing, and maintain a positive atmosphere. Ultimately, this supportive environment nurtures the growth and engagement of developers, contributing to the overall success and sustainability of the community.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Community Guidelines: How to Write and Enforce Them",
"url": "https://www.commsor.com/post/community-guidelines",
"type": "article"
},
{
"title": "Community Guidelines Mastery: From Creation to Enforcement",
"url": "https://bettermode.com/blog/community-guidelines",
"type": "article"
}
]
}, },
"er9ukuBvY-F4F8S1qbbjU": { "er9ukuBvY-F4F8S1qbbjU": {
"title": "Code of Conduct", "title": "Code of Conduct",
"description": "", "description": "Writing a code of conduct for developer communities involves setting clear guidelines that promote a safe, inclusive, and respectful environment for all participants. It should define acceptable behavior, outline unacceptable actions (such as harassment, discrimination, or disruptive conduct), and provide examples where necessary to clarify expectations. A well-crafted code of conduct also includes clear procedures for reporting violations, ensuring that community members know how to raise concerns and what they can expect in terms of response. Additionally, it should outline the consequences for breaking the rules, emphasizing that the guidelines are actively enforced to maintain a positive and welcoming community culture. The tone should be firm yet approachable, reflecting the commitment to fairness, safety, and inclusivity.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Guide to writing a Code of Conduct",
"url": "https://projectinclude.org/writing_cocs",
"type": "article"
},
{
"title": "Code of Conduct meaning and template",
"url": "https://humaans.io/hr-glossary/code-of-conduct",
"type": "article"
}
]
}, },
"8I59U-nnkhQv8ldRuqQlb": { "8I59U-nnkhQv8ldRuqQlb": {
"title": "Rules and Policies", "title": "Rules and Policies",
@ -553,8 +673,19 @@
}, },
"-6cf3RT4-cbwvLYIkCosF": { "-6cf3RT4-cbwvLYIkCosF": {
"title": "Community Management", "title": "Community Management",
"description": "", "description": "Community management is a critical aspect of developer relations that involves nurturing and overseeing a thriving ecosystem of developers, users, and stakeholders. It encompasses a wide range of activities, including facilitating discussions, moderating content, organizing events, and implementing strategies to foster engagement and growth. Effective community managers act as bridges between the company and its users, ensuring that community needs are addressed while aligning with organizational goals. They cultivate a positive and inclusive environment where members can share knowledge, collaborate on projects, and provide valuable feedback, ultimately contributing to the success and evolution of the product or platform.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "The Ultimate Guide to Community Management",
"url": "https://blog.hubspot.com/marketing/community-management-expert-advice",
"type": "article"
},
{
"title": "Online Community Management Tactics",
"url": "https://www.higherlogic.com/blog/online-community-management-guide/",
"type": "article"
}
]
}, },
"d_dKF87OnRWoWj3Bf1uFf": { "d_dKF87OnRWoWj3Bf1uFf": {
"title": "Moderation", "title": "Moderation",
@ -563,13 +694,35 @@
}, },
"8ls5kQvDgvwLbIrwYg1OL": { "8ls5kQvDgvwLbIrwYg1OL": {
"title": "Conflict Resolution", "title": "Conflict Resolution",
"description": "", "description": "Conflict resolution in communities is a crucial skill for Developer Relations professionals, as it involves navigating and mediating disagreements that inevitably arise in diverse and passionate groups. This process requires a delicate balance of empathy, objectivity, and clear communication to address issues ranging from technical disputes to interpersonal conflicts. By fostering an environment of mutual respect and understanding, effective conflict resolution not only resolves immediate problems but also strengthens community bonds, encourages healthy debate, and promotes a culture of collaboration. Ultimately, the ability to skillfully manage conflicts contributes to the overall health and growth of the developer community, ensuring that differences of opinion become opportunities for learning and innovation rather than sources of division.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "5 Conflict Resolution Strategies",
"url": "https://www.indeed.com/career-advice/career-development/conflict-resolution-strategies",
"type": "article"
},
{
"title": "14 Effective Conflict Resolution Techniques",
"url": "https://www.youtube.com/watch?v=v4sby5j4dTY",
"type": "video"
}
]
}, },
"6yLt4Ia52Jke9i5kJQvAC": { "6yLt4Ia52Jke9i5kJQvAC": {
"title": "Encouraging Participation", "title": "Encouraging Participation",
"description": "", "description": "Encouraging participation involves creating an environment where members feel welcomed, valued, and motivated to engage. This can be achieved by initiating discussions, asking open-ended questions, and hosting events like webinars, AMAs (Ask Me Anything), or contests that encourage sharing and collaboration. Recognizing and rewarding contributions, whether through badges, shout-outs, or exclusive content, helps foster a sense of belonging and appreciation. It’s also important to actively respond to posts, provide guidance, and make sure the community feels heard. By building a supportive, interactive space, community managers can drive more meaningful participation and strengthen overall engagement.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "12 tips to encourage activity in an online community",
"url": "https://www.yunits.com/en/blogs/12-tips-to-encourage-activity-in-an-online-community/",
"type": "article"
},
{
"title": "How To Increase Community Engagement",
"url": "https://www.aluminati.net/how-to-increase-community-engagement/",
"type": "article"
}
]
}, },
"Nta8pUncwNQxJlqF6h1AT": { "Nta8pUncwNQxJlqF6h1AT": {
"title": "Recognition Programs", "title": "Recognition Programs",
@ -578,8 +731,19 @@
}, },
"usorG1GkkvGAZ0h_AGHVk": { "usorG1GkkvGAZ0h_AGHVk": {
"title": "Event Management", "title": "Event Management",
"description": "", "description": "Event management involves planning, organizing, and executing events, whether virtual or in-person, to create meaningful experiences for participants. It requires careful coordination of logistics, from selecting venues and scheduling to arranging speakers, promotions, and attendee engagement. Effective event management starts with clear objectives and a detailed plan, covering everything from budgeting and marketing to technical support and post-event follow-ups. Engaging content, interactive sessions, and smooth operations are essential to ensuring a positive experience, encouraging participation, and meeting the event’s goals.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "A step-by-step guide to organising unforgettable professional events for developers",
"url": "https://weezevent.com/en-gb/blog/organising-events-for-developers/",
"type": "article"
},
{
"title": "Anatomy of a Developer Conference",
"url": "https://shiloh-events.com/anatomy-of-a-developer-conference/",
"type": "article"
}
]
}, },
"RQk3uOikjQYRyTu7vuAG7": { "RQk3uOikjQYRyTu7vuAG7": {
"title": "Planning", "title": "Planning",
@ -593,8 +757,19 @@
}, },
"1m1keusP-PTjEwy0dCJJL": { "1m1keusP-PTjEwy0dCJJL": {
"title": "Execution", "title": "Execution",
"description": "", "description": "In the context of event management within developer advocacy or developer relations, execution refers to the process of effectively implementing and delivering events such as hackathons, conferences, webinars, or meetups. It involves coordinating logistics, ensuring that speakers, content, and schedules align with the target audience's interests, and driving engagement throughout the event. Strong execution ensures seamless operations, from setup to follow-up, with an emphasis on providing value to attendees and fostering deeper connections within the developer community.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to run a successful hackathon",
"url": "https://hackathon.guide/",
"type": "article"
},
{
"title": "So you want to run an online event",
"url": "https://www.youtube.com/watch?v=56rvtjZ9x3g",
"type": "video"
}
]
}, },
"kmcOYDvu1vq7AQPllZvv0": { "kmcOYDvu1vq7AQPllZvv0": {
"title": "Post Event Followup", "title": "Post Event Followup",
@ -608,12 +783,23 @@
}, },
"oWXfov-mOF47d7Vffyp3t": { "oWXfov-mOF47d7Vffyp3t": {
"title": "Feedback Collection", "title": "Feedback Collection",
"description": "", "description": "Feedback collection is the process of gathering insights and opinions from attendees, participants, and stakeholders to assess the event's effectiveness and identify areas for improvement. This can be done through surveys, polls, one-on-one conversations, or post-event interviews. For developer advocacy events, feedback collection focuses on understanding the value provided to the developer audience, the relevance of content, speaker quality, and logistical aspects such as venue or virtual platform experience. Analyzing this feedback helps refine future events, tailor content more effectively, and enhance overall engagement with the developer community.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "7 Tips to Collect Effective Event Feedback",
"url": "https://daily.dev/blog/7-tips-to-collect-effective-event-feedback",
"type": "article"
},
{
"title": "Post-event survey questions you should ask after any event",
"url": "https://uk.surveymonkey.com/mp/post-event-survey-questions/",
"type": "article"
}
]
}, },
"B1IdobUaGeBLI2CgsFg8H": { "B1IdobUaGeBLI2CgsFg8H": {
"title": "Blogging", "title": "Blogging",
"description": "", "description": "Blogging is a strategic way to share knowledge, build credibility, and engage with the developer community. It involves writing content that educates, informs, or solves specific problems that developers face, such as tutorials, best practices, case studies, and product updates. Effective blogging should be both informative and approachable, using clear language, relevant examples, and practical insights that developers can easily apply.",
"links": [] "links": []
}, },
"uzMfR6Yd9Jvjn8i5RpC1Q": { "uzMfR6Yd9Jvjn8i5RpC1Q": {
@ -638,13 +824,35 @@
}, },
"nlzI2fG3SwC5Q42qXcXPX": { "nlzI2fG3SwC5Q42qXcXPX": {
"title": "Cross-Promotion", "title": "Cross-Promotion",
"description": "", "description": "Cross-promotion in the context of guest blogging involves leveraging both the host’s and guest’s platforms to maximize reach and engagement. When a guest blog post is published, both parties actively share and promote it across their social media channels, newsletters, and websites. This collaboration helps expose the content to a broader audience, as followers from both sides are introduced to new voices and insights. Effective cross-promotion requires clear communication on promotional plans, consistent messaging, and tagging or mentioning each other to ensure visibility. It’s a mutually beneficial strategy that boosts traffic, expands reach, and strengthens partnerships.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What Is Cross-Promotion + 8 Cross-Promotion Strategies",
"url": "https://optinmonster.com/cross-promotion-ideas-triple-customers/",
"type": "article"
},
{
"title": "How to cross promote on Social Media",
"url": "https://www.sprinklr.com/blog/cross-promote-social-media/",
"type": "article"
}
]
}, },
"w1ZooDCDOkbL1EAa5Hx3d": { "w1ZooDCDOkbL1EAa5Hx3d": {
"title": "Collaborations", "title": "Collaborations",
"description": "", "description": "Blogging collaborations involve partnering with other experts, influencers, or organizations to create content that combines diverse perspectives, expertise, and audiences. Collaborations can take the form of co-authored posts, guest blogging, or interview-style pieces, and they are an effective way to reach a broader audience while enriching the content with insights that a single author might not cover. Successful collaborations require clear communication, aligning on goals, topics, and responsibilities, and ensuring that the content feels cohesive and valuable to all parties involved. They also provide an opportunity to build relationships, share knowledge, and cross-promote, driving increased visibility and engagement for everyone participating.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to collaborate with bloggers",
"url": "https://www.create.net/blog/how-to-collaborate-with-bloggers",
"type": "article"
},
{
"title": "The Power of Collaborative Blogging: Building Relationships and Connecting with Others",
"url": "https://aicontentfy.com/en/blog/power-of-collaborative-blogging-building-relationships-and-connecting-with-others",
"type": "article"
}
]
}, },
"bRzzc137OlmivEGdhv5Ew": { "bRzzc137OlmivEGdhv5Ew": {
"title": "Video Production", "title": "Video Production",
@ -653,8 +861,24 @@
}, },
"6zK9EJDKBC89UArY7sfgs": { "6zK9EJDKBC89UArY7sfgs": {
"title": "Editing", "title": "Editing",
"description": "", "description": "Editing is the process of refining raw footage to create a cohesive, engaging final product. It involves cutting, arranging, and enhancing clips to ensure a smooth flow, clear storytelling, and visual appeal. Effective editing also includes adding elements like transitions, graphics, sound effects, and music to emphasize key points and maintain viewer interest. In developer-focused content, such as tutorials or product demos, editing helps simplify complex information, highlighting important details and ensuring clarity. Good editing not only enhances the viewing experience but also helps convey the intended message more effectively and professionally.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Introduction to video editing",
"url": "https://www.adobe.com/uk/creativecloud/video/discover/edit-a-video.html",
"type": "article"
},
{
"title": "A complete guide on how to edit videos fast even if you are a beginner",
"url": "https://www.laura-moore.co.uk/a-complete-guide-on-how-to-edit-videos-fast-even-if-you-are-a-beginner/",
"type": "article"
},
{
"title": "How to edit videos",
"url": "https://www.youtube.com/watch?app=desktop&v=sTqEmGNtNqk",
"type": "video"
}
]
}, },
"_QHUpFW4kZ5SBaP7stXY2": { "_QHUpFW4kZ5SBaP7stXY2": {
"title": "Recording", "title": "Recording",
@ -668,8 +892,19 @@
}, },
"OUWVqJImrmsZpAtRrUYNH": { "OUWVqJImrmsZpAtRrUYNH": {
"title": "Animations & Graphics", "title": "Animations & Graphics",
"description": "", "description": "Adding animations and graphics to your videos are a great way to retain users. Large creators in the developer community such as [Fireship.io](http://Fireship.io) do this to great effect by having a mix of informative and humourous animations and graphics.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "3 AMAZING Graphic Animations For Level UP Your Videos",
"url": "https://www.youtube.com/watch?v=cnyQkr21oM8",
"type": "video"
},
{
"title": "Essential Motion Graphics for Youtube",
"url": "https://www.youtube.com/watch?v=HH0VBOyht0E",
"type": "video"
}
]
}, },
"pEMNcm_wJNmOkWm57L1pA": { "pEMNcm_wJNmOkWm57L1pA": {
"title": "Video Production", "title": "Video Production",
@ -703,8 +938,19 @@
}, },
"D7_iNPEKxFv0gw-fsNNrZ": { "D7_iNPEKxFv0gw-fsNNrZ": {
"title": "Animations & Graphics", "title": "Animations & Graphics",
"description": "", "description": "Animations and graphics can be a great addition to your live streaming setup, especially if they're related to the brand that you're representing. Be aware though that excessive animations and graphics can take its toll on your machine and potentially result in a bad experience for viewers, so it's important to find the right balance.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to Create Animated Overlays For Your Live Streams",
"url": "https://www.youtube.com/watch?v=y6BykyZGUlE",
"type": "video"
},
{
"title": "How to Install & Use Overlays in OBS",
"url": "https://www.youtube.com/watch?v=pxB9ET8gZH0",
"type": "video"
}
]
}, },
"8aiLVG4clveX1Luiehvxr": { "8aiLVG4clveX1Luiehvxr": {
"title": "Technical Setup", "title": "Technical Setup",
@ -718,8 +964,19 @@
}, },
"7y4vHk_jgNTW6Q1WoqYDc": { "7y4vHk_jgNTW6Q1WoqYDc": {
"title": "Audio", "title": "Audio",
"description": "", "description": "Having good quality audio when live streaming or creating video content is a must, it is often said that viewers will accept lower quality video but poor audio is a deal breaker. Unfortunetly this often includes purchasing a good quality microphone although theres many improvements you can make to an existing setup such as streaming from a quiet location with good accoustics and applying filters in your software of choice.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to Improve Your Live Stream Audio",
"url": "https://www.soundproofcow.com/improve-live-stream-audio/",
"type": "article"
},
{
"title": "How to improve your live stream audio quality!",
"url": "https://www.youtube.com/watch?app=desktop&v=_bTb0YqJX9w",
"type": "video"
}
]
}, },
"71BBFjaON1NJi4rOHKW6K": { "71BBFjaON1NJi4rOHKW6K": {
"title": "Social Media", "title": "Social Media",
@ -738,8 +995,14 @@
}, },
"ZMManUnO-9EQqi-xmLt5r": { "ZMManUnO-9EQqi-xmLt5r": {
"title": "Facebook", "title": "Facebook",
"description": "", "description": "Facebook serves as a powerful platform for building and engaging developer communities. It allows developer advocates to share resources, host live events, and create dedicated groups or pages for discussions, fostering collaboration and knowledge sharing. Facebook’s global reach and engagement tools help advocates amplify content, provide support, and maintain an active presence in the developer ecosystem, creating a space for feedback, networking, and promoting tools or products to a broad audience.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Facebook marketing: The complete guide for your brand’s strategy",
"url": "https://sproutsocial.com/insights/facebook-marketing-strategy/",
"type": "article"
}
]
}, },
"UAkGV9_I6qiKZMr1aqQCm": { "UAkGV9_I6qiKZMr1aqQCm": {
"title": "Instagram", "title": "Instagram",
@ -748,28 +1011,88 @@
}, },
"TGXPxTFv9EhsfS5uWR5gS": { "TGXPxTFv9EhsfS5uWR5gS": {
"title": "Content Strategy", "title": "Content Strategy",
"description": "", "description": "A social media content strategy is a plan to use platforms effectively to engage and grow an audience. It starts with setting clear goals, like increasing brand awareness or driving traffic, and understanding the target audience. The strategy focuses on creating diverse, valuable content—tutorials, updates, tips, and interactive posts—that resonates with followers and encourages engagement. Choosing the right platforms, posting consistently, and actively responding to comments are key to building relationships.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "The Ultimate Guide to Creating a Content Marketing Strategy",
"url": "https://www.semrush.com/blog/content-marketing-strategy-guide/",
"type": "article"
},
{
"title": "How to craft an effective social media content strategy",
"url": "https://sproutsocial.com/insights/social-media-content-strategy/",
"type": "article"
}
]
}, },
"lG1FH7Q-YX5pG-7mMtbSR": { "lG1FH7Q-YX5pG-7mMtbSR": {
"title": "Analytics and Optimization", "title": "Analytics and Optimization",
"description": "", "description": "When engaging with developer communities on social media, it's important to monitor your analytics in order to maximise the potential of your content. Platforms like X provide great analytics that help you keep an eye on which posts perform well with data such as impressions, likes, and shares.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What is social media analytics?",
"url": "https://blog.hootsuite.com/social-media-analytics/",
"type": "article"
},
{
"title": "2024 Guide to X (Twitter) Analytics",
"url": "https://blog.hootsuite.com/twitter-analytics-guide/",
"type": "article"
}
]
}, },
"l2P44pL9eF8xarBwC_CVO": { "l2P44pL9eF8xarBwC_CVO": {
"title": "Consistent Posting", "title": "Consistent Posting",
"description": "", "description": "Consistent posting on social media platforms is a cornerstone of effective Developer Relations strategy, serving as a powerful tool to maintain engagement, build credibility, and foster a sense of community among developers. By regularly sharing valuable content, insights, and updates, DevRel professionals can establish a reliable presence that audiences come to expect and appreciate. This steady stream of information not only keeps the community informed about the latest developments, but also demonstrates an ongoing commitment to the field, enhancing trust and authority. Moreover, consistent posting helps to navigate the algorithms of various social media platforms, increasing visibility and reach, while providing ample opportunities for interaction and feedback from the developer community.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Why Posting Consistently is Key to Social Media",
"url": "https://forty8creates.com/why-posting-consistently-is-key-to-social-media/",
"type": "article"
},
{
"title": "How to Create Consistent Content on Social Media",
"url": "https://www.youtube.com/watch?v=-bQpsCMgCkA",
"type": "video"
}
]
}, },
"WIH216mHg2OiSebzQYI-f": { "WIH216mHg2OiSebzQYI-f": {
"title": "Engaging Content", "title": "Engaging Content",
"description": "", "description": "Content on social media is designed to capture attention, spark interaction, and encourage sharing. It’s often visually appealing, informative, or entertaining, offering value that resonates with the audience’s interests. This can include eye-catching images, short videos, infographics, or quick tips that are easy to digest and act on. To boost engagement, content should invite responses, like asking questions, running polls, or encouraging users to share their thoughts.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Create engaging and effective social media content",
"url": "https://help.hootsuite.com/hc/en-us/articles/4403597090459-Create-engaging-and-effective-social-media-content",
"type": "article"
},
{
"title": "How To Create Engaging Videos As A Solo Creator",
"url": "https://www.youtube.com/watch?v=yxXOjyvIkik",
"type": "video"
}
]
}, },
"ZWkpgvXIzjN3_fOyhVEv0": { "ZWkpgvXIzjN3_fOyhVEv0": {
"title": "Creating Brand Voice", "title": "Creating Brand Voice",
"description": "", "description": "Creating a brand voice involves defining a consistent tone and style that reflects the brand’s personality and values across all communication. It’s about deciding how the brand should sound—whether friendly, professional, witty, or authoritative—and using that voice to connect authentically with the audience. To build a strong brand voice, it’s important to understand the target audience, outline key characteristics (like being approachable or technical), and ensure all content, from social media posts to documentation, follows these guidelines. Consistency in voice helps build trust, makes the brand more recognizable, and strengthens its identity in the market.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Creating Your Brand Voice: A Complete Guide",
"url": "https://blog.hubspot.com/marketing/brand-voice",
"type": "article"
},
{
"title": "How to Define Your Brand’s Tone of Voice",
"url": "https://www.semrush.com/blog/how-to-define-your-tone-of-voice",
"type": "article"
},
{
"title": "Branding 101: How To Build Customer Loyalty With Brand Voice",
"url": "https://www.youtube.com/watch?v=et-a39drCsU",
"type": "video"
}
]
}, },
"NWxAxiDgvlGpvqdkzqnOH": { "NWxAxiDgvlGpvqdkzqnOH": {
"title": "Tracking Engagement", "title": "Tracking Engagement",
@ -778,12 +1101,23 @@
}, },
"46iMfYgC7fCZLCy-qzl1B": { "46iMfYgC7fCZLCy-qzl1B": {
"title": "Data-Driven Strategy Shift", "title": "Data-Driven Strategy Shift",
"description": "", "description": "A data-driven strategy for social media involves using analytics and insights to guide content creation, posting schedules, and engagement tactics. By regularly reviewing metrics like engagement rates, click-throughs, and follower growth, brands can identify what resonates with their audience and refine their approach accordingly. This strategy helps in making informed decisions, such as which types of content to prioritize, the best times to post, and how to optimize ads. It also enables brands to track the success of campaigns, experiment with new ideas, and adjust quickly to shifting trends, ensuring that social media efforts are effective and aligned with overall goals.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What Does a Data-Driven Digital Marketing Strategy Look Like",
"url": "https://medium.com/@vantageplusmarketing/implementing-data-driven-strategies-in-seo-and-content-marketing-6104a91afba0",
"type": "article"
},
{
"title": "Analytics vs Reporting: How to make Data-driven Business Decisions",
"url": "https://www.youtube.com/watch?v=kyNa3SdKU84",
"type": "video"
}
]
}, },
"g3M6nfLr0DMcn-NCFF7nZ": { "g3M6nfLr0DMcn-NCFF7nZ": {
"title": "Documentation", "title": "Documentation",
"description": "", "description": "Documentation is a key resource that guides new users through understanding and using a platform or tool. It should provide clear, step-by-step instructions, code examples, and explanations that help developers get started quickly, addressing common questions and challenges. Effective onboarding documentation is well-organized, easy to navigate, and written in a straightforward, approachable tone. It often includes tutorials, guides, and FAQs that cover everything from initial setup to more advanced features, ensuring that developers can smoothly integrate the platform into their projects. Good documentation reduces friction, boosts developer confidence, and accelerates adoption.",
"links": [] "links": []
}, },
"RLf08xKMjlt6S9-MFiTo-": { "RLf08xKMjlt6S9-MFiTo-": {
@ -793,8 +1127,19 @@
}, },
"7IJO_jDpZUdlr_n5rBJ6O": { "7IJO_jDpZUdlr_n5rBJ6O": {
"title": "API References", "title": "API References",
"description": "", "description": "Adding API References to your products documentation is a key component and the most common reason for developers using documentation. When creating API documentation, ensure you add examples for the most common languages as well as any details around authorization and common issues faced.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What Is API Documentation?",
"url": "https://blog.hubspot.com/website/api-documentation",
"type": "article"
},
{
"title": "API Documentation and Why it Matters",
"url": "https://www.youtube.com/watch?v=39Tt1IkLiQQ",
"type": "video"
}
]
}, },
"6ubk20TBIL3_VrrRMe8tO": { "6ubk20TBIL3_VrrRMe8tO": {
"title": "Tutorials", "title": "Tutorials",
@ -808,12 +1153,18 @@
}, },
"pGJrCyYhLLGUnv6LxpYUe": { "pGJrCyYhLLGUnv6LxpYUe": {
"title": "Code Samples", "title": "Code Samples",
"description": "", "description": "Code samples are essential in sample projects as they provide concrete, practical examples that help developers understand how to use a platform, library, or tool. Well-crafted code samples should be clear, concise, and focused on demonstrating specific functionality, avoiding unnecessary complexity that might distract from the core concept. They should be easy to read, following consistent naming conventions, proper formatting, and best practices for the relevant programming language. Including inline comments and explanations can help clarify key steps, while additional context in the accompanying documentation or blog post can guide developers through the logic and potential use cases.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Code Documentation Best Practices and Standards: A Complete Guide",
"url": "https://blog.codacy.com/code-documentation",
"type": "article"
}
]
}, },
"mWcMSKnUQamUykBxND-Ju": { "mWcMSKnUQamUykBxND-Ju": {
"title": "Example Apps", "title": "Example Apps",
"description": "", "description": "Example apps are pre-built applications that demonstrate how to use a platform, framework, or set of tools in a practical, real-world scenario. These apps provide developers with hands-on examples of best practices, showing how different components work together and offering a solid starting point for building their projects. Effective example apps are well-documented, easy to set up, and cover common use cases, helping developers quickly understand core concepts and features. By providing clear, functional code, they reduce the learning curve, making it easier for developers to explore, experiment, and adopt new technologies.",
"links": [] "links": []
}, },
"omnUSgUHZg2DmnOUJ0Xo1": { "omnUSgUHZg2DmnOUJ0Xo1": {
@ -828,7 +1179,7 @@
}, },
"oGTIvAY3zYgoiC63FQRSd": { "oGTIvAY3zYgoiC63FQRSd": {
"title": "Forums", "title": "Forums",
"description": "", "description": "Support forums are online platforms where developers can ask questions, share solutions, and collaborate on challenges related to specific products, technologies, or tools. They serve as a valuable resource for peer-to-peer support, allowing the community to contribute their expertise, often reducing the workload of official support teams. Active participation by developer advocates in these forums can foster stronger relationships, provide real-time feedback, and build trust within the community by addressing issues, clarifying doubts, and offering guidance in a more interactive and collaborative environment.",
"links": [] "links": []
}, },
"j6tr3mAaKqTuEFTRSCsrK": { "j6tr3mAaKqTuEFTRSCsrK": {
@ -838,8 +1189,19 @@
}, },
"4GCQ3stXxW1HrlAVC0qDl": { "4GCQ3stXxW1HrlAVC0qDl": {
"title": "FAQs", "title": "FAQs",
"description": "", "description": "FAQs (Frequently Asked Questions) serve as a self-service resource that addresses common queries or issues users may encounter. They help reduce the volume of support tickets by providing quick, accessible answers to recurring problems, ranging from technical troubleshooting to product usage. Well-structured FAQs not only improve customer satisfaction by offering immediate solutions but also free up support teams to focus on more complex cases, ultimately enhancing overall efficiency and user experience. For developer relations, FAQs can include coding examples, integration tips, and clarifications about APIs or tools.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "12 Crystal-Clear FAQ Page Examples & How to Make Your Own",
"url": "https://blog.hubspot.com/service/faq-page",
"type": "article"
},
{
"title": "How to write an FAQ page",
"url": "https://uk.indeed.com/career-advice/career-development/how-to-write-faq-page",
"type": "article"
}
]
}, },
"weyCcboaekqf5NuVAOxfU": { "weyCcboaekqf5NuVAOxfU": {
"title": "Office Hours", "title": "Office Hours",
@ -858,23 +1220,62 @@
}, },
"afR1VviBs2w0k8UmP38vn": { "afR1VviBs2w0k8UmP38vn": {
"title": "Community Growth", "title": "Community Growth",
"description": "", "description": "Growing a community is a multifaceted process that requires strategic planning, consistent engagement, and a focus on providing value to members. It involves creating a welcoming environment, fostering meaningful interactions, and continuously adapting to the needs and interests of the community. Key aspects include developing clear goals, establishing communication channels, organizing events, encouraging user-generated content, and leveraging data-driven insights to refine strategies. Successful community growth not only increases numbers but also enhances the quality of interactions, builds loyalty, and creates a self-sustaining ecosystem where members actively contribute to and benefit from the community's collective knowledge and resources.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "ecrets to Building the Most Engaging Community Ever",
"url": "https://www.youtube.com/watch?v=6ZVpufakwfk",
"type": "video"
}
]
}, },
"RXj0yB7KsIOM5whwtyBBU": { "RXj0yB7KsIOM5whwtyBBU": {
"title": "Engagement Rates", "title": "Engagement Rates",
"description": "", "description": "Engagement rates are key metrics that measure how actively an audience interacts with content on platforms like social media, blogs, or community forums. They reflect actions such as likes, comments, shares, and clicks, indicating how well the content resonates with the audience. High engagement rates suggest that the content is relevant, valuable, and appealing, while low rates can signal a need for adjustment in the messaging or approach. Tracking engagement rates helps in understanding audience preferences, refining content strategies, and assessing the effectiveness of campaigns, making them essential for improving overall communication and outreach efforts.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What is Engagement Rate",
"url": "https://sproutsocial.com/glossary/engagement-rate/",
"type": "article"
},
{
"title": "Introduction to Engagement Rate",
"url": "https://www.youtube.com/watch?v=SCTbIwADCo4",
"type": "video"
}
]
}, },
"yhDBZfUAjumFHpUZtmLg3": { "yhDBZfUAjumFHpUZtmLg3": {
"title": "Content Performance", "title": "Content Performance",
"description": "", "description": "Content performance involves measuring, analyzing, and optimizing the impact of created content on the target audience. This multifaceted process encompasses tracking various metrics such as engagement rates, conversion rates, time spent on page, and social shares to gauge the effectiveness of content in achieving its intended goals. By leveraging sophisticated analytics tools and techniques, DevRel professionals can gain valuable insights into audience behavior, preferences, and pain points, enabling them to refine their content strategy, improve user experience, and ultimately drive better outcomes for both developers and the organization.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Content Performance: 19 Metrics to Track Your Results",
"url": "https://www.semrush.com/blog/content-performance/",
"type": "article"
},
{
"title": "How to measure the ROI of your content efforts",
"url": "https://www.youtube.com/watch?v=j1CNmi302Oc",
"type": "video"
}
]
}, },
"AwMwMU9hg_gCKPP4tykHb": { "AwMwMU9hg_gCKPP4tykHb": {
"title": "Developer Satisfaction", "title": "Developer Satisfaction",
"description": "", "description": "Developer satisfaction refers to how content and engaged developers feel when using a platform, tool, or service. It encompasses aspects like ease of use, quality of documentation, helpfulness of support, and overall developer experience. High developer satisfaction is crucial because it leads to greater adoption, advocacy, and retention. To achieve it, platforms need to listen actively to developer feedback, provide intuitive and well-documented tools, and ensure quick, effective support. Regularly measuring satisfaction through surveys, feedback loops, and usage analytics helps identify areas for improvement, ensuring that the platform continues to meet developer needs effectively.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What are developer experience metrics?",
"url": "https://www.cortex.io/post/developer-experience-metrics-for-software-development-success",
"type": "article"
},
{
"title": "How to measure developer experience with metrics",
"url": "https://www.opslevel.com/resources/measuring-developer-experience-with-metrics",
"type": "article"
}
]
}, },
"psk3bo-nSskboAoVTjlpz": { "psk3bo-nSskboAoVTjlpz": {
"title": "Tools", "title": "Tools",
@ -883,8 +1284,19 @@
}, },
"8xrhjG9qmbsoBC3F8zS-b": { "8xrhjG9qmbsoBC3F8zS-b": {
"title": "Google Analytics", "title": "Google Analytics",
"description": "", "description": "Google Analytics is a tool used to track and analyze website traffic and user behavior. It helps advocates understand how developers interact with content such as documentation, tutorials, blogs, or event pages. By analyzing metrics like page views, bounce rates, and user demographics, developer advocates can gauge the effectiveness of their outreach efforts, identify popular resources, and optimize content strategies. This data-driven approach allows for better engagement, personalization, and improved targeting, ultimately helping advocates cater to the specific needs of the developer community.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Google Analytics Academy",
"url": "https://developers.google.com/analytics",
"type": "article"
},
{
"title": "Get started with Google Analytics",
"url": "https://www.youtube.com/watch?v=UuE37-MM1ws",
"type": "video"
}
]
}, },
"x8RIrK2VB-LBFbt6hAcQb": { "x8RIrK2VB-LBFbt6hAcQb": {
"title": "Social Media Analytics", "title": "Social Media Analytics",
@ -908,8 +1320,19 @@
}, },
"0dRnUlgze87eq2FVU_mWp": { "0dRnUlgze87eq2FVU_mWp": {
"title": "Data Visualization", "title": "Data Visualization",
"description": "", "description": "Data visualization involves using charts, graphs, and other visual tools to present data clearly and effectively. It transforms raw numbers into visual formats that make patterns, trends, and insights easier to understand at a glance. Good visualizations simplify complex data, highlighting key findings and supporting informed decision-making. When creating these visuals, it’s important to choose the right type—like bar charts for comparisons, line graphs for trends, or pie charts for proportions—and ensure they are clean, accurate, and easy to read.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "What is Data Visualization?",
"url": "https://www.ibm.com/topics/data-visualization",
"type": "article"
},
{
"title": "Data Visualization in 2024",
"url": "https://www.youtube.com/watch?v=loYuxWSsLNc",
"type": "video"
}
]
}, },
"mh1BZDVkc-VwA8aQAmDhO": { "mh1BZDVkc-VwA8aQAmDhO": {
"title": "Insights & Recommendations", "title": "Insights & Recommendations",
@ -933,13 +1356,35 @@
}, },
"ue0NaNnNpF7UhvJ8j0Yuo": { "ue0NaNnNpF7UhvJ8j0Yuo": {
"title": "Conference Speaking", "title": "Conference Speaking",
"description": "", "description": "Conference speaking is a pivotal aspect of Developer Relations, offering a powerful platform for sharing knowledge, showcasing expertise, and fostering connections within the tech community. As a DevRel professional, mastering the art of public speaking allows you to effectively communicate complex technical concepts, inspire fellow developers, and represent your organization at industry events. This skill encompasses not only delivering engaging presentations but also crafting compelling narratives, tailoring content to diverse audiences, and navigating the intricacies of conference logistics. By honing your conference speaking abilities, you can significantly amplify your impact, establish thought leadership, and contribute to the growth and evolution of the developer ecosystem.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How to speak at a conference",
"url": "https://www.eventible.com/learning/how-to-speak-at-a-conference/",
"type": "article"
},
{
"title": "Secrets of Great Conference Talks",
"url": "https://www.youtube.com/watch?v=rOf5sPSBLjg",
"type": "video"
}
]
}, },
"HN2gNsYYRLVOOdy_r8FKJ": { "HN2gNsYYRLVOOdy_r8FKJ": {
"title": "Building a Personal Brand", "title": "Building a Personal Brand",
"description": "", "description": "Building a personal brand in developer relations is about establishing a unique and authentic presence that showcases your expertise, values, and contributions to the developer community. It involves consistently sharing knowledge, insights, and experiences through various channels such as blogs, social media, podcasts, or public speaking, while engaging in meaningful conversations and collaborations. A strong personal brand helps build credibility and trust, making it easier to connect with other developers, influencers, and potential partners.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "A New Approach to Building Your Personal Brand",
"url": "https://hbr.org/2023/05/a-new-approach-to-building-your-personal-brand",
"type": "article"
},
{
"title": "5 Steps to Building a Personal Brand You Feel Good About",
"url": "https://www.youtube.com/watch?v=ozMCb0wOnMU",
"type": "video"
}
]
}, },
"4ygpqUK70hI5r1AmmfMZq": { "4ygpqUK70hI5r1AmmfMZq": {
"title": "Networking Strategies", "title": "Networking Strategies",
@ -963,7 +1408,7 @@
}, },
"bwwk6ESNyEJa3fCAIKPwh": { "bwwk6ESNyEJa3fCAIKPwh": {
"title": "Continuous Learning", "title": "Continuous Learning",
"description": "", "description": "The developer landscape is continuously evolving and while it's not required to stay on top of the entire industry, it is crucial that you keep up to date with the trends in your area.",
"links": [] "links": []
} }
} }

@ -2587,6 +2587,11 @@
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API",
"type": "article" "type": "article"
}, },
{
"title": "Web Storage API – How to Store Data on the Browser",
"url": "https://www.freecodecamp.org/news/web-storage-api-how-to-store-data-on-the-browser/",
"type": "article"
},
{ {
"title": "Explore top posts about Storage", "title": "Explore top posts about Storage",
"url": "https://app.daily.dev/tags/storage?ref=roadmapsh", "url": "https://app.daily.dev/tags/storage?ref=roadmapsh",

File diff suppressed because it is too large Load Diff

@ -227,7 +227,7 @@
}, },
{ {
"title": "gitignore Documentation", "title": "gitignore Documentation",
"url": "https://git-scm.com/docs/gitignore/en", "url": "https://git-scm.com/docs/gitignore",
"type": "article" "type": "article"
}, },
{ {
@ -599,7 +599,7 @@
"links": [ "links": [
{ {
"title": "git clone", "title": "git clone",
"url": "https://git-scm.com/docs/git-clone/en", "url": "https://git-scm.com/docs/git-clone",
"type": "article" "type": "article"
}, },
{ {
@ -810,7 +810,7 @@
"links": [ "links": [
{ {
"title": "Rebasing", "title": "Rebasing",
"url": "https://git-scm.com/book/en/Git-Branching-Rebasing", "url": "https://git-scm.com/book/en/v2/Git-Branching-Rebasing",
"type": "article" "type": "article"
} }
] ]

@ -1475,17 +1475,6 @@
} }
] ]
}, },
"BbrrliATuH9beTypRaFey": {
"title": "Relational Operators",
"description": "Relational operators are also known as comparison operators. They are used to find the relationship between two values or compare the relationship between them; on the comparison, they yield the result true or false.\n\nVisit the following resources to learn more:",
"links": [
{
"title": "Relational Operators - MDN",
"url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators#relational_operators",
"type": "article"
}
]
},
"k8bJH9qydZm8I9rhH7rXw": { "k8bJH9qydZm8I9rhH7rXw": {
"title": "Functions", "title": "Functions",
"description": "Functions exist so we can reuse code. They are blocks of code that execute whenever they are invoked. Each function is typically written to perform a particular task, like an addition function used to find the sum of two or more numbers. When numbers need to be added anywhere within your code, the addition function can be invoked as many times as necessary.\n\nVisit the following resources to learn more:", "description": "Functions exist so we can reuse code. They are blocks of code that execute whenever they are invoked. Each function is typically written to perform a particular task, like an addition function used to find the sum of two or more numbers. When numbers need to be added anywhere within your code, the addition function can be invoked as many times as necessary.\n\nVisit the following resources to learn more:",

@ -448,6 +448,11 @@
"url": "https://blog.bitsrc.io/types-of-native-errors-in-javascript-you-must-know-b8238d40e492", "url": "https://blog.bitsrc.io/types-of-native-errors-in-javascript-you-must-know-b8238d40e492",
"type": "article" "type": "article"
}, },
{
"title": "JavaScript error reference - MDN",
"url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors",
"type": "article"
},
{ {
"title": "Explore top posts about JavaScript", "title": "Explore top posts about JavaScript",
"url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh",
@ -463,6 +468,11 @@
"title": "Node.js Errors - Official Docs", "title": "Node.js Errors - Official Docs",
"url": "https://nodejs.org/api/errors.html#errors_class_systemerror", "url": "https://nodejs.org/api/errors.html#errors_class_systemerror",
"type": "article" "type": "article"
},
{
"title": "@Article@16 Common Errors in Node.js and How to Fix Them",
"url": "https://betterstack.com/community/guides/scaling-nodejs/nodejs-errors/",
"type": "article"
} }
] ]
}, },
@ -522,6 +532,11 @@
"title": "Async Errors", "title": "Async Errors",
"url": "https://www.mariokandut.com/handling-errors-in-asynchronous-functions-node-js/", "url": "https://www.mariokandut.com/handling-errors-in-asynchronous-functions-node-js/",
"type": "article" "type": "article"
},
{
"title": "The best way to handle errors in asynchronous javascript",
"url": "https://dev.to/m__mdy__m/the-best-way-to-handle-errors-in-asynchronous-javascript-16bb",
"type": "article"
} }
] ]
}, },
@ -996,7 +1011,7 @@
"links": [ "links": [
{ {
"title": "Node.js Learn environment variables", "title": "Node.js Learn environment variables",
"url": "https://www.digitalocean.com/community/tutorials/nodejs-command-line-arguments-node-scripts", "url": "https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs",
"type": "article" "type": "article"
}, },
{ {
@ -1030,6 +1045,11 @@
"title": "Official Documentation", "title": "Official Documentation",
"url": "https://nodejs.org/api/process.html#processstdin", "url": "https://nodejs.org/api/process.html#processstdin",
"type": "article" "type": "article"
},
{
"title": "Node.js Process stdin & stdout",
"url": "https://nodecli.com/node-stdin-stdout",
"type": "article"
} }
] ]
}, },
@ -1169,6 +1189,11 @@
"title": "Explore top posts about Node.js", "title": "Explore top posts about Node.js",
"url": "https://app.daily.dev/tags/nodejs?ref=roadmapsh", "url": "https://app.daily.dev/tags/nodejs?ref=roadmapsh",
"type": "article" "type": "article"
},
{
"title": "What is an API (in 5 minutes)",
"url": "https://youtu.be/ByGJQzlzxQg?si=9EB9lgRvEOgt3xPJ",
"type": "video"
} }
] ]
}, },
@ -1867,6 +1892,11 @@
"title": "winston Website", "title": "winston Website",
"url": "https://github.com/winstonjs/winston", "url": "https://github.com/winstonjs/winston",
"type": "opensource" "type": "opensource"
},
{
"title": "A Complete Guide to Winston Logging in Node.js",
"url": "https://betterstack.com/community/guides/logging/how-to-install-setup-and-use-winston-and-morgan-to-log-node-js-applications/",
"type": "article"
} }
] ]
}, },

@ -1514,12 +1514,12 @@
"description": "PgBouncer is a lightweight connection pooler for PostgreSQL, designed to reduce the overhead associated with establishing new database connections. It sits between the client and the PostgreSQL server, maintaining a pool of active connections that clients can reuse, thus improving performance and resource utilization. PgBouncer supports multiple pooling modes, including session pooling, transaction pooling, and statement pooling, catering to different use cases and workloads. It is highly configurable, allowing for fine-tuning of connection limits, authentication methods, and other parameters to optimize database access and performance.", "description": "PgBouncer is a lightweight connection pooler for PostgreSQL, designed to reduce the overhead associated with establishing new database connections. It sits between the client and the PostgreSQL server, maintaining a pool of active connections that clients can reuse, thus improving performance and resource utilization. PgBouncer supports multiple pooling modes, including session pooling, transaction pooling, and statement pooling, catering to different use cases and workloads. It is highly configurable, allowing for fine-tuning of connection limits, authentication methods, and other parameters to optimize database access and performance.",
"links": [ "links": [
{ {
"title": "pgbounder/pgbouncer", "title": "pgbouncer/pgbouncer",
"url": "https://github.com/pgbouncer/pgbouncer", "url": "https://github.com/pgbouncer/pgbouncer",
"type": "opensource" "type": "opensource"
}, },
{ {
"title": "PgBounder Website", "title": "PgBouncer Website",
"url": "https://www.pgbouncer.org/", "url": "https://www.pgbouncer.org/",
"type": "article" "type": "article"
} }

@ -137,6 +137,11 @@
"title": "Python Functions - W3Schools", "title": "Python Functions - W3Schools",
"url": "https://www.w3schools.com/python/python_functions.asp", "url": "https://www.w3schools.com/python/python_functions.asp",
"type": "article" "type": "article"
},
{
"title": "Defining Python Functions",
"url": "https://realpython.com/defining-your-own-python-function/",
"type": "article"
} }
] ]
}, },
@ -319,6 +324,11 @@
"title": "Explore top posts about Python", "title": "Explore top posts about Python",
"url": "https://app.daily.dev/tags/python?ref=roadmapsh", "url": "https://app.daily.dev/tags/python?ref=roadmapsh",
"type": "article" "type": "article"
},
{
"title": "Learn Python - Full Course",
"url": "https://www.youtube.com/watch?v=4M87qBgpafk",
"type": "video"
} }
] ]
}, },
@ -328,7 +338,7 @@
"links": [ "links": [
{ {
"title": "Visit Dedicated DSA Roadmap", "title": "Visit Dedicated DSA Roadmap",
"url": "https://roadmap.sh/data-structures-and-algorithms", "url": "https://roadmap.sh/datastructures-and-algorithms",
"type": "article" "type": "article"
}, },
{ {
@ -1166,10 +1176,16 @@
} }
] ]
}, },
"virtualenv@_IXXTSwQOgYzYIUuKVWNE.md": { "_IXXTSwQOgYzYIUuKVWNE": {
"title": "virtualenv", "title": "virtualenv",
"description": "", "description": "`virtualenv` is a tool to create isolated Python environments. It creates a folder which contains all the necessary executables to use the packages that a Python project would need.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "Virtual Environments",
"url": "https://virtualenv.pypa.io/en/latest/",
"type": "article"
}
]
}, },
"N5VaKMbgQ0V_BC5tadV65": { "N5VaKMbgQ0V_BC5tadV65": {
"title": "pyenv", "title": "pyenv",
@ -1382,7 +1398,7 @@
}, },
"SSnzpijHLO5_l7DNEoMfx": { "SSnzpijHLO5_l7DNEoMfx": {
"title": "nose", "title": "nose",
"description": "Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework.\n\nVisit the following resources to learn more:", "description": "Nose is another opensource testing framework that extends `unittest` to provide a more flexible testing framework. Note that Nose is no longer maintained and `pytest` is considered the replacement.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Introduction to Nose", "title": "Introduction to Nose",

@ -1265,6 +1265,11 @@
"title": "Explore top posts about Jest", "title": "Explore top posts about Jest",
"url": "https://app.daily.dev/tags/jest?ref=roadmapsh", "url": "https://app.daily.dev/tags/jest?ref=roadmapsh",
"type": "article" "type": "article"
},
{
"title": "Testing JavaScript with Jest on Vultr",
"url": "https://developer.mozilla.org/en-US/blog/test-javascript-with-jest-on-vultr/",
"type": "article"
} }
] ]
}, },
@ -1670,6 +1675,11 @@
"title": "React Suspense", "title": "React Suspense",
"url": "https://react.dev/reference/react/Suspense", "url": "https://react.dev/reference/react/Suspense",
"type": "article" "type": "article"
},
{
"title": "React Suspense - A complete guide",
"url": "https://hygraph.com/blog/react-suspense",
"type": "article"
} }
] ]
}, },

@ -27,8 +27,29 @@
}, },
"jl1FsQ5-WGKeFyaILNt_p": { "jl1FsQ5-WGKeFyaILNt_p": {
"title": "What is Technical Writing?", "title": "What is Technical Writing?",
"description": "Technical writing involves explaining complex concepts in a simple, easy-to-understand language to a specific audience. This form of writing is commonly utilized in fields such as engineering, computer hardware and software, finance, consumer electronics, and biotechnology.\n\nThe primary objective of a technical writer is to simplify complicated information and present it in a clear and concise manner. The duties of a technical writer may include creating how-to guides, instruction manuals, FAQ pages, journal articles, and other technical content that can aid the user's understanding.\n\nTechnical writing prioritizes clear and consistent communication, using straightforward language and maintaining a uniform writing style to prevent confusion. Technical writers often integrate visual aids and leverage documentation tools to achieve these objectives.\n\nThe ultimate goal is to enable the user to understand and navigate a new product or concept without difficulty.", "description": "Technical writing involves explaining complex concepts in a simple, easy-to-understand language to a specific audience. This form of writing is commonly utilized in fields such as engineering, computer hardware and software, finance, consumer electronics, and biotechnology.\n\nThe primary objective of a technical writer is to simplify complicated information and present it in a clear and concise manner. The duties of a technical writer may include creating how-to guides, instruction manuals, FAQ pages, journal articles, and other technical content that can aid the user's understanding.\n\nTechnical writing prioritizes clear and consistent communication, using straightforward language and maintaining a uniform writing style to prevent confusion. Technical writers often integrate visual aids and leverage documentation tools to achieve these objectives.\n\nThe ultimate goal is to enable the user to understand and navigate a new product or concept without difficulty.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Indeed: What Is Technical Writing?",
"url": "https://www.indeed.com/career-advice/career-development/technical-writing",
"type": "article"
},
{
"title": "TechWhirl: What Is Technical Writing?",
"url": "https://techwhirl.com/what-is-technical-writing/",
"type": "article"
},
{
"title": "Amruta Ranade: What do Technical Writers do?",
"url": "https://www.youtube.com/watch?v=biocrCx5T_k",
"type": "video"
},
{
"title": "Technical Writer HQ: What is Technical Writing?",
"url": "https://www.youtube.com/watch?v=KEI5JzBp2Io",
"type": "video"
}
]
}, },
"j69erqfosSZMDlmKcnnn0": { "j69erqfosSZMDlmKcnnn0": {
"title": "Role of Technical Writers inOrganizations", "title": "Role of Technical Writers inOrganizations",

@ -265,8 +265,19 @@
}, },
"76kp98rvph_8UOXZR-PBC": { "76kp98rvph_8UOXZR-PBC": {
"title": "Resource Lifecycle", "title": "Resource Lifecycle",
"description": "", "description": "Each Terraform resource is subject to the lifecycle: Create, Update or Recreate, Destroy. When executing `terraform apply`, each resource:\n\n* which exists in configuration but not in state is created\n* which exists in configuration and state and has changed is updated\n* which exists in configuration and state and has changed, but cannot updated due to API limitation is destroyed and recreated\n* which exists in state, but not (anymore) in configuration is destroyed\n\nThe lifecycle behaviour can be modified to some extend using the `lifecycle` meta argument.\n\nLearn more from the following resources:",
"links": [] "links": [
{
"title": "How Terraform Applies a Configuration",
"url": "https://developer.hashicorp.com/terraform/language/resources/behavior#how-terraform-applies-a-configuration",
"type": "article"
},
{
"title": "The lifecycle Meta-Argument",
"url": "https://developer.hashicorp.com/terraform/language/meta-arguments/lifecycle",
"type": "article"
}
]
}, },
"EIsex6gNHDRYHn0o2spzi": { "EIsex6gNHDRYHn0o2spzi": {
"title": "depends_on", "title": "depends_on",
@ -495,7 +506,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "@Article@Terraform Locals", "title": "Terraform Locals",
"url": "https://spacelift.io/blog/terraform-locals", "url": "https://spacelift.io/blog/terraform-locals",
"type": "article" "type": "article"
} }
@ -550,7 +561,7 @@
}, },
"8giL6H5944M2L0rwxjPso": { "8giL6H5944M2L0rwxjPso": {
"title": "Sensitive Outputs", "title": "Sensitive Outputs",
"description": "Terraform sensitive outputs are a feature used to protect sensitive information in Terraform configurations. When an output is marked as sensitive, Terraform obscures its value in the console output and state files, displaying it as \"\" instead of the actual value. This is crucial for protecting sensitive data like passwords or API keys.\n\nTo mark an output as sensitive, use the sensitive argument in the output block:\n\n output \"database_password\" {\n value = aws_db_instance.example.password\n sensitive = true\n }\n \n\nSensitive outputs are still accessible programmatically, but their values are hidden in logs and the console to prevent accidental exposure. This feature helps maintain security when sharing Terraform configurations or outputs with team members or in CI/CD pipelines.\n\nLearn more from the following resources:", "description": "Terraform sensitive outputs are a feature used to protect sensitive information in Terraform configurations. When an output is marked as sensitive, Terraform obscures its value in the console output, displaying it as `<sensitive>` instead of the actual value. This is crucial for protecting sensitive data like passwords or API keys.\n\nTo mark an output as sensitive, use the sensitive argument in the output block:\n\n output \"database_password\" {\n value = aws_db_instance.example.password\n sensitive = true\n }\n \n\nSensitive outputs are still accessible programmatically and are written to the state in clear text, but their values are hidden in logs and the console to prevent accidental exposure. This feature helps maintain security when sharing Terraform configurations or outputs with team members or in CI/CD pipelines.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "How to output sensitive data in Terraform", "title": "How to output sensitive data in Terraform",
@ -679,6 +690,11 @@
"url": "https://developer.hashicorp.com/terraform/tutorials/cli/plan", "url": "https://developer.hashicorp.com/terraform/tutorials/cli/plan",
"type": "course" "type": "course"
}, },
{
"title": "Terraform Plan Documentation",
"url": "https://developer.hashicorp.com/terraform/cli/commands/plan",
"type": "article"
},
{ {
"title": "Terraform plan command and how it works", "title": "Terraform plan command and how it works",
"url": "https://spacelift.io/blog/terraform-plan", "url": "https://spacelift.io/blog/terraform-plan",
@ -702,7 +718,7 @@
}, },
{ {
"title": "Terraform Apply Documentation", "title": "Terraform Apply Documentation",
"url": "https://developer.hashicorp.com/terraform/cli/commands/plan", "url": "https://developer.hashicorp.com/terraform/cli/commands/apply",
"type": "article" "type": "article"
}, },
{ {
@ -1091,7 +1107,7 @@
"description": "Creating local modules in Terraform involves organizing a set of related resources into a reusable package within your project. To create a local module, you typically create a new directory within your project structure and place Terraform configuration files (`.tf`) inside it. These files define the resources, variables, and outputs for the module. The module can then be called from your root configuration using a module block, specifying the local path to the module directory. Local modules are useful for encapsulating and reusing common infrastructure patterns within a project, improving code organization and maintainability. They can accept input variables for customization and provide outputs for use in the calling configuration. Local modules are particularly beneficial for breaking down complex infrastructures into manageable, logical components and for standardizing resource configurations across a project.\n\nLearn more from the following resources:", "description": "Creating local modules in Terraform involves organizing a set of related resources into a reusable package within your project. To create a local module, you typically create a new directory within your project structure and place Terraform configuration files (`.tf`) inside it. These files define the resources, variables, and outputs for the module. The module can then be called from your root configuration using a module block, specifying the local path to the module directory. Local modules are useful for encapsulating and reusing common infrastructure patterns within a project, improving code organization and maintainability. They can accept input variables for customization and provide outputs for use in the calling configuration. Local modules are particularly beneficial for breaking down complex infrastructures into manageable, logical components and for standardizing resource configurations across a project.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Build and use a local moduke", "title": "Build and use a local module",
"url": "https://developer.hashicorp.com/terraform/tutorials/modules/module-create", "url": "https://developer.hashicorp.com/terraform/tutorials/modules/module-create",
"type": "article" "type": "article"
}, },
@ -1299,7 +1315,7 @@
}, },
"wSh7bbPswcFAzOicX8VPx": { "wSh7bbPswcFAzOicX8VPx": {
"title": "state pull / push", "title": "state pull / push",
"description": "The `terraform state pull` and `terraform state push` commands are used for managing Terraform state in remote backends. The `pull` command retrieves the current state from the configured backend and outputs it to stdout, allowing for inspection or backup of the remote state. It's useful for debugging or for performing manual state manipulations.\n\nThe`push` command does the opposite, uploading a local state file to the configured backend, overwriting the existing remote state. This is typically used to restore a backup or to manually reconcile state discrepancies. Both commands should be used with caution, especially push, as they can potentially overwrite important state information.\n\nLearn more from the following resources:", "description": "The `terraform state pull` and `terraform state push` commands are used for managing Terraform state in remote backends. The `pull` command retrieves the current state from the configured backend and outputs it to stdout, allowing for inspection or backup of the remote state. It's useful for debugging or for performing manual state manipulations.\n\nThe `push` command does the opposite, uploading a local state file to the configured backend, overwriting the existing remote state. This is typically used to restore a backup or to manually reconcile state discrepancies. Both commands should be used with caution, especially push, as they can potentially overwrite important state information.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Command - State pull", "title": "Command - State pull",

@ -685,7 +685,7 @@
}, },
"oxzcYXxy2I7GI7nbvFYVa": { "oxzcYXxy2I7GI7nbvFYVa": {
"title": "Constructor Overloading", "title": "Constructor Overloading",
"description": "In TypeScript, you can achieve constructor overloading by using multiple constructor definitions with different parameter lists in a single class. Given below is the example where we have multiple definitions for the constructor:\n\n class Point {\n // Overloads\n constructor(x: number, y: string);\n constructor(s: string);\n constructor(xs: any, y?: any) {\n // TBD\n }\n }\n \n\nNote that, similar to function overloading, we only have one implementation of the consructor and it's the only the signature that is overloaded.\n\nLearn more from the following resources:", "description": "In TypeScript, you can achieve constructor overloading by using multiple constructor definitions with different parameter lists in a single class. Given below is the example where we have multiple definitions for the constructor:\n\n class Point {\n // Overloads\n constructor(x: number, y: string);\n constructor(s: string);\n constructor(xs: any, y?: any) {\n // TBD\n }\n }\n \n\nNote that, similar to function overloading, we only have one implementation of the constructor and it's the only the signature that is overloaded.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Constructors - TypeScript", "title": "Constructors - TypeScript",
@ -1029,7 +1029,7 @@
"links": [ "links": [
{ {
"title": "Ambient Modules", "title": "Ambient Modules",
"url": "https://www.typescriptlang.org/docs/handbook/modules.html#ambient-modules", "url": "https://www.typescriptlang.org/docs/handbook/modules/reference.html#ambient-modules",
"type": "article" "type": "article"
} }
] ]
@ -1079,7 +1079,7 @@
}, },
"fU8Vnw1DobM4iXl1Tq6EK": { "fU8Vnw1DobM4iXl1Tq6EK": {
"title": "Formatting", "title": "Formatting",
"description": "Prettier is an opinionated code formatter with support for JavaScript, HTML, CSS, YAML, Markdown, GraphQL Schemas. By far the biggest reason for adopting Prettier is to stop all the on-going debates over styles.\n\nVisit the following resources to learn more:", "description": "Prettier is an opinionated code formatter with support for JavaScript, HTML, CSS, YAML, Markdown, GraphQL Schemas. By far the biggest reason for adopting Prettier is to stop all the on-going debates over styles. Biome is a faster alternative to Prettier! (It also does linting!)\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Prettier Website", "title": "Prettier Website",
@ -1090,6 +1090,11 @@
"title": "Why Prettier", "title": "Why Prettier",
"url": "https://prettier.io/docs/en/why-prettier.html", "url": "https://prettier.io/docs/en/why-prettier.html",
"type": "article" "type": "article"
},
{
"title": "BiomeJS Website",
"url": "https://biomejs.dev",
"type": "article"
} }
] ]
}, },

@ -38,27 +38,55 @@
}, },
"zYCBEUqZVlvjlAKnh5cPQ": { "zYCBEUqZVlvjlAKnh5cPQ": {
"title": "Behavior Design", "title": "Behavior Design",
"description": "Behavior Design is an approach that combines elements of psychology, neuroscience, and design principles to understand and influence human behaviors. The goal behind behavior design is to make it easier for users to accomplish their goals or desired actions within a product, service, or system.\n\nIn the context of UX Design, behavior design focuses on:\n\n* **Motivation**: Understanding what motivates users to take action, such as personal interests, external rewards, or social influence.\n \n* **Ability**: Ensuring that users have the necessary skills, time, and resources to complete a desired action.\n \n* **Triggers**: Implementing well-timed prompts that encourage users to take a specific action within the interface.\n \n\nTo create effective behavior designs, UX designers should:\n\n* Identify user goals and desired outcomes.\n* Analyze the user's environment and potential barriers that may affect their ability to complete the desired action.\n* Design solutions that address both the motivation and ability aspects of behavior change, as well as the appropriate triggers to prompt action.\n* Continuously test and iterate on the design to better understand user behavior and optimize engagement.\n\nBy focusing on behavior design, UX designers can create more engaging and user-friendly experiences that ultimately drive user satisfaction and increase the chances of achieving their desired goals.", "description": "Behavior Design is an approach that combines elements of psychology, neuroscience, and design principles to understand and influence human behaviors. The goal behind behavior design is to make it easier for users to accomplish their goals or desired actions within a product, service, or system.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Behavior Design",
"url": "https://www.interaction-design.org/literature/topics/behavioral-design",
"type": "article"
}
]
}, },
"D553-nVELaB5gdxtoKSVc": { "D553-nVELaB5gdxtoKSVc": {
"title": "Behavioral Science", "title": "Behavioral Science",
"description": "Behavioral science is the interdisciplinary study of human behavior, which encompasses disciplines like psychology, sociology, and anthropology. This field- primarily focuses on understanding what impacts our decisions, actions, and emotions. In the context of UX design, applying behavioral science concepts and principles can enhance user experience by improving user engagement, usability, and overall satisfaction.\n\nSome key principles of behavioral science that UX designers should consider include:\n\n* **Cognitive biases:** These are mental shortcuts our brains take when processing information which can lead to irrational decisions or judgments. Designers can use these biases to guide user behavior, as seen in the 'anchoring effect,' where users rely on the first piece of information provided on a page.\n \n* **Loss aversion:** People tend to prioritize avoiding losses over acquiring gains. Designers can use this to their advantage by highlighting potential losses that could occur without using a specific feature or product, increasing user motivation.\n \n* **Social proof:** People look to others for cues about how to behave in uncertain situations. To leverage this effect, designers can include testimonials, ratings, and user-generated content to demonstrate that others have found value in their product or service.\n \n* **Incentivization:** Users may be more likely to engage with a product if there are rewards or incentives for completing certain tasks. Gamifying an experience or offering exclusive benefits can encourage users to engage more deeply with the product.\n \n* **Choice architecture:** The way choices are presented influences users' decisions. Designers can use this to guide users to desired outcomes or simplify decision-making by reducing the number of options presented.\n \n* **Habit formation:** Creating a habit-forming experience can lead to increased user retention and engagement. Designers should consider features and elements that reinforce routine usage or solve recurring pain-points.\n \n\nBy integrating behavioral science principles into their design process, UX designers can better understand and anticipate users' needs, ultimately creating more enjoyable, effective, and engaging experiences.", "description": "Behavioral science is the interdisciplinary study of human behavior, which encompasses disciplines like psychology, sociology, and anthropology. This field- primarily focuses on understanding what impacts our decisions, actions, and emotions. In the context of UX design, applying behavioral science concepts and principles can enhance user experience by improving user engagement, usability, and overall satisfaction.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Behavioral Science",
"url": "https://uxplanet.org/how-to-use-behavioral-science-to-influence-user-behavior-in-design-581dc0805f7c",
"type": "article"
},
{
"title": "Future of Behavioral Science",
"url": "https://behavioralscientist.org/what-is-the-future-of-design-and-behavioral-science-a-conversation-with-cliff-kuang/",
"type": "article"
}
]
}, },
"_lv6GJ0wlMfhJ7PHRGQ_V": { "_lv6GJ0wlMfhJ7PHRGQ_V": {
"title": "Behavioral Economics", "title": "Behavioral Economics",
"description": "Behavioral Economics is a subfield of economics that studies the psychological, social, and emotional factors that influence decision-making and economic behavior. It seeks to understand why people make choices that deviate from the traditional economic model, which assumes that individuals behave rationally and seek to maximize their utility.\n\nThe key concepts of Behavioral Economics include:\n\n* Bounded Rationality: People make decisions based on limited information, cognitive constraints, and personal biases.\n \n* Prospect Theory: Individuals perceive losses and gains asymmetrically, feeling greater pain from a loss than satisfaction from an equivalent gain.\n \n* Anchoring: People tend to rely on a reference point (the anchor) when assessing the value of an unknown option, which can lead to arbitrary or irrational decisions.\n \n* Mental Accounting: Individuals mentally categorize and allocate expenses differently, which can lead to biases like the sunk cost fallacy or the endowment effect.\n \n* Nudging: Subtle changes to choice architecture can influence people's decisions without restricting their freedom of choice, through methods like default options, framing, or social proof.\n \n\nUnderstanding and applying behavioral economic principles can help UX designers create interfaces and experiences that account for these biases and help users make better choices. By designing to minimize cognitive load, supporting decision-making, and presenting options effectively, UX designers can enhance user satisfaction and encourage desired actions.", "description": "Behavioral Economics is a subfield of economics that studies the psychological, social, and emotional factors that influence decision-making and economic behavior. It seeks to understand why people make choices that deviate from the traditional economic model, which assumes that individuals behave rationally and seek to maximize their utility.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Behavioral Economics",
"url": "https://www.interaction-design.org/literature/article/behavioural-economics-ideas-that-you-can-use-in-ux-design",
"type": "article"
}
]
}, },
"2NlgbLeLBYwZX2u2rKkIO": { "2NlgbLeLBYwZX2u2rKkIO": {
"title": "BJ Fogg's Behavior Model", "title": "BJ Fogg's Behavior Model",
"description": "B.J. Fogg, a renowned psychologist, and researcher at Stanford University, proposed the [Fogg Behavior Model (FBM)](https://www.behaviormodel.org/). This insightful model helps UX designers understand and influence user behavior by focusing on three core elements. These key factors are motivation, ability, and prompts.\n\n* **Motivation**: This element emphasizes the user's desire to perform a certain action or attain specific outcomes. Motivation can be linked to three core elements specified as sensation (pleasure/pain), anticipation (hope/fear), and social cohesion (belonging/rejection).\n \n* **Ability**: Ability refers to the user's capacity, both physical and mental, to perform desired actions. To enhance the ability of users, UX designers should follow the principle of simplicity. The easier it is to perform an action, the more likely users will engage with the product. Some factors to consider are time, financial resources, physical efforts, and cognitive load.\n \n* **Prompts**: Prompts are the cues, notifications, or triggers that signal users to take an action. For an action to occur, prompts should be presented at the right time when the user has adequate motivation and ability.\n \n\nUX designers should strive to find the balance between these three factors to facilitate the desired user behavior. By understanding your audience and their needs, implementing clear and concise prompts, and minimizing the effort required for action, the FBM can be an effective tool for designing user-centered products.", "description": "B.J. Fogg, a renowned psychologist, and researcher at Stanford University, proposed the Fogg Behavior Model (FBM). This insightful model helps UX designers understand and influence user behavior by focusing on three core elements. These key factors are motivation, ability, and prompts.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "meaning of BJ fogg's behavior model", "title": "Meaning of BJ Fogg's Behavior Model",
"url": "https://behaviormodel.org/", "url": "https://behaviormodel.org/",
"type": "article" "type": "article"
},
{
"title": "The Fogg Behavior Model",
"url": "https://blog.logrocket.com/ux-design/fogg-behavior-model/",
"type": "article"
} }
] ]
}, },
@ -85,8 +113,19 @@
}, },
"lRBC8VYJPsR65LHDuuIsL": { "lRBC8VYJPsR65LHDuuIsL": {
"title": "BJ Fogg's Behavior Grid", "title": "BJ Fogg's Behavior Grid",
"description": "The BJ Fogg Behavior Grid is a framework that helps UX designers, product managers, and marketers understand and identify different types of behavior change. Created by Stanford University professor B.J. Fogg, the grid consists of 15 behavior types based on the combination of three dimensions: Duration, Frequency, and Intensity.\n\nDuration\n--------\n\n* **One-time behaviors**: These are behaviors that happen only once (e.g., signing up for an account).\n* **Short-term behaviors**: Behaviors that take place for a limited period of time (e.g., using a trial version of a product).\n* **Long-term behaviors**: Behaviors that are ongoing or happen repeatedly over a considerable time (e.g., continued use of a product).\n\nFrequency\n---------\n\n* **Single-instance behaviors**: Behaviors that occur only one time per occasion (e.g., entering a password once to log in)\n* **Infrequent behaviors**: Behaviors that do not happen regularly or happen sporadically (e.g., posting on social media once a week)\n* **Frequent behaviors**: Behaviors that happen on a consistent and regular basis (e.g., checking email multiple times a day)\n\nIntensity\n---------\n\n* **Low-stakes behaviors**: Behaviors that have little impact or are considered less important (e.g., choosing a profile picture)\n* **Medium-stakes behaviors**: Behaviors that have moderate importance or impact (e.g., deciding how much personal information to share)\n* **High-stakes behaviors**: Behaviors that have significant impact on the user's experience or perception of the product (e.g., making a purchase or canceling a subscription)\n\nUsing this grid, designers can classify user behaviors into different types and tailor their UX design strategies to target the specific behavior they want to encourage, change, or eliminate. Additionally, the Behavior Grid can be used to analyze and understand user motivations, triggers, and barriers, enabling designers to create more effective behavior change interventions.", "description": "The BJ Fogg Behavior Grid is a framework that helps UX designers, product managers, and marketers understand and identify different types of behavior change. Created by Stanford University professor B.J. Fogg, the grid consists of 15 behavior types based on the combination of three dimensions: Duration, Frequency, and Intensity.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "BJ Fogg’s Behavior Grid",
"url": "https://behaviordesign.stanford.edu/resources/fogg-behavior-grid",
"type": "article"
},
{
"title": "The Fogg Behavior Model",
"url": "https://blog.logrocket.com/ux-design/fogg-behavior-model/",
"type": "article"
}
]
}, },
"PLLTcrHkhd1KYaMSRKALp": { "PLLTcrHkhd1KYaMSRKALp": {
"title": "Nir Eyal's Hook Model", "title": "Nir Eyal's Hook Model",
@ -136,8 +175,14 @@
}, },
"ZufrLRNkMoJ4e2T-vWxCR": { "ZufrLRNkMoJ4e2T-vWxCR": {
"title": "Automate the Act of Repetition", "title": "Automate the Act of Repetition",
"description": "As a UX designer, one of your main goals is to simplify and streamline user interactions. Often, users are required to perform repetitive tasks, which can lead to frustration and decrease efficiency. To enhance the user experience and ensure smooth sailing, it's essential to reduce or eliminate the need for repeated actions by automating repetitive tasks wherever possible.\n\nBenefits of Automation\n----------------------\n\nWhen properly implemented, automation can:\n\n* Save time: By cutting down on repeated actions, users can complete tasks more quickly, increasing productivity.\n* Reduce errors: Automating tasks can minimize human error and ensure that actions are completed correctly every time.\n* Improve user satisfaction: Reducing tedious tasks can lead to a more positive user experience and increase user retention.\n\nStrategies for Automation\n-------------------------\n\nAs a UX designer, consider the following strategies to automate repetitive tasks:\n\n* **Pre-fill forms**: Auto-fill form fields with the information that the user has entered previously or is likely to enter, such as their name, email address, or phone number. This can save users time and effort in filling out forms.\n* **Remember user preferences**: Store user settings and preferences, such as preferred language, currency, or theme, so that users don't have to set them again every time they visit your site or app.\n* **Smart suggestions**: Implement predictive text or auto-suggestions based on user input or past behavior. For example, when typing search queries or filling out forms, users may appreciate suggestions to help them complete their task quickly.\n* **Batch actions**: Allow users to perform actions, like selecting or deleting items, in groups rather than individually. This can significantly reduce the number of clicks and time required to complete the task.\n* **Keyboard shortcuts**: Provide keyboard shortcuts for common actions, enabling users to perform tasks without using a mouse or touch interactions. This can be particularly helpful for power users or users with accessibility needs.\n\nBy automating acts of repetition in your design, you can enhance the user experience, reduce frustration and improve overall satisfaction. Be mindful of your users' needs, analyze the repetitive tasks they may encounter, and implement effective automation techniques to create a seamless, efficient, and enjoyable experience.", "description": "To enhance user experience and streamline interactions, it's crucial to automate repetitive tasks that often lead to frustration and decreased efficiency. Properly implemented automation can save time, reduce errors, and improve user satisfaction by minimizing tedious actions. As a UX designer, consider strategies such as pre-filling forms with previously entered information, remembering user preferences, providing smart suggestions based on past behavior, enabling batch actions for group tasks, and offering keyboard shortcuts for common actions. By focusing on these automation techniques, you can create a seamless and enjoyable experience that meets users' needs and increases retention.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Repeating Elements",
"url": "https://helpx.adobe.com/au/xd/help/create-repeating-elements.html",
"type": "article"
}
]
}, },
"y6CqgqTvOt-LrvTnPJkQQ": { "y6CqgqTvOt-LrvTnPJkQQ": {
"title": "Make or Change Habits", "title": "Make or Change Habits",
@ -171,8 +216,14 @@
}, },
"w_QWN80zCf1tsVROeyuvo": { "w_QWN80zCf1tsVROeyuvo": {
"title": "Behavior Change Strategies", "title": "Behavior Change Strategies",
"description": "Behavior change strategies are techniques that aim to help users adopt new behaviors or break existing ones to achieve specific goals, such as healthier lifestyles or improved productivity. In UX design, these strategies are applied to design elements and features within digital products or services to motivate and support users in making lasting changes in their actions.\n\nHere are some key behavior change strategies often employed in UX design:\n\n* **Goal Setting:** Asking users to set specific, measurable, achievable, relevant, and time-bound (SMART) goals can help them focus their efforts and track their progress.\n \n* **Feedback and Rewards:** Providing users with real-time feedback on their progress and rewarding them with positive reinforcement (e.g., badges or points) can increase motivation and engagement.\n \n* **Social Comparisons:** Facilitating comparisons between users or groups can tap into social influence and normative pressure, encouraging behavior change through competition or collaboration.\n \n* **Reminders and Prompts:** Sending timely reminders or prompts can help reinforce desired behaviors by making them more salient and top of mind.\n \n* **Choice Architecture:** Structuring the presentation of options, defaults, and information can nudge users towards better decisions without restricting their freedom of choice.\n \n* **Modeling and Stories:** Demonstrating desired behaviors through role models, cases, testimonials or stories can provide inspiration and social proof that change is possible and desirable.\n \n* **Progressive Disclosure:** Gradually introducing advanced features, content or challenges can help users build their skills and confidence, preventing them from feeling overwhelmed or disengaged.\n \n* **Personalization and Tailoring:** Customizing content or recommendations based on a user's preferences, history or characteristics can make interventions more relevant and effective.\n \n\nBy incorporating these behavior change strategies in your UX design, you improve the chances of users successfully adopting the desired behaviors, which can ultimately lead to a more positive and effective user experience.", "description": "Behavior change strategies are techniques that aim to help users adopt new behaviors or break existing ones to achieve specific goals, such as healthier lifestyles or improved productivity. In UX design, these strategies are applied to design elements and features within digital products or services to motivate and support users in making lasting changes in their actions.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Behavioral Change Strategies",
"url": "https://blog.logrocket.com/ux-design/starter-guide-behavioral-design/",
"type": "article"
}
]
}, },
"q1WX2Cp4k4-o1T1vgL8FH": { "q1WX2Cp4k4-o1T1vgL8FH": {
"title": "Understanding the Product", "title": "Understanding the Product",
@ -201,8 +252,14 @@
}, },
"SGO9hHju49_py0n0ASGBe": { "SGO9hHju49_py0n0ASGBe": {
"title": "Business Model Canvas", "title": "Business Model Canvas",
"description": "The **Business Model Canvas** is a strategic management and visual representation tool that allows you to describe, design, challenge, and pivot your existing business model. Developed by Alexander Osterwalder and Yves Pigneur, it helps organizations to understand how they create, deliver, and capture value. The canvas is divided into nine building blocks, which represent the essential elements of a business model:\n\n* **Customer Segments (CS):** These are the target groups your business aims to serve, such as specific users, organizations, or market segments.\n* **Value Propositions (VP):** The unique combinations of products and services that create value for your customer segments. It describes the reasons why customers choose your product or service over your competitors'.\n* **Channels (CH):** The means by which your company communicates, delivers, and distributes its value propositions to the customers. This block includes both physical (e.g., stores) and virtual (e.g., online) channels.\n* **Customer Relationships (CR):** The type of relationships your business establishes and maintains with its customer segments, such as personal assistance, self-service, or automated services.\n* **Revenue Streams (RS):** The ways in which your company generates revenue from each customer segment, such as through sales, subscriptions, or advertising fees.\n* **Key Resources (KR):** The most important assets needed to make your business model work, including physical, financial, intellectual, and human resources.\n* **Key Activities (KA):** The primary actions your company must perform to deliver its value propositions, reach its customer segments, and maintain customer relationships. These can involve production, problem-solving, or service provision.\n* **Key Partnerships (KP):** The network of suppliers, partners, and allies that help your business execute its key activities, optimize resources, and reduce risks.\n* **Cost Structure (CS):** The major expenses associated with operating your business model, such as fixed and variable costs, economies of scale, and cost advantages.\n\nWhen designing or analyzing an existing business model, the Business Model Canvas enables you to visually map out all these critical components and understand how they are interconnected. By understanding your current business model, you can identify weaknesses, opportunities for improvement, and potential pivots to enhance the overall user experience and the success of the business.", "description": "The **Business Model Canvas** is a strategic management and visual representation tool that allows you to describe, design, challenge, and pivot your existing business model. Developed by **Alexander Osterwalder** and **Yves Pigneur**, it helps organizations to understand how they create, deliver, and capture value. The canvas is divided into nine building blocks, which represent the essential elements of a business model:\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Business Model Canvas",
"url": "https://www.interaction-design.org/literature/topics/business-model-canvas",
"type": "article"
}
]
}, },
"sc8jJ_77CrkQuxIJYk28Q": { "sc8jJ_77CrkQuxIJYk28Q": {
"title": "Lean Canvas", "title": "Lean Canvas",
@ -211,8 +268,14 @@
}, },
"GI06-DbGyJlQXq5Tyi-aH": { "GI06-DbGyJlQXq5Tyi-aH": {
"title": "Business Model Inspirator", "title": "Business Model Inspirator",
"description": "A Business Model Inspirator is a tool or method that helps you to generate new or creative ideas for the strategic, operational, and financial aspects of a business. It helps entrepreneurs, startups, and established companies to explore different ways of designing or improving their business models by drawing inspiration from various sources.\n\nSome key aspects of Business Model Inspirators include:\n\n* **Analyze Successful Models**: Look at successful companies from diverse industries to identify the core elements that made their business models successful. Understanding these elements can spark ideas for your own business model.\n \n* **Cross-Pollination**: Combine elements from various industries and business models to create an innovative approach that suits your specific domain. This process can lead to the development of a unique value proposition and competitive advantage.\n \n* **Experimentation**: Test different ideas to find the most feasible and scalable business model by iteratively prototyping, validating, and refining the model based on user/client feedback.\n \n* **Futuristic Thinking**: Stay aware of emerging trends, technologies, and structural changes in society that might affect your industry or target market. Use foresight to adapt your business model to future opportunities and challenges.\n \n* **Adaptability**: Be ready to pivot or evolve your business model based on changing market dynamics, user preferences, competitive forces, and other external factors. Developing a flexible business model is crucial to ensure long-term success and sustainability.\n \n\nImplementing a Business Model Inspirator can contribute to the creation of a more innovative and robust UX design, ultimately leading to enhanced customer experiences, increased revenue, and long-term success for your brand.", "description": "A Business Model Inspirator is a tool or method that helps you to generate new or creative ideas for the strategic, operational, and financial aspects of a business. It helps entrepreneurs, startups, and established companies to explore different ways of designing or improving their business models by drawing inspiration from various sources.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Business Model Inspirator",
"url": "https://businessdesign.org/knowledge-base/business-model-inspirator",
"type": "article"
}
]
}, },
"HUZ5n2MRHzQPyjwX2h6Q4": { "HUZ5n2MRHzQPyjwX2h6Q4": {
"title": "Competitor Analysis", "title": "Competitor Analysis",
@ -281,8 +344,19 @@
}, },
"jy5jtSEyNE8iJpad27rPX": { "jy5jtSEyNE8iJpad27rPX": {
"title": "Business Process Model & Notation (BPMN)", "title": "Business Process Model & Notation (BPMN)",
"description": "Business Process Model and Notation (BPMN) is a graphical representation of business processes, providing a standardized and easy-to-understand method for visualizing different aspects of a business. By using BPMN, UX designers can analyze and optimize business processes and workflows, which ultimately improves the overall user experience.\n\nKey Components of BPMN\n----------------------\n\n* Flow Objects: Main building blocks of a BPMN diagram, which include events, activities, and gateways.\n* Connecting Objects: Linking elements between flow objects, such as sequence flows, message flows, and associations.\n* Swimlanes: Visual elements that help organize activities based on roles or responsibilities.\n* Artifacts: Supplementary elements providing additional information, such as data objects, groupings, and annotations.\n\nBenefits of BPMN for UX Design\n------------------------------\n\n* **Visualization**: BPMN offers a clear visual layout of business processes, allowing UX designers to understand the overall structure easily.\n* **Standardization**: As an internationally recognized standard, BPMN ensures consistent interpretation and communication among team members.\n* **Flexibility**: BPMN can accommodate various levels of complexity, enabling designers to model simple or complex processes as needed.\n* **Collaboration**: By bridging the gap between technical and non-technical stakeholders, BPMN empowers cross-functional collaboration throughout the design process.\n\nTo incorporate BPMN in your UX design process, you'll need to familiarize yourself with its various elements and syntax. Consider leveraging BPMN tools and resources to create diagrams that accurately represent your target user's needs and the corresponding business processes. By doing so, you'll be able to craft a more precise and effective user experience.", "description": "Business Process Model and Notation (BPMN) is a graphical representation of business processes, providing a standardized and easy-to-understand method for visualizing different aspects of a business. By using BPMN, UX designers can analyze and optimize business processes and workflows, which ultimately improves the overall user experience.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Business Process Model and Notation (BPMN)",
"url": "https://aguayo.co/en/blog-aguayp-user-experience/business-process-model-notation-for-ux/",
"type": "article"
},
{
"title": "How to Design BPNM",
"url": "https://devlight.io/blog/how-to-design-business-process-model-and-notation-for-a-mobile-app/",
"type": "article"
}
]
}, },
"6yCBFwntQ_KxFmmGTJ8iR": { "6yCBFwntQ_KxFmmGTJ8iR": {
"title": "Prototyping", "title": "Prototyping",
@ -301,8 +375,24 @@
}, },
"HI_urBhPqT0m3AeBQJIej": { "HI_urBhPqT0m3AeBQJIej": {
"title": "Adobe XD", "title": "Adobe XD",
"description": "Adobe XD (Experience Design) is a powerful design and prototyping tool that allows UX designers to create wireframes, mockups, and interactive prototypes for various digital projects. It is available for both Mac and Windows, and it focuses on providing an easy-to-use, intuitive interface for designing responsive websites, mobile apps, and more.\n\nKey Features of Adobe XD\n------------------------\n\n* **Design tools**: Adobe XD offers a set of powerful design tools, such as vector drawing, the ability to import images, and a range of pre-defined UI components to help you create aesthetically pleasing designs. The built-in grid system allows for precise alignment and consistency across your designs.\n \n* **Responsive artboards**: XD allows you to create multiple artboards for different devices and screen sizes. This enables you to visualize and design in one go, for multiple device types.\n \n* **Prototype and Interactions**: With Adobe XD, you can easily add interactions to your designs. This helps in better communication of your ideas and makes it easier for clients and developers to understand your vision. The preview mode enables you to test your prototype and see the interactions in real-time.\n \n* **Collaboration and Sharing**: Adobe XD simplifies collaboration between team members, stakeholders, and developers. You can create shared design specs and live URLs for your prototypes, gather feedback, and even co-edit documents with other designers in real-time.\n \n* **Integrations**: XD seamlessly integrates with other Adobe Creative Cloud applications, such as Photoshop, Illustrator, and After Effects, enabling smoother workflows and consistency across your designs. It also supports third-party plugins to expand its capabilities.\n \n\nTo get started with Adobe XD, you'll need to download and install the application from the [Adobe Creative Cloud website](https://www.adobe.com/products/xd.html). Adobe offers a free basic plan for XD, which allows you to work on one shared document at a time and a limited number of shared prototypes and design specs.\n\nAs a designer, familiarizing yourself with Adobe XD's features and learning how to effectively use it can significantly improve your design process, making your wireframing and prototyping tasks quicker and more efficient.", "description": "Adobe XD (Experience Design) is a powerful design and prototyping tool that allows UX designers to create wireframes, mockups, and interactive prototypes for various digital projects. It is available for both Mac and Windows, and it focuses on providing an easy-to-use, intuitive interface for designing responsive websites, mobile apps, and more.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Adobe XD Platform",
"url": "https://adobexdplatform.com/",
"type": "article"
},
{
"title": "Getting Started with Adobe XD",
"url": "https://helpx.adobe.com/xd/get-started.html",
"type": "article"
},
{
"title": "Learn Adobe XD",
"url": "https://www.adobe.com/ph_en/products/xd/learn/get-started-xd-design.html",
"type": "article"
}
]
}, },
"nb7Ql1gvxqEucsGnIWTyY": { "nb7Ql1gvxqEucsGnIWTyY": {
"title": "Sketch", "title": "Sketch",
@ -311,8 +401,14 @@
}, },
"fZkARg6kPXPemYW1vDMTe": { "fZkARg6kPXPemYW1vDMTe": {
"title": "Balsamiq", "title": "Balsamiq",
"description": "Balsamiq is a popular wireframing tool that helps designers, developers, and product managers to quickly create and visualize user interfaces, web pages, or app screens. It's an easy-to-use software that allows you to focus on ideas and concepts rather than getting caught up in pixel-perfect designs.\n\n**Key Features of Balsamiq**", "description": "Balsamiq is a popular wireframing tool that helps designers, developers, and product managers to quickly create and visualize user interfaces, web pages, or app screens. It's an easy-to-use software that allows you to focus on ideas and concepts rather than getting caught up in pixel-perfect designs.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Balsamiq Website",
"url": "https://balsamiq.com/",
"type": "article"
}
]
}, },
"U4ZEFUcghr9XjSyf-0Np7": { "U4ZEFUcghr9XjSyf-0Np7": {
"title": "Call to Action", "title": "Call to Action",
@ -341,8 +437,14 @@
}, },
"JSBiw0C6aq1LhA33y79PM": { "JSBiw0C6aq1LhA33y79PM": {
"title": "Behavior Change Games", "title": "Behavior Change Games",
"description": "Behavior change games are a powerful UX design pattern that help users adopt new habits or make positive lifestyle changes. These games are typically designed to be engaging, enjoyable, and motivating, utilizing various game elements and mechanics to encourage users to take desired actions.\n\nKey elements of behavior change games\n-------------------------------------\n\n* **Set clear objectives**: Define specific goals users should achieve, such as losing weight or learning a new skill. Well-defined objectives provide a strong focus for the game and encourage user engagement.\n \n* **Feedback and progress**: Provide real-time feedback and track user progress to create a sense of accomplishment. This can include visual cues, points, badges, or leveling up systems.\n \n* **Social interaction**: Utilize social features, such as sharing achievements, comparing results with friends, or team challenges. This enables users to work together, fosters a sense of community, and enhances motivation through friendly competition.\n \n* **Reward system**: Implement a reward system that grants virtual or real rewards for completing tasks or reaching milestones. These rewards can be intrinsic (e.g., personal satisfaction) or extrinsic (e.g., discounts or prizes).\n \n* **Gamification**: Incorporate game-like elements, such as storytelling, quests, or time-limited challenges. These elements add an entertaining aspect, improve user experience, and make the behavior change process more enjoyable.\n \n\nBenefits of behavior change games\n---------------------------------\n\n* **Increased motivation**: By turning the behavior change process into a game, users are often more motivated to participate and stay engaged.\n \n* **Higher user retention**: Engaging games can increase user retention, resulting in higher long-term success rates for behavior change.\n \n* **Measurable results**: These games allow users to easily track progress and outcomes, helping them understand the impact of their actions and reinforcing positive behavior.\n \n* **Personalization**: Games can be tailored to individual users' preferences and play styles, making the experience more enjoyable and relevant.\n \n* **Support network**: The inclusion of social features creates a community of support, forging connections between individuals with similar goals and fostering accountability.\n \n\nWhen designing behavior change games, it's essential to keep user experience in mind, and create an enjoyable and motivating experience. Balancing fun and educational elements can result in a powerful tool for guiding users towards positive change in their lives.", "description": "Behavior change games are a powerful UX design pattern that help users adopt new habits or make positive lifestyle changes. These games are typically designed to be engaging, enjoyable, and motivating, utilizing various game elements and mechanics to encourage users to take desired actions. When designing behavior change games, it's essential to keep user experience in mind, and create an enjoyable and motivating experience. Balancing fun and educational elements can result in a powerful tool for guiding users towards positive change in their lives.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Behavioral Change Games",
"url": "https://medium.com/@jgruver/designing-for-behavioral-change-a-new-approach-in-ux-ui-design-59f9fb0086d1",
"type": "article"
}
]
}, },
"fbIur1tEIdNDE6gls4Bru": { "fbIur1tEIdNDE6gls4Bru": {
"title": "Gamification", "title": "Gamification",
@ -411,8 +513,14 @@
}, },
"m30ePaw_qa36m9Rv9NSFf": { "m30ePaw_qa36m9Rv9NSFf": {
"title": "Be Authentic and Personal", "title": "Be Authentic and Personal",
"description": "When creating a user experience (UX) design, it's essential to be authentic and personal. This means that your design should be genuine, truthful, and relatable to your users. By being authentic and personal, you can create a positive intuitive reaction in your users, as they feel connected and engaged with your website or application. Here are some tips to make your UX design authentic and personal:\n\n#### 1\\. Understand your user persona(s)\n\nBefore you start designing, define your target audience and create user personas that represent them. This may include their age, gender, occupation, interests, and pain points. By understanding the different personas, you can create a design that resonates with each of them, meeting their needs and expectations.\n\n#### 2\\. Use natural and conversational language\n\nTo make your design personal, use natural and conversational language that speaks directly to your users. Avoid jargons, buzzwords, or overly formal language that can create a barrier between you and your users. Your users should be able to understand the content and interact with it smoothly.\n\n#### 3\\. Employ appropriate imagery and visuals\n\nTo enhance authenticity, incorporate images and graphics that are relevant and relatable to your target audience. This means using high-quality, real-life pictures of people or objects that genuinely represent your brand or product. Avoid overused stock images, as they can significantly decrease the perceived authenticity of your design.\n\n#### 4\\. Make emotional connections\n\nEmotions play a vital role in creating personal connections with users. In your design, use color schemes, fonts, and visual elements that evoke emotions and encourage users to form an emotional attachment to your product or brand. The more emotionally invested users are, the more positive their intuitive reactions will be.\n\n#### 5\\. Consistency in design elements\n\nAn authentic user experience is characterized by consistency in design elements, including typography, colors, and visual hierarchy. This consistency helps users feel reassured and comfortable, as they can easily understand and navigate through the design.\n\n#### 6\\. Provide personalized experiences\n\nTo create an authentic UX design, offer personalized experiences to your users based on their preferences, browsing history, or other data. This might include recommending content they may be interested in or tailoring the website layout to meet their specific needs.\n\nBy being authentic and personal in your UX design, you can create a positive and memorable experience for your users. By understanding your target audience, using natural language, incorporating engaging visuals, and providing personalized experiences, you can foster user engagement, trust, and loyalty towards your product or brand.", "description": "When creating a user experience (UX) design, it's essential to be authentic and personal. This means that your design should be genuine, truthful, and relatable to your users. By being authentic and personal, you can create a positive intuitive reaction in your users, as they feel connected and engaged with your website or application.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Rethinking Personas",
"url": "https://uxdesign.cc/rethinking-personas-empathy-and-inclusion-in-ux-design-37145d2ee807",
"type": "article"
}
]
}, },
"jBQtuiHGl3eyCTZG85Vz5": { "jBQtuiHGl3eyCTZG85Vz5": {
"title": "Prime User-Relevant Associations", "title": "Prime User-Relevant Associations",
@ -436,18 +544,41 @@
}, },
"4AzPOKXUN32CkgchRMrRY": { "4AzPOKXUN32CkgchRMrRY": {
"title": "Avoid Cognitive Overhead", "title": "Avoid Cognitive Overhead",
"description": "Cognitive overhead refers to the mental effort needed to understand or operate a given system, tool, or interface. In UX design, it is crucial to minimize cognitive overhead to create user-friendly and efficient experiences. The less mental effort a user needs to invest, the more likely they will have a positive conscious evaluation of your design. Here are three key strategies to help you avoid cognitive overhead in your designs:\n\n#### 1\\. Keep it simple\n\nA clutter-free, clean, and easy-to-navigate design is always a good starting point. In order to keep cognitive overhead to a minimum, focus on simplifying both the interface and the content:\n\n* Utilize white space: By providing ample space between functional elements, you make it easier for users to scan and process the interface.\n* Reduce the number of options: Offering too many choices can overwhelm users or cause them to second-guess their decisions. Aim for a balance of ease and functionality.\n\n#### 2\\. Establish a clear hierarchy\n\nA well-structured hierarchy helps users navigate your design and understand the relationship between elements. This reduces cognitive overhead as users don't have to work hard to make sense of the interface:\n\n* Organize content logically: Group related items together and place them in a consistent order.\n* Use size, color, and typography effectively: Make important information stand out and use visual cues to indicate less important elements.\n\n#### 3\\. Provide clear & concise instructions\n\nYour design should guide users effortlessly, which can be achieved by providing clear directions or prompts:\n\n* Use actionable language: Be precise and direct with your wording, and avoid using jargon.\n* Offer visual cues & feedback: Include well-placed icons, highlighted sections, or animation to support the user's actions and indicate the outcome of those actions.\n\nIn summary, reducing cognitive overhead in your UX design is essential to create an efficient and user-friendly experience. Adopt a simple and clean design, establish a clear hierarchy, and provide helpful instructions to ensure more favorable conscious evaluations from your users.", "description": "Cognitive overhead refers to the mental effort needed to understand or operate a given system, tool, or interface. In UX design, it is crucial to minimize cognitive overhead to create user-friendly and efficient experiences. The less mental effort a user needs to invest, the more likely they will have a positive conscious evaluation of your design.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Cognitive Overload",
"url": "https://blog.logrocket.com/ux-design/cognitive-overload/",
"type": "article"
},
{
"title": "Reducing Cognitive Overload",
"url": "https://uxdesign.cc/reducing-cognitive-overload-designing-for-human-cognition-350f07cff9c4",
"type": "article"
}
]
}, },
"8wxlu4KA2iu9CJa1UAUll": { "8wxlu4KA2iu9CJa1UAUll": {
"title": "Avoid Choice Overload", "title": "Avoid Choice Overload",
"description": "Choice overload is a phenomenon that occurs when users are presented with too many options, causing decision paralysis, anxiety, and ultimately, dissatisfaction with their final choice. As a UX designer, it's essential to ensure that users can easily make decisions within your designs, so it's important to avoid choice overload. In this section, we'll discuss some strategies for managing the number of options and streamlining decision-making processes for users.\n\nLimit the Number of Options\n---------------------------\n\nResearch has shown that a user's ability to make decisions decreases as the number of options increases. To avoid overwhelming users, aim to present no more than 5-7 options at a time. This can be applied to menus, product listings, or any other area where users are asked to make a selection. Remember to prioritize the most important or commonly used options and make them more prominent within the design.\n\nCategorize and Organize Options\n-------------------------------\n\nWhen users are presented with multiple choices, it's crucial to make it easy for them to understand and differentiate between the available options. By categorizing and organizing options into logical groups, users can more quickly find the information or functionality they need. Consider using headings, icons, or other visual cues to assist in organizing content effectively.\n\nImplement Smart Defaults\n------------------------\n\nTo help users make decisions quicker, consider setting default selections for certain choices. By pre-selecting the most commonly used or recommended option, users can easily accept the default if it aligns with their needs, or quickly change it if necessary. This not only saves time and effort for the user, but it can also guide them towards an optimal outcome based on their needs.\n\nAdvanced Filtering and Sorting Options\n--------------------------------------\n\nIf your design requires users to make complex decisions, such as choosing a product from an extensive catalog, consider implementing advanced filtering and sorting options. By giving users the ability to refine their options based on specific attributes, they can more easily identify the best option for their needs. Make sure these filtering options are easy to understand and use, and provide clear feedback on the number of results remaining as users adjust their filters.\n\nBy being mindful of choice overload and implementing these strategies, you can create a more enjoyable and user-friendly experience for your users. Remember, the goal is to make their decision-making process as seamless and stress-free as possible.", "description": "Choice overload occurs when users face too many options, leading to decision paralysis, anxiety, and dissatisfaction. As a UX designer, it's important to simplify decision-making by limiting the number of options to 5-7 at a time, prioritizing the most relevant choices. Organizing options into logical categories with visual cues can help users navigate their selections more easily. Implementing smart defaults can streamline decisions by pre-selecting commonly used options, while advanced filtering and sorting features allow users to refine their choices in complex scenarios. By addressing choice overload with these strategies, you can enhance user experience and facilitate a more seamless decision-making process.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Choice of Overload",
"url": "https://medium.com/@evamiller091/the-impact-of-choice-overload-in-ux-f5defb6cee5d",
"type": "article"
}
]
}, },
"iQNvKhwhvbis4Yn1ZxQua": { "iQNvKhwhvbis4Yn1ZxQua": {
"title": "Avoid Direct Payments", "title": "Avoid Direct Payments",
"description": "Avoiding direct payments is a crucial aspect of UX design that can lead to favorable conscious evaluations from users. Direct payments refer to instances where users are required to pay for your product or service upfront, which can create a negative perception and less willingness to engage. By finding alternative ways to monetize or offer premium features, you can create an enjoyable experience and encourage users to appreciate and invest in your offerings without feeling forced.\n\nWhy it Matters?\n---------------\n\n* **Trust-Building**: When users are not asked to pay upfront or have no hidden costs, they are more likely to trust your product or service, increasing the likelihood of loyal customers.\n* **Accessibility**: Making your offerings available without direct payments ensures a larger and more diverse audience can experience the value your product provides, which can lead to increased traffic and eventual conversions.\n* **Reduced churn**: Users who do not feel \"locked-in\" by having to pay upfront are less likely to abandon your product or service in search of alternative solutions.\n\nStrategies to Avoid Direct Payments\n-----------------------------------\n\n* **Offer a free trial**: Provide users with a limited-time free trial of your product or service to showcase its value and encourage them to invest once the trial is over.\n* **Freemium model**: Allow users to access basic features of your product for free, while offering premium features at a cost. This model lets users experience your offerings without having to pay upfront and gives them the option to upgrade if they find value in it.\n* **In-app purchases**: Incorporate in-app purchases within your product, which enables users to access premium features and benefits without being forced to pay upfront.\n* **Subscriptions**: Offer subscriptions as an alternative payment method that allows users to access premium features and receive updates frequently, creating a sense of loyalty and commitment.\n* **Pay-as-you-go or usage-based pricing**: Implement a flexible pricing model where users only pay for what they use or when they use a specific feature, removing the barrier of direct payments and increasing user satisfaction.\n\nBy avoiding direct payments and implementing these strategies, a UX designer can create a user experience that fosters trust, accessibility, and user engagement. By doing so, you increase the likelihood of gaining favorable conscious evaluations of your product, ultimately leading to long-term success.", "description": "Avoiding direct payments is a crucial aspect of UX design that can lead to favorable conscious evaluations from users. Direct payments refer to instances where users are required to pay for your product or service upfront, which can create a negative perception and less willingness to engage. By finding alternative ways to monetize or offer premium features, you can create an enjoyable experience and encourage users to appreciate and invest in your offerings without feeling forced.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Payment UX Best Practices",
"url": "https://gocardless.com/guides/posts/payment-ux-best-practices/",
"type": "article"
}
]
}, },
"S9rJr8pc-Ln8BxG0suBWa": { "S9rJr8pc-Ln8BxG0suBWa": {
"title": "Frame Text to Avoid Temporal Myopia", "title": "Frame Text to Avoid Temporal Myopia",

@ -17,8 +17,13 @@
}, },
"y9ToYDix-koRbR6FLydFw": { "y9ToYDix-koRbR6FLydFw": {
"title": "create-vue", "title": "create-vue",
"description": "[create-vue](https://github.com/vuejs/create-vue) is a CLI tool that helps you create a new Vue project with a single command. It is a simple and easy-to-use tool that saves you time and effort when setting up a new Vue project.\n\nLearn more using the following resources:", "description": "create-vue is a CLI tool that helps you create a new Vue project with a single command. It is a simple and easy-to-use tool that saves you time and effort when setting up a new Vue project.\n\nLearn more using the following resources:",
"links": [ "links": [
{
"title": "vuejs/create-vue",
"url": "https://github.com/vuejs/create-vue",
"type": "opensource"
},
{ {
"title": "Creating a Vue Project", "title": "Creating a Vue Project",
"url": "https://cli.vuejs.org/guide/creating-a-project.html", "url": "https://cli.vuejs.org/guide/creating-a-project.html",
@ -120,12 +125,17 @@
}, },
"CGdw3PqLRb9OqFU5SqmE1": { "CGdw3PqLRb9OqFU5SqmE1": {
"title": "Directives", "title": "Directives",
"description": "Directives are special attributes with the `v-` prefix. Vue provides a number of [built-in directives](https://vuejs.org/api/built-in-directives.html).\n\nVisit the following resources to learn more:", "description": "Directives are special attributes with the `v-` prefix. Vue provides a number of built-in directives.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Directives Documentation", "title": "Directives Documentation",
"url": "https://vuejs.org/guide/essentials/template-syntax.html#directives", "url": "https://vuejs.org/guide/essentials/template-syntax.html#directives",
"type": "article" "type": "article"
},
{
"title": "Built-in Directives",
"url": "https://vuejs.org/api/built-in-directives.html",
"type": "article"
} }
] ]
}, },
@ -142,7 +152,7 @@
}, },
"PPUU3Rb73aCpT4zcyvlJE": { "PPUU3Rb73aCpT4zcyvlJE": {
"title": "Options API", "title": "Options API",
"description": "We use Options API in a Vue application to write and define different components. With this API, we can use options such as data, methods, and mounted.\n\nTo state it simply, Options API is an old way to structure a Vue.JS application. Due to some limitations in this API, Composition API was introduced in Vue 3.\n\nVisit the following resources to learn more:", "description": "We use Options API in a Vue application to write and define different components. With this API, we can use options such as data, methods, and mounted. To state it simply, Options API is an old way to structure a Vue.JS application. Due to some limitations in this API, Composition API was introduced in Vue 3.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "TypeScript with Options API", "title": "TypeScript with Options API",
@ -192,14 +202,9 @@
"description": "Every application instance exposes a `config` object that contains the configuration settings for that application. You can modify its properties before mounting your application.\n\nVisit the following resources to learn more:", "description": "Every application instance exposes a `config` object that contains the configuration settings for that application. You can modify its properties before mounting your application.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Documentation", "title": "Vue.js Documentation",
"url": "https://vuejs.org/api/application.html#app-config", "url": "https://vuejs.org/api/application.html#app-config",
"type": "article" "type": "article"
},
{
"title": "official API Documentation",
"url": "https://vuejs.org/api/application.html",
"type": "article"
} }
] ]
}, },
@ -216,13 +221,25 @@
}, },
"1oIt_5OK-t2WaCgaYt9A8": { "1oIt_5OK-t2WaCgaYt9A8": {
"title": "Error / Warn Handler", "title": "Error / Warn Handler",
"description": "", "description": "Debugging in Vue.js involves identifying and fixing issues in your Vue applications. It’s an essential part of the development process, and there are several tools and techniques you can use to effectively debug your Vue code.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Debugging Documentation",
"url": "https://vuejs.org/v2/cookbook/debugging-in-vscode.html",
"type": "article"
}
]
}, },
"gihxGgt177BK_EYsAfpx9": { "gihxGgt177BK_EYsAfpx9": {
"title": "Global Properties", "title": "Global Properties",
"description": "", "description": "Global properties allows you to add properties or methods that can be accessed throughout your application. This is particularly useful for sharing functionality or data across components without the need to pass props explicitly.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Vue.js Global Properties",
"url": "https://blog.logrocket.com/vue-js-globalproperties/",
"type": "article"
}
]
}, },
"f7N4pAp_jBlT8_8owAcbG": { "f7N4pAp_jBlT8_8owAcbG": {
"title": "Performance", "title": "Performance",
@ -242,10 +259,10 @@
}, },
"NCIzs3jbQTv1xXhAaGfZN": { "NCIzs3jbQTv1xXhAaGfZN": {
"title": "v-text", "title": "v-text",
"description": "The `v-text` directive is used to set the textContent property of an element. It's important to note that when using this directive it will overwrite the HTML content inside the element. The expected input is a string, so it's important to wrap any text in single quotes.\n\nExample:\n\n <template>\n <p v-text=\"'I am some text'\"></p>\n </template>\n \n\nVisit the following resources to learn more:", "description": "The `v-text` directive is used to set the textContent property of an element. It's important to note that when using this directive it will overwrite the HTML content inside the element. The expected input is a string, so it's important to wrap any text in single quotes.\n\nExample\n-------\n\n <template>\n <p v-text=\"'I am some text'\"></p>\n </template>\n \n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-text documentation", "title": "v-text Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-text", "url": "https://vuejs.org/api/built-in-directives.html#v-text",
"type": "article" "type": "article"
} }
@ -253,10 +270,10 @@
}, },
"bZxtIBeIfeUcR32LZWrPW": { "bZxtIBeIfeUcR32LZWrPW": {
"title": "v-html", "title": "v-html",
"description": "The `v-html` directive is similar to the `v-text` directive, but the difference is that `v-html` renders its content as HTML. This means that if you pass an HTML element it will be rendered as an element and not plain text. Since the content is render as HTML, it can pose a security risk if the content contains malicius JavaScript code. For this reason you should never use this directive in combination with user input, unless the input is first properly sanitized.\n\nExample:\n\n <template>\n <p v-html=\"'<h1>Text</h1>'\"></p>\n </template>\n \n\nVisit the following resources to learn more:", "description": "The `v-html` directive is similar to the `v-text` directive, but the difference is that `v-html` renders its content as HTML. This means that if you pass an HTML element it will be rendered as an element and not plain text. Since the content is render as HTML, it can pose a security risk if the content contains malicious JavaScript code. For this reason you should never use this directive in combination with user input, unless the input is first properly sanitized.\n\nExample\n-------\n\n <template>\n <p v-html=\"'<h1>Text</h1>'\"></p>\n </template>\n \n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-html documentation", "title": "v-html Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-html", "url": "https://vuejs.org/api/built-in-directives.html#v-html",
"type": "article" "type": "article"
} }
@ -264,10 +281,10 @@
}, },
"_TlbGTKFCMO0wdLbC6xHX": { "_TlbGTKFCMO0wdLbC6xHX": {
"title": "v-show", "title": "v-show",
"description": "`v-show` is similar to `v-if` in that it allows you to conditionally render components. However, it does not remove the component from the DOM and merely toggles its `display` CSS property to be `hidden`. It also does not work with `v-else-if` oe `v-else`.\n\nPrefer `v-show` over `v-if` if the component's visibility needs to change often, and `v-if` if not.\n\nVisit the following resources to learn more:", "description": "`v-show` is similar to `v-if` in that it allows you to conditionally render components. However, it does not remove the component from the DOM and merely toggles its `display` CSS property to be `hidden`. It also does not work with `v-else-if` oe `v-else`. Prefer `v-show` over `v-if` if the component's visibility needs to change often, and `v-if` if not.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Vue Conditional Rendering Docs", "title": "Vue Conditional Rendering",
"url": "https://vuejs.org/guide/essentials/conditional.html#v-show", "url": "https://vuejs.org/guide/essentials/conditional.html#v-show",
"type": "article" "type": "article"
} }
@ -275,7 +292,7 @@
}, },
"xHj3W9Ig3MVuVlGyXchaP": { "xHj3W9Ig3MVuVlGyXchaP": {
"title": "v-if", "title": "v-if",
"description": "Conditionally render an element or a template fragment based on the truthy-ness of the expression value.\n\nWhen a `v-if` element is toggled, the element and its contained directives / components are destroyed and re-constructed. If the initial condition is falsy, then the inner content won't be rendered at all.\n\nVisit the following resources to learn more:", "description": "Conditionally render an element or a template fragment based on the truthy-ness of the expression value. When a `v-if` element is toggled, the element and its contained directives / components are destroyed and re-constructed. If the initial condition is falsy, then the inner content won't be rendered at all.\n\nExample\n-------\n\n <h1 v-if=\"awesome\">Vue is awesome!</h1>\n \n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-if Documentation", "title": "v-if Documentation",
@ -289,7 +306,7 @@
"description": "The `v-else` conditionally renders an element or a template fragment as a function in case the `v-if` does not fulfil the condition.\n\nVisit the following resources for more information:", "description": "The `v-else` conditionally renders an element or a template fragment as a function in case the `v-if` does not fulfil the condition.\n\nVisit the following resources for more information:",
"links": [ "links": [
{ {
"title": "v-else documentation", "title": "v-else Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-else", "url": "https://vuejs.org/api/built-in-directives.html#v-else",
"type": "article" "type": "article"
} }
@ -308,10 +325,10 @@
}, },
"3ftwRjQ9e1-qDT9BV53zr": { "3ftwRjQ9e1-qDT9BV53zr": {
"title": "v-for", "title": "v-for",
"description": "The `v-for` directive is used to render an HTML element, a block of elements, or even a component based on an array, an object, or a set number of times. When using this directive it is important to assign a unique key to each item to avoid issues and improve perfomance. This directive follows the `item in items` syntax.\n\nExample:\n\n <script setup>\n import { ref } from 'vue';\n const foods = ref([\n {id: 1, name: \"apple\"},\n {id: 2, name: \"pear\"},\n {id: 3, name: \"pizza\"}\n ]);\n </script>\n \n <template>\n <p v-for=\"food in foods\" :key=\"food.id\">{{ food.name }}</p>\n </template>\n \n\nVisit the following resources to learn more:", "description": "The `v-for` directive is used to render an HTML element, a block of elements, or even a component based on an array, an object, or a set number of times. When using this directive it is important to assign a unique key to each item to avoid issues and improve performance. This directive follows the `item in items` syntax.\n\nExample\n-------\n\n <script setup>\n import { ref } from 'vue';\n const foods = ref([\n {id: 1, name: \"apple\"},\n {id: 2, name: \"pear\"},\n {id: 3, name: \"pizza\"}\n ]);\n </script>\n \n <template>\n <p v-for=\"food in foods\" :key=\"food.id\">{{ food.name }}</p>\n </template>\n \n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-for documentation", "title": "v-for Documentation",
"url": "https://vuejs.org/guide/essentials/list#v-for", "url": "https://vuejs.org/guide/essentials/list#v-for",
"type": "article" "type": "article"
} }
@ -319,15 +336,21 @@
}, },
"hVuRmhXVP65IPtuHTORjJ": { "hVuRmhXVP65IPtuHTORjJ": {
"title": "v-on", "title": "v-on",
"description": "", "description": "The v-on directive is placed on an element to attach an event listener. To attach an event listener with v-on we need to provide the event type, and any modifier, and a method or expression that should run when that event occurs.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "v-on Directive",
"url": "https://www.w3schools.com/vue/ref_v-on.php",
"type": "article"
}
]
}, },
"cuM9q9vYy8JpZPGeBffd1": { "cuM9q9vYy8JpZPGeBffd1": {
"title": "v-bind", "title": "v-bind",
"description": "The `v-bind` directive dynamically binds an HTML attribute to data.\n\nThe shorthand for this directive is `:`\n\nExample:\n\n <script setup>\n import { ref } from 'vue';\n const image_url = ref(\"path/to/image.png\")\n </script>\n \n <template>\n <img :src=\"image_url\" />\n </template>\n \n\nVisit the following resources for more information:", "description": "The `v-bind` directive dynamically binds an HTML attribute to data. The shorthand for this directive is `:`\n\nExample\n-------\n\n <script setup>\n import { ref } from 'vue';\n const image_url = ref(\"path/to/image.png\")\n </script>\n \n <template>\n <img :src=\"image_url\" />\n </template>\n \n\nVisit the following resources for more information:",
"links": [ "links": [
{ {
"title": "v-bind documentation", "title": "v-bind Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-bind", "url": "https://vuejs.org/api/built-in-directives.html#v-bind",
"type": "article" "type": "article"
} }
@ -357,10 +380,10 @@
}, },
"5k9CrbzhNy9iiS6ez2UE6": { "5k9CrbzhNy9iiS6ez2UE6": {
"title": "v-once", "title": "v-once",
"description": "The `v-once` directive makes an HTML element render only once, skipping every future update.\n\nExample:\n\n <script setup>\n import { ref } from 'vue';\n const input = ref(\"Some Text\");\n </script>\n \n <template>\n <input v-model=\"input\">\n <p v-once>{{ input }}</p>\n </template>\n \n\nIn this example the **p** element will not change its text even if the input variable is changed through the **input** element.\n\nVisit the following resources to learn more:", "description": "The `v-once` directive makes an HTML element render only once, skipping every future update.\n\nExample\n-------\n\n <script setup>\n import { ref } from 'vue';\n const input = ref(\"Some Text\");\n </script>\n \n <template>\n <input v-model=\"input\">\n <p v-once>{{ input }}</p>\n </template>\n \n\nIn this example the **p** element will not change its text even if the input variable is changed through the **input** element.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-once documentation", "title": "v-once Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-once", "url": "https://vuejs.org/api/built-in-directives.html#v-once",
"type": "article" "type": "article"
} }
@ -368,7 +391,7 @@
}, },
"mlsrhioiEkqnRIL6O3hNa": { "mlsrhioiEkqnRIL6O3hNa": {
"title": "v-pre", "title": "v-pre",
"description": "The `v-pre` directive makes an element render its content as-is, skipping its compilation. The most common use case is when displaying raw mustache syntax.\n\nExample:\n\n <script setup>\n import { ref } from 'vue';\n const text = ref(\"Some Text\")\n </script>\n \n <template>\n <p v-pre >{{ text }}</p>\n </template>\n \n\nThe **p** element will display: `{{ text }}` and not `Some Text` because the compilation is skipped.\n\nVisit the following resources to learn more:", "description": "The `v-pre` directive makes an element render its content as-is, skipping its compilation. The most common use case is when displaying raw mustache syntax.\n\nExample\n-------\n\n <script setup>\n import { ref } from 'vue';\n const text = ref(\"Some Text\")\n </script>\n \n <template>\n <p v-pre >{{ text }}</p>\n </template>\n \n\nThe **p** element will display: `{{ text }}` and not `Some Text` because the compilation is skipped.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-pre Documentation", "title": "v-pre Documentation",
@ -379,10 +402,10 @@
}, },
"RrSekP8Ub01coegMwLP6a": { "RrSekP8Ub01coegMwLP6a": {
"title": "v-cloak", "title": "v-cloak",
"description": "The v-cloak directive is used to prevent the uncompiled Vue template from being visible while the Vue instance is still loading. It temporarily hides the content until Vue has finished compiling the template\n\nThe v-cloak directive remains until the component instance is mounted.\n\n <div v-cloak>\n {{ message }}\n </div>\n \n\nCombined with CSS, you can hide elements with v-cloak until they are ready.\n\n [v-cloak] {\n display: none;\n }\n \n\nThe `<div>` will not be visible until the compilation is done.\n\nVisit the following resources to learn more:", "description": "The v-cloak directive is used to prevent the uncompiled Vue template from being visible while the Vue instance is still loading. It temporarily hides the content until Vue has finished compiling the template. The v-cloak directive remains until the component instance is mounted.\n\n <div v-cloak>\n {{ message }}\n </div>\n \n\nCombined with CSS, you can hide elements with v-cloak until they are ready.\n\n [v-cloak] {\n display: none;\n }\n \n\nThe `<div>` will not be visible until the compilation is done.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "v-cloak documentation", "title": "v-cloak Documentation",
"url": "https://vuejs.org/api/built-in-directives.html#v-cloak", "url": "https://vuejs.org/api/built-in-directives.html#v-cloak",
"type": "article" "type": "article"
} }
@ -393,7 +416,7 @@
"description": "Optimizing rendering is crucial for ensuring a smooth and efficient user experience across all your frontend projects. Sluggish webpages can lead to frustration for users, and potentially cause them to entirely abandon your web application. This issue comes up most often in single-page applications (SPAs), where the entirety of your application is loaded within a single webpage, and updates to it are handled dynamically without needing a full reload of the webpage.\n\nLearn more from the following resources:", "description": "Optimizing rendering is crucial for ensuring a smooth and efficient user experience across all your frontend projects. Sluggish webpages can lead to frustration for users, and potentially cause them to entirely abandon your web application. This issue comes up most often in single-page applications (SPAs), where the entirety of your application is loaded within a single webpage, and updates to it are handled dynamically without needing a full reload of the webpage.\n\nLearn more from the following resources:",
"links": [ "links": [
{ {
"title": "Optimizing rendering in Vue", "title": "Optimizing Rendering in Vue",
"url": "https://blog.logrocket.com/optimizing-rendering-vue/", "url": "https://blog.logrocket.com/optimizing-rendering-vue/",
"type": "article" "type": "article"
} }
@ -401,8 +424,14 @@
}, },
"dxwKfBxd5KYVkfEPMdHp-": { "dxwKfBxd5KYVkfEPMdHp-": {
"title": "Debugging", "title": "Debugging",
"description": "", "description": "Debugging in Vue.js involves identifying and fixing issues in your Vue applications. It’s an essential part of the development process, and there are several tools and techniques you can use to effectively debug your Vue code.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Debugging Documentation",
"url": "https://vuejs.org/v2/cookbook/debugging-in-vscode.html",
"type": "article"
}
]
}, },
"WiGG9_4G5y-AVA9byw6_g": { "WiGG9_4G5y-AVA9byw6_g": {
"title": "Lifecycle Hooks", "title": "Lifecycle Hooks",
@ -448,12 +477,18 @@
}, },
"NfB3HlZ3uwYK5xszvV50b": { "NfB3HlZ3uwYK5xszvV50b": {
"title": "Input Bindings", "title": "Input Bindings",
"description": "", "description": "Input bindings are a way to bind user input to a component's data. This allows the component to react to user input and update its state accordingly. Input bindings are typically used with form elements such as text inputs, checkboxes, and select dropdowns.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Input Bindings",
"url": "https://vuejs.org/guide/essentials/forms",
"type": "article"
}
]
}, },
"gMFndBcrTC6FtGryqN6dX": { "gMFndBcrTC6FtGryqN6dX": {
"title": "v-model", "title": "v-model",
"description": "The v-model directive in Vue.js is used for creating two-way data bindings on form input elements, such as , , and . This means that the data can be updated in the component when the user inputs something, and the UI will update if the data in the component changes.", "description": "The v-model directive in Vue.js is used for creating two-way data bindings on form input elements, such as `<input>`, `<textarea>`, and `<select>`. This means that the data can be updated in the component when the user inputs something, and the UI will update if the data in the component changes.",
"links": [ "links": [
{ {
"title": "Form Input Bindings", "title": "Form Input Bindings",
@ -464,8 +499,14 @@
}, },
"dSfrFLr8wKkLAOMJwtCTr": { "dSfrFLr8wKkLAOMJwtCTr": {
"title": "Modifiers", "title": "Modifiers",
"description": "", "description": "Modifiers are special suffixes that can be added to directives (such as v-model and v-bind) to alter their behavior. Modifiers allow you to specify additional functionality or constraints to the binding, making it more flexible and powerful.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Modifiers",
"url": "https://v2.vuejs.org/v2/guide/components-custom-events.html",
"type": "article"
}
]
}, },
"4p6Gh2fMPA8hls_mWa5HR": { "4p6Gh2fMPA8hls_mWa5HR": {
"title": "Event Handling", "title": "Event Handling",
@ -480,28 +521,63 @@
}, },
"b7iXwtUnELg_ShbCyTrNA": { "b7iXwtUnELg_ShbCyTrNA": {
"title": "Binding Events", "title": "Binding Events",
"description": "", "description": "Vue.js is an open-source Model–View–ViewModel front-end JavaScript framework for building user interfaces and single-page applications. Vue.js has many own directives for DOM manipulation such as v-bind, v-on, v-model, etc. Binding events is an essential part of creating interactive applications. You can bind events using the v-on directive or its shorthand, the @ symbol.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Binding Events",
"url": "https://vuejs.org/guide/essentials/event-handling",
"type": "article"
},
{
"title": "Vue.js Event Handling",
"url": "https://www.geeksforgeeks.org/vue-js-event-handling/",
"type": "article"
}
]
}, },
"gVahaZNPktQuqdukFEbQH": { "gVahaZNPktQuqdukFEbQH": {
"title": "Inline / Method Handlers", "title": "Inline / Method Handlers",
"description": "", "description": "In Vue.js, **inline handlers** are defined directly in the template using expressions, making them suitable for simple tasks. For example, you might use an inline handler to increment a counter. **Method handlers**, on the other hand, are defined in the `methods` option and are better for more complex logic or when reusing functionality across multiple components. They improve code readability and maintainability.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Method Handlers",
"url": "https://v1.vuejs.org/guide/events.html",
"type": "article"
}
]
}, },
"Aaf7eA-5sbAD5Cs1MbdTQ": { "Aaf7eA-5sbAD5Cs1MbdTQ": {
"title": "Event Modifiers", "title": "Event Modifiers",
"description": "", "description": "In Vue.js, event modifiers are special postfixes that you can add to event handlers to control the behavior of events more easily. They help simplify common tasks such as stopping propagation, preventing default actions, and ensuring that the event is triggered only under certain conditions.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Event Modifiers in Vue.js",
"url": "https://www.freecodecamp.org/news/how-event-handling-works-in-vue-3-guide-for-devs/",
"type": "article"
}
]
}, },
"BXw36wqhmi3gExXwFCIBd": { "BXw36wqhmi3gExXwFCIBd": {
"title": "Key Modifiers", "title": "Key Modifiers",
"description": "", "description": "Input bindings are a way to bind user input to a component's data. This allows the component to react to user input and update its state accordingly. Input bindings are typically used with form elements such as text inputs, checkboxes, and select dropdowns.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Input Bindings",
"url": "https://vuejs.org/guide/essentials/forms",
"type": "article"
}
]
}, },
"x0wl2Qz2LTP4Q2tThKAt3": { "x0wl2Qz2LTP4Q2tThKAt3": {
"title": "Mouse Button Modifiers", "title": "Mouse Button Modifiers",
"description": "", "description": "Mouse button modifiers are a type of modifier that can be used with event handlers to specify which mouse button or buttons should trigger the event. These modifiers allow you to customize the behavior of event handlers, such as v-on:click, to respond to specific mouse button clicks.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Button Modifiers",
"url": "https://medium.com/evolve-you/vue-3-keyboard-and-mouse-a4866d7d0e8",
"type": "article"
}
]
}, },
"Bx1Atxcf15AEaA1BiSIc6": { "Bx1Atxcf15AEaA1BiSIc6": {
"title": "Computed Properties", "title": "Computed Properties",
@ -549,12 +625,22 @@
}, },
"br1r8KIf5KInY5mk2xhA6": { "br1r8KIf5KInY5mk2xhA6": {
"title": "Custom Directives", "title": "Custom Directives",
"description": "So far you may have covered two forms of code reuse in Vue: [components](https://vuejs.org/guide/essentials/component-basics.html) and [composables](https://vuejs.org/guide/reusability/composables.html). Components are the main building blocks, while composables are focused on reusing stateful logic. Custom directives, on the other hand, are mainly intended for reusing logic that involves low-level DOM access on plain elements.\n\nVisit the following resources to learn more:", "description": "So far you may have covered two forms of code reuse in Vue: components and composables. Components are the main building blocks, while composables are focused on reusing stateful logic. Custom directives, on the other hand, are mainly intended for reusing logic that involves low-level DOM access on plain elements.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Custom Directives", "title": "Custom Directives",
"url": "https://vuejs.org/guide/reusability/custom-directives.html", "url": "https://vuejs.org/guide/reusability/custom-directives.html",
"type": "article" "type": "article"
},
{
"title": "Composables",
"url": "https://vuejs.org/guide/reusability/composables.html",
"type": "article"
},
{
"title": "Components",
"url": "https://vuejs.org/guide/essentials/component-basics.html",
"type": "article"
} }
] ]
}, },
@ -576,7 +662,7 @@
}, },
"kdlXhbw_a81xdZtyK-pVa": { "kdlXhbw_a81xdZtyK-pVa": {
"title": "Watchers", "title": "Watchers",
"description": "Computed properties allow us to declaratively compute derived values. However, there are cases where we need to perform \"side effects\" in reaction to state changes - for example, mutating the DOM, or changing another piece of state based on the result of an async operation.\n\nWith Composition API, we can use the watch function to trigger a callback whenever a piece of reactive state changes.\n\nVisit the following resources to learn more:", "description": "Computed properties allow us to declaratively compute derived values. However, there are cases where we need to perform \"side effects\" in reaction to state changes - for example, mutating the DOM, or changing another piece of state based on the result of an async operation. With Composition API, we can use the watch function to trigger a callback whenever a piece of reactive state changes.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Watchers in Vue.js", "title": "Watchers in Vue.js",
@ -623,7 +709,7 @@
"description": "VueUse is a collection of utility functions based on Composition API. It has over 200+ functions, is tree-shakable, has first-class TypeScript support, and has a small bundle size. VueUse is a great choice for adding common utilities to your Vue 3 projects.\n\nVisit the following resources to learn more:", "description": "VueUse is a collection of utility functions based on Composition API. It has over 200+ functions, is tree-shakable, has first-class TypeScript support, and has a small bundle size. VueUse is a great choice for adding common utilities to your Vue 3 projects.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website - VueUse", "title": "VueUse",
"url": "https://vueuse.org/", "url": "https://vueuse.org/",
"type": "article" "type": "article"
} }
@ -631,15 +717,26 @@
}, },
"ixRG0xfEp4BmyvCR0mtoR": { "ixRG0xfEp4BmyvCR0mtoR": {
"title": "Routing", "title": "Routing",
"description": "Routing is an essential concept in Single Page Applications (SPA). When your application is divided into separated logical sections, and all of them are under their own URL, your users can easily share links among each other.", "description": "Routing is an essential concept in Single Page Applications (SPA). When your application is divided into separated logical sections, and all of them are under their own URL, your users can easily share links among each other.\n\nVisit the following resources to learn more:",
"links": [] "links": [
{
"title": "Routing in Vue.js",
"url": "https://vuejs.org/guide/scaling-up/routing.html",
"type": "article"
},
{
"title": "The Vue Router",
"url": "https://router.vuejs.org/",
"type": "article"
}
]
}, },
"COxkmvqe9jFtV9WtGjfbh": { "COxkmvqe9jFtV9WtGjfbh": {
"title": "Vue Router", "title": "Vue Router",
"description": "Vue Router is the official router for Vue.js which allows creating static/dynamic routes, has support for navigation interception, allows for component based configuration and much more.\n\nVisit the following resources to learn more:", "description": "Vue Router is the official router for Vue.js which allows creating static/dynamic routes, has support for navigation interception, allows for component based configuration and much more.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Vue Router", "title": "The Vue Router",
"url": "https://router.vuejs.org/", "url": "https://router.vuejs.org/",
"type": "article" "type": "article"
}, },
@ -692,7 +789,7 @@
"type": "opensource" "type": "opensource"
}, },
{ {
"title": "Official Website: Vee Validate", "title": "Vee Website: Vee Validate",
"url": "https://vee-validate.logaretm.com/v4/", "url": "https://vee-validate.logaretm.com/v4/",
"type": "article" "type": "article"
} }
@ -708,7 +805,7 @@
"type": "opensource" "type": "opensource"
}, },
{ {
"title": "Official Website: Vuelidate", "title": "Vuelidate Website",
"url": "https://vuelidate.js.org/", "url": "https://vuelidate.js.org/",
"type": "article" "type": "article"
} }
@ -719,7 +816,7 @@
"description": "Server-side rendering refers to the process that the service side completes the HTML structure splicing of the page, sends it to the browser, and then binds the status and events for it to become a fully interactive page.\n\nVisit the following resources to learn more:", "description": "Server-side rendering refers to the process that the service side completes the HTML structure splicing of the page, sends it to the browser, and then binds the status and events for it to become a fully interactive page.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "what is server side rendering", "title": "What is Server Side Rendering (SSR)?",
"url": "https://www.educative.io/answers/what-is-server-side-rendering", "url": "https://www.educative.io/answers/what-is-server-side-rendering",
"type": "article" "type": "article"
}, },
@ -739,12 +836,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "what is server side rendering?", "title": "What is Server Side Rendering (SSR) for Web Development?",
"url": "https://www.youtube.com/watch?v=GQzn7XRdzxY",
"type": "video"
},
{
"title": "What is server-side rendering for web development?",
"url": "https://www.youtube.com/watch?v=okvg3MRAPs0", "url": "https://www.youtube.com/watch?v=okvg3MRAPs0",
"type": "video" "type": "video"
} }
@ -755,7 +847,7 @@
"description": "A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers.\n\nVisit the following resources to learn more:", "description": "A static site generator is a tool that generates a full static HTML website based on raw data and a set of templates. Essentially, a static site generator automates the task of coding individual HTML pages and gets those pages ready to serve to users ahead of time. Because these HTML pages are pre-built, they can load very quickly in users' browsers.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "What is a static site generator?", "title": "What is a Static Site Generator?",
"url": "https://www.cloudflare.com/learning/performance/static-site-generator/", "url": "https://www.cloudflare.com/learning/performance/static-site-generator/",
"type": "article" "type": "article"
}, },
@ -786,7 +878,7 @@
"description": "Quasar Framework is an open-source Vue.js based framework for building apps, with a single codebase, and deploy it on the Web as a SPA, PWA, SSR, to a Mobile App, using Cordova for iOS & Android, and to a Desktop App, using Electron for Mac, Windows, and Linux.\n\nVisit the following resources to learn more:", "description": "Quasar Framework is an open-source Vue.js based framework for building apps, with a single codebase, and deploy it on the Web as a SPA, PWA, SSR, to a Mobile App, using Cordova for iOS & Android, and to a Desktop App, using Electron for Mac, Windows, and Linux.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website: Quasar", "title": "Quasar",
"url": "https://quasar.dev/", "url": "https://quasar.dev/",
"type": "article" "type": "article"
}, },
@ -816,6 +908,11 @@
"url": "https://nuxt.com/docs/getting-started/introduction", "url": "https://nuxt.com/docs/getting-started/introduction",
"type": "article" "type": "article"
}, },
{
"title": "Nuxt Examples",
"url": "https://nuxt.com/docs/examples/essentials/hello-world",
"type": "article"
},
{ {
"title": "Get Started with Nuxt", "title": "Get Started with Nuxt",
"url": "https://explorers.netlify.com/learn/get-started-with-nuxt", "url": "https://explorers.netlify.com/learn/get-started-with-nuxt",
@ -826,11 +923,6 @@
"url": "https://vueschool.io/courses/nuxtjs-fundamentals", "url": "https://vueschool.io/courses/nuxtjs-fundamentals",
"type": "article" "type": "article"
}, },
{
"title": "Nuxt Examples",
"url": "https://nuxt.com/docs/examples/essentials/hello-world",
"type": "article"
},
{ {
"title": "Explore top posts about JavaScript", "title": "Explore top posts about JavaScript",
"url": "https://app.daily.dev/tags/javascript?ref=roadmapsh", "url": "https://app.daily.dev/tags/javascript?ref=roadmapsh",
@ -843,7 +935,7 @@
"description": "Vitepress is a static site generator that is built on top of Vite. It is a lightweight and fast static site generator that is designed to work with Vue 3. Vitepress is a great choice for building documentation sites, blogs, and other static sites.\n\nVisit the following resources to learn more:", "description": "Vitepress is a static site generator that is built on top of Vite. It is a lightweight and fast static site generator that is designed to work with Vue 3. Vitepress is a great choice for building documentation sites, blogs, and other static sites.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website", "title": "Vitepress Website",
"url": "https://vitepress.dev/", "url": "https://vitepress.dev/",
"type": "article" "type": "article"
} }
@ -851,7 +943,7 @@
}, },
"LjEAviRMtPLwUUlfcof1h": { "LjEAviRMtPLwUUlfcof1h": {
"title": "Vitest", "title": "Vitest",
"description": "Vitest is a fast Vite-native unit test framework with out-of-box ESM and TypeScript support. Works on React, Vue, Svelte and more projects created with Vite\n\nVisit the following resources to learn more:", "description": "Vitest is a fast Vite-native unit test framework with out-of-box ESM and TypeScript support. It Works on React, Vue, Svelte and more projects created with Vite.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Vitest Website", "title": "Vitest Website",
@ -886,12 +978,12 @@
"description": "Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework.\n\nVisit the following resources to learn more:", "description": "Cypress framework is a JavaScript-based end-to-end testing framework built on top of Mocha – a feature-rich JavaScript test framework running on and in the browser, making asynchronous testing simple and convenient. It also uses a BDD/TDD assertion library and a browser to pair with any JavaScript testing framework.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website", "title": "Cypress Website",
"url": "https://www.cypress.io/", "url": "https://www.cypress.io/",
"type": "article" "type": "article"
}, },
{ {
"title": "Official Documentation", "title": "Cypress Documentation",
"url": "https://docs.cypress.io/guides/overview/why-cypress#Other", "url": "https://docs.cypress.io/guides/overview/why-cypress#Other",
"type": "article" "type": "article"
}, },
@ -912,7 +1004,7 @@
"description": "Playwright Test was created specifically to accommodate the needs of end-to-end testing. Playwright supports all modern rendering engines including Chromium, WebKit, and Firefox. Test on Windows, Linux, and macOS, locally or on CI, headless or headed with native mobile emulation of Google Chrome for Android and Mobile Safari.Playwright leverages the DevTools protocol to write powerful, stable automated tests.Playwright can actually see into and control the browser rather than relying on a middle translation layer, it allows for the simulation of more insightful and relevant user scenarios.\n\nVisit the following resources to learn more:", "description": "Playwright Test was created specifically to accommodate the needs of end-to-end testing. Playwright supports all modern rendering engines including Chromium, WebKit, and Firefox. Test on Windows, Linux, and macOS, locally or on CI, headless or headed with native mobile emulation of Google Chrome for Android and Mobile Safari.Playwright leverages the DevTools protocol to write powerful, stable automated tests.Playwright can actually see into and control the browser rather than relying on a middle translation layer, it allows for the simulation of more insightful and relevant user scenarios.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website: Playwright", "title": "Playwright Website",
"url": "https://playwright.dev/", "url": "https://playwright.dev/",
"type": "article" "type": "article"
}, },
@ -964,12 +1056,12 @@
"description": "Vuetify is a Vue UI Library with beautifully handcrafted Material Components. No design skills required — everything you need to create amazing applications is at your fingertips.\n\nVisit the following resources to learn more:", "description": "Vuetify is a Vue UI Library with beautifully handcrafted Material Components. No design skills required — everything you need to create amazing applications is at your fingertips.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website", "title": "Vuetify Website",
"url": "https://vuetifyjs.com/en/", "url": "https://vuetifyjs.com/en/",
"type": "article" "type": "article"
}, },
{ {
"title": "Getting started with Vuetify", "title": "Getting Started with Vuetify",
"url": "https://vuetifyjs.com/en/getting-started/installation/", "url": "https://vuetifyjs.com/en/getting-started/installation/",
"type": "article" "type": "article"
}, },
@ -990,12 +1082,12 @@
"description": "Element UI is another Vue.js component library with several built-in components to style your Vue.js applications.\n\nVisit the following resources to learn more:", "description": "Element UI is another Vue.js component library with several built-in components to style your Vue.js applications.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website", "title": "Element UI Website",
"url": "https://element-plus.org/en-US/", "url": "https://element-plus.org/en-US/",
"type": "article" "type": "article"
}, },
{ {
"title": "Official Getting Started", "title": "Getting Started - Element UI",
"url": "https://element-plus.org/en-US/guide/design.html", "url": "https://element-plus.org/en-US/guide/design.html",
"type": "article" "type": "article"
} }
@ -1005,6 +1097,11 @@
"title": "State Management", "title": "State Management",
"description": "Application state management is the process of maintaining knowledge of an application's inputs across multiple related data flows that form a complete business transaction -- or a session -- to understand the condition of the app at any given moment. In computer science, an input is information put into the program by the user and state refers to the condition of an application according to its stored inputs -- saved as variables or constants. State can also be described as the collection of preserved information that forms a complete session.\n\nVisit the following resources to learn more:", "description": "Application state management is the process of maintaining knowledge of an application's inputs across multiple related data flows that form a complete business transaction -- or a session -- to understand the condition of the app at any given moment. In computer science, an input is information put into the program by the user and state refers to the condition of an application according to its stored inputs -- saved as variables or constants. State can also be described as the collection of preserved information that forms a complete session.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{
"title": "State Management",
"url": "https://vuejs.org/guide/scaling-up/state-management.html",
"type": "article"
},
{ {
"title": "What is State Management?", "title": "What is State Management?",
"url": "https://www.techtarget.com/searchapparchitecture/definition/state-management", "url": "https://www.techtarget.com/searchapparchitecture/definition/state-management",
@ -1017,7 +1114,7 @@
"description": "Pinia is a store library for Vue.js, and can be used in Vue 2 and Vue 3, with the same API, except in SSR and its installation. It allows state sharing between pages and components around the application. As the documentation says, it is extensible, intuitive (by organization), has devtools support (in Vue.js devtools), inferred typed state even in javascript and more. In Pinia you can access, mutate, replace, use getters that works like computed, use actions, etc. The library is recommended by the official Vue.js documentation.\n\nVisit the following resources to learn more:", "description": "Pinia is a store library for Vue.js, and can be used in Vue 2 and Vue 3, with the same API, except in SSR and its installation. It allows state sharing between pages and components around the application. As the documentation says, it is extensible, intuitive (by organization), has devtools support (in Vue.js devtools), inferred typed state even in javascript and more. In Pinia you can access, mutate, replace, use getters that works like computed, use actions, etc. The library is recommended by the official Vue.js documentation.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Documentation", "title": "Pinia Documentation",
"url": "https://pinia.vuejs.org/", "url": "https://pinia.vuejs.org/",
"type": "article" "type": "article"
}, },
@ -1036,6 +1133,11 @@
"title": "How To Make API calls in Vue.JS Applications", "title": "How To Make API calls in Vue.JS Applications",
"url": "https://medium.com/bb-tutorials-and-thoughts/how-to-make-api-calls-in-vue-js-applications-43e017d4dc86", "url": "https://medium.com/bb-tutorials-and-thoughts/how-to-make-api-calls-in-vue-js-applications-43e017d4dc86",
"type": "article" "type": "article"
},
{
"title": "How to Use RapidAPI Client with Vue.js",
"url": "https://rapidapi.com/guides/fetch-api-with-vue",
"type": "article"
} }
] ]
}, },
@ -1049,7 +1151,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Official Docs", "title": "Apollo Docs",
"url": "https://www.apollographql.com/docs/", "url": "https://www.apollographql.com/docs/",
"type": "article" "type": "article"
}, },
@ -1059,7 +1161,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Official YouTube Channel", "title": "Apollo's YouTube Channel",
"url": "https://www.youtube.com/c/ApolloGraphQL/", "url": "https://www.youtube.com/c/ApolloGraphQL/",
"type": "video" "type": "video"
}, },
@ -1072,10 +1174,10 @@
}, },
"n5IlN-wv4k0r16CvhoSpD": { "n5IlN-wv4k0r16CvhoSpD": {
"title": "Axios", "title": "Axios",
"description": "The most common way for frontend programs to communicate with servers is through the HTTP protocol. You are probably familiar with the Fetch API and the XMLHttpRequest interface, which allows you to fetch resources and make HTTP requests.\n\nAxios is a client HTTP API based on the XMLHttpRequest interface provided by browsers.\n\nVisit the following resources to learn more:", "description": "Axios is a client HTTP API based on the XMLHttpRequest interface provided by browsers. The most common way for frontend programs to communicate with servers is through the HTTP protocol. You are probably familiar with the Fetch API and the XMLHttpRequest interface, which allows you to fetch resources and make HTTP requests.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Axios Getting Started", "title": "Getting Started with Axios",
"url": "https://axios-http.com/docs/intro", "url": "https://axios-http.com/docs/intro",
"type": "article" "type": "article"
}, },
@ -1093,10 +1195,10 @@
}, },
"ufnt87swK61kxShLuVc1-": { "ufnt87swK61kxShLuVc1-": {
"title": "fetch", "title": "fetch",
"description": "The fetch() method in JavaScript is used to request to the server and load the information on the webpages. The request can be of any APIs that return the data of the format JSON or XML. This method returns a promise.\n\nVisit the following resources to learn more:", "description": "The `fetch()` method in JavaScript is used to request to the server and load the information on the webpages. The request can be of any APIs that return the data of the format JSON or XML. This method returns a promise.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Fetch MDN Docs", "title": "Fetch - MDN",
"url": "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch", "url": "https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch",
"type": "article" "type": "article"
}, },
@ -1106,7 +1208,7 @@
"type": "article" "type": "article"
}, },
{ {
"title": "Network request - Fetch", "title": "Network Request - Fetch",
"url": "https://javascript.info/fetch", "url": "https://javascript.info/fetch",
"type": "article" "type": "article"
} }
@ -1117,7 +1219,7 @@
"description": "TanStack Query is a data fetching and caching library for Vue.js and React. It is a part of the TanStack ecosystem.\n\nVisit the following resources to learn more:", "description": "TanStack Query is a data fetching and caching library for Vue.js and React. It is a part of the TanStack ecosystem.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Official Website", "title": "Tanstack Query Website",
"url": "https://tanstack.com/query", "url": "https://tanstack.com/query",
"type": "article" "type": "article"
} }
@ -1149,7 +1251,7 @@
"description": "Since Vue.js is a web framework, it does not natively support mobile app development. So how do we get access to native mobile features such as the camera and geolocation? Ionic has an official native runtime called Capacitor. With Capacitor’s plugin, you can access the native API of the device your app is running on and build truly native mobile application with Ionic Vue.\n\nVisit the following resources to learn more:", "description": "Since Vue.js is a web framework, it does not natively support mobile app development. So how do we get access to native mobile features such as the camera and geolocation? Ionic has an official native runtime called Capacitor. With Capacitor’s plugin, you can access the native API of the device your app is running on and build truly native mobile application with Ionic Vue.\n\nVisit the following resources to learn more:",
"links": [ "links": [
{ {
"title": "Building cross-platform apps with Capacitor and Vue.js", "title": "Building Cross-Platform Apps with Capacitor and Vue.js",
"url": "https://blog.logrocket.com/building-cross-platform-apps-with-capacitor-and-vue-js/", "url": "https://blog.logrocket.com/building-cross-platform-apps-with-capacitor-and-vue-js/",
"type": "article" "type": "article"
}, },

Binary file not shown.

After

Width:  |  Height:  |  Size: 593 KiB

@ -41,6 +41,7 @@ Here is the list of available roadmaps with more being actively worked upon.
- [Computer Science Roadmap](https://roadmap.sh/computer-science) - [Computer Science Roadmap](https://roadmap.sh/computer-science)
- [Data Structures and Algorithms Roadmap](https://roadmap.sh/datastructures-and-algorithms) - [Data Structures and Algorithms Roadmap](https://roadmap.sh/datastructures-and-algorithms)
- [AI and Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist) - [AI and Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist)
- [AI Engineer Roadmap](https://roadmap.sh/ai-engineer)
- [AWS Roadmap](https://roadmap.sh/aws) - [AWS Roadmap](https://roadmap.sh/aws)
- [Linux Roadmap](https://roadmap.sh/linux) - [Linux Roadmap](https://roadmap.sh/linux)
- [Terraform Roadmap](https://roadmap.sh/terraform) - [Terraform Roadmap](https://roadmap.sh/terraform)

@ -2,16 +2,12 @@
--- ---
<script src='./analytics.ts'></script> <script src='./analytics.ts'></script>
<script async src='https://www.googletagmanager.com/gtag/js?id=UA-139582634-1' <script async src="https://www.googletagmanager.com/gtag/js?id=G-EZHDT2S2LF"></script>
></script>
<script is:inline> <script is:inline>
// @ts-nocheck // @ts-nocheck
window.dataLayer = window.dataLayer || []; window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
function gtag() { gtag('config', 'G-EZHDT2S2LF');
dataLayer.push(arguments); </script>
}
gtag('js', new Date());
gtag('config', 'UA-139582634-1');
</script>

@ -4,6 +4,7 @@ import Cookies from 'js-cookie';
import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt';
import { httpGet } from '../../lib/http'; import { httpGet } from '../../lib/http';
import { Spinner } from '../ReactIcons/Spinner.tsx'; import { Spinner } from '../ReactIcons/Spinner.tsx';
import { triggerUtmRegistration } from '../../lib/browser.ts';
type GitHubButtonProps = { type GitHubButtonProps = {
isDisabled?: boolean; isDisabled?: boolean;
@ -46,6 +47,8 @@ export function GitHubButton(props: GitHubButtonProps) {
return; return;
} }
triggerUtmRegistration();
let redirectUrl = '/'; let redirectUrl = '/';
const gitHubRedirectAt = localStorage.getItem(GITHUB_REDIRECT_AT); const gitHubRedirectAt = localStorage.getItem(GITHUB_REDIRECT_AT);
const lastPageBeforeGithub = localStorage.getItem(GITHUB_LAST_PAGE); const lastPageBeforeGithub = localStorage.getItem(GITHUB_LAST_PAGE);

@ -4,6 +4,10 @@ import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt';
import { httpGet } from '../../lib/http'; import { httpGet } from '../../lib/http';
import { Spinner } from '../ReactIcons/Spinner.tsx'; import { Spinner } from '../ReactIcons/Spinner.tsx';
import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx'; import { GoogleIcon } from '../ReactIcons/GoogleIcon.tsx';
import {
getStoredUtmParams,
triggerUtmRegistration,
} from '../../lib/browser.ts';
type GoogleButtonProps = { type GoogleButtonProps = {
isDisabled?: boolean; isDisabled?: boolean;
@ -37,6 +41,8 @@ export function GoogleButton(props: GoogleButtonProps) {
}`, }`,
) )
.then(({ response, error }) => { .then(({ response, error }) => {
const utmParams = getStoredUtmParams();
if (!response?.token) { if (!response?.token) {
setError(error?.message || 'Something went wrong.'); setError(error?.message || 'Something went wrong.');
setIsLoading(false); setIsLoading(false);
@ -45,6 +51,8 @@ export function GoogleButton(props: GoogleButtonProps) {
return; return;
} }
triggerUtmRegistration();
let redirectUrl = '/'; let redirectUrl = '/';
const googleRedirectAt = localStorage.getItem(GOOGLE_REDIRECT_AT); const googleRedirectAt = localStorage.getItem(GOOGLE_REDIRECT_AT);
const lastPageBeforeGoogle = localStorage.getItem(GOOGLE_LAST_PAGE); const lastPageBeforeGoogle = localStorage.getItem(GOOGLE_LAST_PAGE);
@ -97,9 +105,12 @@ export function GoogleButton(props: GoogleButtonProps) {
// For non authentication pages, we want to redirect back to the page // For non authentication pages, we want to redirect back to the page
// the user was on before they clicked the social login button // the user was on before they clicked the social login button
if (!['/login', '/signup'].includes(window.location.pathname)) { if (!['/login', '/signup'].includes(window.location.pathname)) {
const pagePath = ['/respond-invite', '/befriend', '/r', '/ai'].includes( const pagePath = [
window.location.pathname, '/respond-invite',
) '/befriend',
'/r',
'/ai',
].includes(window.location.pathname)
? window.location.pathname + window.location.search ? window.location.pathname + window.location.search
: window.location.pathname; : window.location.pathname;

@ -4,6 +4,7 @@ import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt';
import { httpGet } from '../../lib/http'; import { httpGet } from '../../lib/http';
import { Spinner } from '../ReactIcons/Spinner.tsx'; import { Spinner } from '../ReactIcons/Spinner.tsx';
import { LinkedInIcon } from '../ReactIcons/LinkedInIcon.tsx'; import { LinkedInIcon } from '../ReactIcons/LinkedInIcon.tsx';
import { triggerUtmRegistration } from '../../lib/browser.ts';
type LinkedInButtonProps = { type LinkedInButtonProps = {
isDisabled?: boolean; isDisabled?: boolean;
@ -45,6 +46,8 @@ export function LinkedInButton(props: LinkedInButtonProps) {
return; return;
} }
triggerUtmRegistration();
let redirectUrl = '/'; let redirectUrl = '/';
const linkedInRedirectAt = localStorage.getItem(LINKEDIN_REDIRECT_AT); const linkedInRedirectAt = localStorage.getItem(LINKEDIN_REDIRECT_AT);
const lastPageBeforeLinkedIn = localStorage.getItem(LINKEDIN_LAST_PAGE); const lastPageBeforeLinkedIn = localStorage.getItem(LINKEDIN_LAST_PAGE);
@ -97,9 +100,12 @@ export function LinkedInButton(props: LinkedInButtonProps) {
// For non authentication pages, we want to redirect back to the page // For non authentication pages, we want to redirect back to the page
// the user was on before they clicked the social login button // the user was on before they clicked the social login button
if (!['/login', '/signup'].includes(window.location.pathname)) { if (!['/login', '/signup'].includes(window.location.pathname)) {
const pagePath = ['/respond-invite', '/befriend', '/r', '/ai'].includes( const pagePath = [
window.location.pathname, '/respond-invite',
) '/befriend',
'/r',
'/ai',
].includes(window.location.pathname)
? window.location.pathname + window.location.search ? window.location.pathname + window.location.search
: window.location.pathname; : window.location.pathname;

@ -4,6 +4,7 @@ import { httpPost } from '../../lib/http';
import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt'; import { TOKEN_COOKIE_NAME, setAuthToken } from '../../lib/jwt';
import { Spinner } from '../ReactIcons/Spinner'; import { Spinner } from '../ReactIcons/Spinner';
import { ErrorIcon2 } from '../ReactIcons/ErrorIcon2'; import { ErrorIcon2 } from '../ReactIcons/ErrorIcon2';
import { triggerUtmRegistration } from '../../lib/browser.ts';
export function TriggerVerifyAccount() { export function TriggerVerifyAccount() {
const [isLoading, setIsLoading] = useState(true); const [isLoading, setIsLoading] = useState(true);
@ -26,6 +27,8 @@ export function TriggerVerifyAccount() {
return; return;
} }
triggerUtmRegistration();
setAuthToken(response.token); setAuthToken(response.token);
window.location.href = '/'; window.location.href = '/';
}) })

@ -201,7 +201,7 @@ export function ProgressStack(props: ProgressStackProps) {
emptyLinkHref={'/roadmaps'} emptyLinkHref={'/roadmaps'}
emptyLinkText={'Explore Roadmaps'} emptyLinkText={'Explore Roadmaps'}
> >
<div className="grid grid-cols-2 gap-2"> <div className="grid flex-grow auto-rows-min grid-cols-2 items-start gap-2">
{userProgressesToShow.length > 0 && ( {userProgressesToShow.length > 0 && (
<> <>
{userProgressesToShow.map((progress) => { {userProgressesToShow.map((progress) => {
@ -239,6 +239,14 @@ export function ProgressStack(props: ProgressStackProps) {
/> />
)} )}
</div> </div>
<a
href={'/home'}
className="flex w-full flex-row items-center justify-center gap-2 rounded-md bg-gray-200 py-2 text-sm text-gray-700 hover:bg-gray-300 hover:text-black transition-colors"
>
<Map size={16} />
View All Roadmaps
</a>
</ProgressLane> </ProgressLane>
</div> </div>

@ -1,6 +1,10 @@
import { cn } from '../../lib/classname.ts'; import { cn } from '../../lib/classname.ts';
import { roadmapProgress, totalRoadmapNodes } from '../../stores/roadmap.ts'; import { roadmapProgress, totalRoadmapNodes } from '../../stores/roadmap.ts';
import { useStore } from '@nanostores/react'; import { useStore } from '@nanostores/react';
import { Calendar, Info, X } from 'lucide-react';
import { Tooltip } from '../Tooltip.tsx';
import { useState } from 'react';
import { ScheduleEventModal } from '../Schedule/ScheduleEventModal.tsx';
type ProgressNudgeProps = { type ProgressNudgeProps = {
resourceType: 'roadmap' | 'best-practice'; resourceType: 'roadmap' | 'best-practice';
@ -8,6 +12,11 @@ type ProgressNudgeProps = {
}; };
export function ProgressNudge(props: ProgressNudgeProps) { export function ProgressNudge(props: ProgressNudgeProps) {
const { resourceId, resourceType } = props;
const [isNudgeHidden, setIsNudgeHidden] = useState(false);
const [isScheduleModalOpen, setIsScheduleModalOpen] = useState(false);
const $totalRoadmapNodes = useStore(totalRoadmapNodes); const $totalRoadmapNodes = useStore(totalRoadmapNodes);
const $roadmapProgress = useStore(roadmapProgress); const $roadmapProgress = useStore(roadmapProgress);
@ -17,52 +26,80 @@ export function ProgressNudge(props: ProgressNudgeProps) {
const hasProgress = done > 0; const hasProgress = done > 0;
if (!$totalRoadmapNodes) { if (!$totalRoadmapNodes || isNudgeHidden) {
return null; return null;
} }
return ( return (
<div <>
className={ {isScheduleModalOpen && (
'fixed bottom-5 left-1/2 z-30 hidden -translate-x-1/2 transform animate-fade-slide-up overflow-hidden rounded-full bg-stone-900 px-4 py-2 text-center text-white shadow-2xl transition-all duration-300 sm:block' <ScheduleEventModal
} onClose={() => {
> setIsScheduleModalOpen(false);
<span }}
className={cn('block', { roadmapId={resourceId}
hidden: hasProgress, />
})} )}
<div
className={
'fixed bottom-5 left-1/2 z-30 hidden -translate-x-1/2 transform animate-fade-slide-up flex-row gap-1.5 transition-all duration-300 lg:flex'
}
> >
<span className="mr-2 text-sm font-semibold uppercase text-yellow-400"> <div
Tip className={
</span> 'relative overflow-hidden rounded-full bg-stone-900 px-4 py-2 text-center text-white shadow-2xl'
<span className="text-sm text-gray-200"> }
Right-click on a topic to mark it as done.{' '} >
<span
className={cn('flex items-center', {
hidden: hasProgress,
})}
>
<span className="mr-2 text-sm font-semibold uppercase text-yellow-400">
Tip
</span>
<span className="text-sm text-gray-200">
Right-click a topic to mark it as done &nbsp;
</span>
</span>
<span
className={cn('relative z-20 block text-sm', {
hidden: !hasProgress,
})}
>
<span className="relative -top-[0.45px] mr-2 text-xs font-medium uppercase text-yellow-400">
Progress
</span>
<span>{done > $totalRoadmapNodes ? $totalRoadmapNodes : done}</span>{' '}
of <span>{$totalRoadmapNodes}</span> Done
</span>
<span
className="absolute bottom-0 left-0 top-0 z-10 bg-stone-700"
style={{
width: `${(done / $totalRoadmapNodes) * 100}%`,
}}
></span>
</div>
{resourceType === 'roadmap' && (
<button <button
data-popup="progress-help" onClick={() => {
className="cursor-pointer font-semibold text-yellow-500 underline" setIsScheduleModalOpen(true);
}}
className="group relative flex items-center gap-2 rounded-full bg-stone-900 px-3 text-sm text-yellow-400"
> >
Learn more. <Calendar className="h-4 w-4 flex-shrink-0" strokeWidth={2.5} />
</button> </button>
</span> )}
</span> <button
<span onClick={() => {
className={cn('relative z-20 block text-sm', { setIsNudgeHidden(true);
hidden: !hasProgress, }}
})} className="group relative flex items-center gap-2 rounded-full bg-stone-900 px-3 text-sm text-yellow-400"
> >
<span className="relative -top-[0.45px] mr-2 text-xs font-medium uppercase text-yellow-400"> <X className="h-4 w-4 flex-shrink-0" strokeWidth={2.5} />
Progress </button>
</span> </div>
<span>{done > $totalRoadmapNodes ? $totalRoadmapNodes : done}</span> of{' '} </>
<span>{$totalRoadmapNodes}</span> Done
</span>
<span
className="absolute bottom-0 left-0 top-0 z-10 bg-stone-700"
style={{
width: `${(done / $totalRoadmapNodes) * 100}%`,
}}
></span>
</div>
); );
} }

@ -57,7 +57,7 @@ export class Renderer {
} }
// Clone it so we can use it later // Clone it so we can use it later
this.loaderHTML = this.loaderEl!.innerHTML; this.loaderHTML = this.loaderEl?.innerHTML!;
const dataset = this.containerEl.dataset; const dataset = this.containerEl.dataset;
this.resourceType = dataset.resourceType!; this.resourceType = dataset.resourceType!;
@ -66,11 +66,7 @@ export class Renderer {
return true; return true;
} }
/** jsonToSvg(jsonUrl: string): Promise<void> | null {
* @param { string } jsonUrl
* @returns {Promise<SVGElement>}
*/
jsonToSvg(jsonUrl: string) {
if (!jsonUrl) { if (!jsonUrl) {
console.error('jsonUrl not defined in frontmatter'); console.error('jsonUrl not defined in frontmatter');
return null; return null;

@ -124,7 +124,7 @@ export function RoadmapTopicDetail(props: RoadmapTopicDetailProps) {
const openAIKey = getOpenAIKey(); const openAIKey = getOpenAIKey();
return ( return (
<div className={'relative z-[90]'}> <div className={'relative z-[92]'}>
<div <div
ref={topicRef} ref={topicRef}
tabIndex={0} tabIndex={0}

@ -3,6 +3,7 @@ import { getGuideTableOfContent, type GuideFileType } from '../../lib/guide';
import MarkdownFile from '../MarkdownFile.astro'; import MarkdownFile from '../MarkdownFile.astro';
import { TableOfContent } from '../TableOfContent/TableOfContent'; import { TableOfContent } from '../TableOfContent/TableOfContent';
import { replaceVariables } from '../../lib/markdown'; import { replaceVariables } from '../../lib/markdown';
import { RelatedGuides } from './RelatedGuides';
interface Props { interface Props {
guide: GuideFileType; guide: GuideFileType;
@ -14,13 +15,21 @@ const allHeadings = guide.getHeadings();
const tableOfContent = getGuideTableOfContent(allHeadings); const tableOfContent = getGuideTableOfContent(allHeadings);
const showTableOfContent = tableOfContent.length > 0; const showTableOfContent = tableOfContent.length > 0;
const showRelatedGuides =
guide?.frontmatter?.relatedGuides &&
Object.keys(guide?.frontmatter?.relatedGuides).length > 0;
const { frontmatter: guideFrontmatter, author } = guide; const { frontmatter: guideFrontmatter, author } = guide;
--- ---
<article class='lg:grid lg:max-w-full lg:grid-cols-[1fr_minmax(0,700px)_1fr]'> <article class='lg:grid lg:max-w-full lg:grid-cols-[1fr_minmax(0,700px)_1fr]'>
{ {
showTableOfContent && ( (showTableOfContent || showRelatedGuides) && (
<div class='bg-gradient-to-r from-gray-50 py-0 lg:col-start-3 lg:col-end-4 lg:row-start-1'> <div class='bg-gradient-to-r from-gray-50 py-0 lg:col-start-3 lg:col-end-4 lg:row-start-1'>
<RelatedGuides
relatedTitle={guideFrontmatter?.relatedTitle}
relatedGuides={guideFrontmatter?.relatedGuides || {}}
client:load
/>
<TableOfContent toc={tableOfContent} client:load /> <TableOfContent toc={tableOfContent} client:load />
</div> </div>
) )

@ -0,0 +1,74 @@
import { useState } from 'react';
import { cn } from '../../lib/classname';
import { ChevronDown } from 'lucide-react';
type RelatedGuidesProps = {
relatedTitle?: string;
relatedGuides: Record<string, string>;
};
export function RelatedGuides(props: RelatedGuidesProps) {
const { relatedTitle = 'Other Guides', relatedGuides } = props;
const [isOpen, setIsOpen] = useState(false);
const relatedGuidesArray = Object.entries(relatedGuides).map(
([title, url]) => ({
title,
url,
}),
);
if (relatedGuidesArray.length === 0) {
return null;
}
return (
<div
className={cn(
'relative min-w-[250px] px-5 pt-0 max-lg:hidden lg:pt-10',
)}
>
<h4 className="text-lg font-medium max-lg:hidden">{relatedTitle}</h4>
<button
className="flex w-full items-center justify-between gap-2 bg-gray-300 px-3 py-2 text-sm font-medium lg:hidden"
onClick={() => setIsOpen(!isOpen)}
>
{relatedTitle}
<ChevronDown
size={16}
className={cn(
'transform transition-transform',
isOpen && 'rotate-180',
)}
/>
</button>
<ol
className={cn(
'mt-0.5 space-y-0 max-lg:absolute max-lg:top-full max-lg:z-10 max-lg:mt-0 max-lg:w-full max-lg:bg-white max-lg:shadow',
!isOpen && 'hidden lg:block',
isOpen && 'block',
)}
>
{relatedGuidesArray.map((relatedGuide) => (
<li key={relatedGuide.url}>
<a
href={relatedGuide.url}
className="text-sm text-gray-500 no-underline hover:text-black max-lg:block max-lg:border-b max-lg:px-3 max-lg:py-1"
onClick={() => {
if (!isOpen) {
return;
}
setIsOpen(false);
}}
>
{relatedGuide.title}
</a>
</li>
))}
</ol>
</div>
);
}

@ -2,6 +2,8 @@ import { cn } from '../lib/classname.ts';
import { memo, useEffect, useState } from 'react'; import { memo, useEffect, useState } from 'react';
import { useScrollPosition } from '../hooks/use-scroll-position.ts'; import { useScrollPosition } from '../hooks/use-scroll-position.ts';
import { X } from 'lucide-react'; import { X } from 'lucide-react';
import { isOnboardingStripHidden } from '../stores/page.ts';
import { useStore } from '@nanostores/react';
type OnboardingNudgeProps = { type OnboardingNudgeProps = {
onStartOnboarding: () => void; onStartOnboarding: () => void;
@ -14,6 +16,7 @@ export function OnboardingNudge(props: OnboardingNudgeProps) {
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const $isOnboardingStripHidden = useStore(isOnboardingStripHidden);
const { y: scrollY } = useScrollPosition(); const { y: scrollY } = useScrollPosition();
useEffect(() => { useEffect(() => {
@ -30,10 +33,14 @@ export function OnboardingNudge(props: OnboardingNudgeProps) {
return null; return null;
} }
if ($isOnboardingStripHidden) {
return null;
}
return ( return (
<div <div
className={cn( className={cn(
'fixed left-0 right-0 top-0 z-[91] flex w-full items-center justify-center bg-yellow-300 border-b border-b-yellow-500/30 pt-1.5 pb-2', 'fixed left-0 right-0 top-0 z-[91] flex w-full items-center justify-center border-b border-b-yellow-500/30 bg-yellow-300 pb-2 pt-1.5',
{ {
'striped-loader': isLoading, 'striped-loader': isLoading,
}, },

@ -6,6 +6,7 @@ import { X } from 'lucide-react';
import { setViewSponsorCookie } from '../lib/jwt'; import { setViewSponsorCookie } from '../lib/jwt';
import { isMobile } from '../lib/is-mobile'; import { isMobile } from '../lib/is-mobile';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { getUrlUtmParams } from '../lib/browser.ts';
export type PageSponsorType = { export type PageSponsorType = {
company: string; company: string;
@ -50,6 +51,16 @@ export function PageSponsor(props: PageSponsorProps) {
const [sponsorId, setSponsorId] = useState<string | null>(null); const [sponsorId, setSponsorId] = useState<string | null>(null);
const [sponsor, setSponsor] = useState<PageSponsorType>(); const [sponsor, setSponsor] = useState<PageSponsorType>();
useEffect(() => {
const foundUtmParams = getUrlUtmParams();
if (!foundUtmParams.utmSource) {
return;
}
localStorage.setItem('utm_params', JSON.stringify(foundUtmParams));
}, []);
const loadSponsor = async () => { const loadSponsor = async () => {
const currentPath = window.location.pathname; const currentPath = window.location.pathname;
if ( if (
@ -59,7 +70,7 @@ export function PageSponsor(props: PageSponsorProps) {
currentPath.startsWith('/guides') || currentPath.startsWith('/guides') ||
currentPath.startsWith('/videos') || currentPath.startsWith('/videos') ||
currentPath.startsWith('/account') || currentPath.startsWith('/account') ||
currentPath.startsWith('/team') currentPath.startsWith('/team/')
) { ) {
return; return;
} }
@ -127,6 +138,8 @@ export function PageSponsor(props: PageSponsorProps) {
const { url, title, imageUrl, description, company, gaLabel } = sponsor; const { url, title, imageUrl, description, company, gaLabel } = sponsor;
const isRoadmapAd = title.toLowerCase() === 'advertise with us!';
return ( return (
<a <a
href={url} href={url}
@ -134,10 +147,13 @@ export function PageSponsor(props: PageSponsorProps) {
rel="noopener sponsored nofollow" rel="noopener sponsored nofollow"
className="fixed bottom-0 left-0 right-0 z-50 flex bg-white shadow-lg outline-0 outline-transparent sm:bottom-[15px] sm:left-auto sm:right-[15px] sm:max-w-[350px]" className="fixed bottom-0 left-0 right-0 z-50 flex bg-white shadow-lg outline-0 outline-transparent sm:bottom-[15px] sm:left-auto sm:right-[15px] sm:max-w-[350px]"
onClick={async () => { onClick={async () => {
const labelValue = gaLabel || `${gaPageIdentifier} / ${company} Link`;
window.fireEvent({ window.fireEvent({
category: 'SponsorClick', category: 'SponsorClick',
action: `${company} Redirect`, action: `${company} Redirect`,
label: gaLabel || `${gaPageIdentifier} / ${company} Link`, label: labelValue,
value: labelValue,
}); });
await clickSponsor(sponsorId || ''); await clickSponsor(sponsorId || '');
}} }}
@ -147,6 +163,8 @@ export function PageSponsor(props: PageSponsorProps) {
aria-label="Close" aria-label="Close"
onClick={(e) => { onClick={(e) => {
e.preventDefault(); e.preventDefault();
e.stopPropagation();
markSponsorHidden(sponsorId || ''); markSponsorHidden(sponsorId || '');
sponsorHidden.set(true); sponsorHidden.set(true);
}} }}
@ -165,10 +183,16 @@ export function PageSponsor(props: PageSponsorProps) {
<span className="mb-0.5 block font-semibold">{title}</span> <span className="mb-0.5 block font-semibold">{title}</span>
<span className="block text-gray-500">{description}</span> <span className="block text-gray-500">{description}</span>
</span> </span>
<span className="sponsor-footer hidden sm:block">Partner Content</span> {!isRoadmapAd && (
<span className="block pb-1 text-center text-[10px] uppercase text-gray-400 sm:hidden"> <>
Partner Content <span className="sponsor-footer hidden sm:block">
</span> Partner Content
</span>
<span className="block pb-1 text-center text-[10px] uppercase text-gray-400 sm:hidden">
Partner Content
</span>
</>
)}
</span> </span>
</a> </a>
); );

@ -0,0 +1,104 @@
import { useEffect, useState } from 'react';
import { httpGet, httpPatch, httpPost } from '../../lib/http';
import { sponsorHidden } from '../../stores/page';
import { useStore } from '@nanostores/react';
import { X } from 'lucide-react';
import { setViewSponsorCookie } from '../../lib/jwt';
import { isMobile } from '../../lib/is-mobile';
import Cookies from 'js-cookie';
import { getUrlUtmParams } from '../../lib/browser.ts';
export type BottomRightSponsorType = {
id: string;
company: string;
description: string;
gaLabel: string;
imageUrl: string;
pageUrl: string;
title: string;
url: string;
};
type V1GetSponsorResponse = {
id?: string;
href?: string;
sponsor?: BottomRightSponsorType;
};
type BottomRightSponsorProps = {
sponsor: BottomRightSponsorType;
onSponsorClick: () => void;
onSponsorImpression: () => void;
onSponsorHidden: () => void;
};
export function BottomRightSponsor(props: BottomRightSponsorProps) {
const { sponsor, onSponsorImpression, onSponsorClick, onSponsorHidden } =
props;
const [isHidden, setIsHidden] = useState(false);
useEffect(() => {
if (!sponsor) {
return;
}
onSponsorImpression();
}, []);
const { url, title, imageUrl, description, company, gaLabel } = sponsor;
const isRoadmapAd = title.toLowerCase() === 'advertise with us!';
if (isHidden) {
return null;
}
return (
<a
href={url}
target="_blank"
rel="noopener sponsored nofollow"
className="fixed bottom-0 left-0 right-0 z-50 flex bg-white shadow-lg outline-0 outline-transparent sm:bottom-[15px] sm:left-auto sm:right-[15px] sm:max-w-[350px]"
onClick={onSponsorClick}
>
<span
className="absolute right-1 top-1 text-gray-400 hover:text-gray-800 sm:right-1.5 sm:top-1.5 sm:text-gray-300"
aria-label="Close"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setIsHidden(true);
onSponsorHidden();
}}
>
<X className="h-5 w-5 sm:h-4 sm:w-4" />
</span>
<span>
<img
src={imageUrl}
className="block h-[106px] object-cover sm:h-[153px] sm:w-[118.18px]"
alt="Sponsor Banner"
/>
</span>
<span className="flex flex-1 flex-col justify-between text-xs sm:text-sm">
<span className="p-[10px]">
<span className="mb-0.5 block font-semibold">{title}</span>
<span className="block text-gray-500">{description}</span>
</span>
{!isRoadmapAd && (
<>
<span className="sponsor-footer hidden sm:block">
Partner Content
</span>
<span className="block pb-1 text-center text-[10px] uppercase text-gray-400 sm:hidden">
Partner Content
</span>
</>
)}
</span>
</a>
);
}

@ -0,0 +1,195 @@
import { useEffect, useState } from 'react';
import { httpGet, httpPatch } from '../../lib/http';
import { sponsorHidden } from '../../stores/page';
import { useStore } from '@nanostores/react';
import { setViewSponsorCookie } from '../../lib/jwt';
import { isMobile } from '../../lib/is-mobile';
import Cookies from 'js-cookie';
import { getUrlUtmParams } from '../../lib/browser.ts';
import { StickyTopSponsor } from './StickyTopSponsor.tsx';
import { BottomRightSponsor } from './BottomRightSponsor.tsx';
type PageSponsorType = {
company: string;
description: string;
gaLabel: string;
imageUrl: string;
pageUrl: string;
title: string;
url: string;
id: string;
};
export type StickyTopSponsorType = PageSponsorType & {
buttonText: string;
style?: {
fromColor?: string;
toColor?: string;
textColor?: string;
buttonBackgroundColor?: string;
buttonTextColor?: string;
};
};
export type BottomRightSponsorType = PageSponsorType;
type V1GetSponsorResponse = {
bottomRightAd?: BottomRightSponsorType;
stickyTopAd?: StickyTopSponsorType;
};
type PageSponsorsProps = {
gaPageIdentifier?: string;
};
const CLOSE_SPONSOR_KEY = 'sponsorClosed';
function markSponsorHidden(sponsorId: string) {
Cookies.set(`${CLOSE_SPONSOR_KEY}-${sponsorId}`, '1', {
path: '/',
expires: 1,
sameSite: 'lax',
secure: true,
domain: import.meta.env.DEV ? 'localhost' : '.roadmap.sh',
});
}
function isSponsorMarkedHidden(sponsorId: string) {
return Cookies.get(`${CLOSE_SPONSOR_KEY}-${sponsorId}`) === '1';
}
export function PageSponsors(props: PageSponsorsProps) {
const { gaPageIdentifier } = props;
const $isSponsorHidden = useStore(sponsorHidden);
const [stickyTopSponsor, setStickyTopSponsor] =
useState<StickyTopSponsorType | null>();
const [bottomRightSponsor, setBottomRightSponsor] =
useState<BottomRightSponsorType | null>();
useEffect(() => {
const foundUtmParams = getUrlUtmParams();
if (!foundUtmParams.utmSource) {
return;
}
localStorage.setItem('utm_params', JSON.stringify(foundUtmParams));
}, []);
async function loadSponsor() {
const currentPath = window.location.pathname;
if (
currentPath === '/' ||
currentPath === '/best-practices' ||
currentPath === '/roadmaps' ||
currentPath.startsWith('/guides') ||
currentPath.startsWith('/videos') ||
currentPath.startsWith('/account') ||
currentPath.startsWith('/team/')
) {
return;
}
const { response, error } = await httpGet<V1GetSponsorResponse>(
`${import.meta.env.PUBLIC_API_URL}/v1-get-sponsor`,
{
href: window.location.pathname,
mobile: isMobile() ? 'true' : 'false',
},
);
if (error) {
console.error(error);
return;
}
setStickyTopSponsor(response?.stickyTopAd);
setBottomRightSponsor(response?.bottomRightAd);
}
async function logSponsorImpression(
sponsor: BottomRightSponsorType | StickyTopSponsorType,
) {
window.fireEvent({
category: 'SponsorImpression',
action: `${sponsor?.company} Impression`,
label:
sponsor?.gaLabel || `${gaPageIdentifier} / ${sponsor?.company} Link`,
});
}
async function clickSponsor(
sponsor: BottomRightSponsorType | StickyTopSponsorType,
) {
const { id: sponsorId, company, gaLabel } = sponsor;
const labelValue = gaLabel || `${gaPageIdentifier} / ${company} Link`;
window.fireEvent({
category: 'SponsorClick',
action: `${company} Redirect`,
label: labelValue,
value: labelValue,
});
const clickUrl = new URL(
`${import.meta.env.PUBLIC_API_URL}/v1-view-sponsor/${sponsorId}`,
);
const { response, error } = await httpPatch<{ status: 'ok' }>(
clickUrl.toString(),
{
mobile: isMobile(),
},
);
if (error || !response) {
console.error(error);
return;
}
setViewSponsorCookie(sponsorId);
}
useEffect(() => {
window.setTimeout(loadSponsor);
}, []);
if ($isSponsorHidden) {
return null;
}
return (
<div>
{stickyTopSponsor && !isSponsorMarkedHidden(stickyTopSponsor.id) && (
<StickyTopSponsor
sponsor={stickyTopSponsor}
onSponsorImpression={() => {
logSponsorImpression(stickyTopSponsor).catch(console.error);
}}
onSponsorClick={() => {
clickSponsor(stickyTopSponsor).catch(console.error);
}}
onSponsorHidden={() => {
markSponsorHidden(stickyTopSponsor.id);
}}
/>
)}
{bottomRightSponsor && !isSponsorMarkedHidden(bottomRightSponsor.id) && (
<BottomRightSponsor
sponsor={bottomRightSponsor}
onSponsorClick={() => {
clickSponsor(bottomRightSponsor).catch(console.error);
}}
onSponsorHidden={() => {
markSponsorHidden(bottomRightSponsor.id);
}}
onSponsorImpression={() => {
logSponsorImpression(bottomRightSponsor).catch(console.error);
}}
/>
)}
</div>
);
}

@ -0,0 +1,91 @@
import { cn } from '../../lib/classname.ts';
import { useScrollPosition } from '../../hooks/use-scroll-position.ts';
import { X } from 'lucide-react';
import type { StickyTopSponsorType } from './PageSponsors.tsx';
import { useEffect, useState } from 'react';
import { isOnboardingStripHidden } from '../../stores/page.ts';
type StickyTopSponsorProps = {
sponsor: StickyTopSponsorType;
onSponsorImpression: () => void;
onSponsorClick: () => void;
onSponsorHidden: () => void;
};
const SCROLL_DISTANCE = 100;
export function StickyTopSponsor(props: StickyTopSponsorProps) {
const { sponsor, onSponsorHidden, onSponsorImpression, onSponsorClick } =
props;
const { y: scrollY } = useScrollPosition();
const [isImpressionLogged, setIsImpressionLogged] = useState(false);
const [isHidden, setIsHidden] = useState(false);
useEffect(() => {
if (!sponsor) {
return;
}
// preload the image so that we don't see a flicker
const img = new Image();
img.src = sponsor.imageUrl;
// hide the onboarding strip when the sponsor is visible
isOnboardingStripHidden.set(true);
}, [sponsor]);
useEffect(() => {
if (scrollY < SCROLL_DISTANCE || isImpressionLogged) {
return;
}
setIsImpressionLogged(true);
onSponsorImpression();
}, [scrollY]);
if (scrollY < SCROLL_DISTANCE || isHidden) {
return null;
}
return (
<a
target="_blank"
href={sponsor.url}
onClick={onSponsorClick}
className={cn(
'fixed left-0 right-0 top-0 z-[91] flex min-h-[45px] w-full flex-row items-center justify-center px-14 pb-2 pt-1.5 text-base font-medium text-yellow-950',
)}
style={{
backgroundImage: `linear-gradient(to bottom, ${sponsor.style?.fromColor}, ${sponsor.style?.toColor})`,
color: sponsor.style?.textColor,
}}
>
<img className="h-[23px]" src={sponsor.imageUrl} alt={'ad'} />
<span className="mx-3 truncate">{sponsor.description}</span>
<button
className="flex-truncate rounded-md px-3 py-1 text-sm transition-colors"
style={{
backgroundColor: sponsor.style?.buttonBackgroundColor,
color: sponsor.style?.buttonTextColor,
}}
>
{sponsor.buttonText}
</button>
<button
type="button"
className="absolute right-5 top-1/2 ml-1 -translate-y-1/2 px-1 py-1 opacity-70 hover:opacity-100"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setIsHidden(true);
onSponsorHidden();
}}
>
<X className="h-4 w-4" strokeWidth={3} />
</button>
</a>
);
}

@ -9,6 +9,7 @@ import { TableOfContent } from '../TableOfContent/TableOfContent';
import { markdownToHtml, replaceVariables } from '../../lib/markdown'; import { markdownToHtml, replaceVariables } from '../../lib/markdown';
import { QuestionGroupType } from '../../lib/question-group'; import { QuestionGroupType } from '../../lib/question-group';
import { QuestionsList } from './QuestionsList'; import { QuestionsList } from './QuestionsList';
import { RelatedGuides } from '../Guide/RelatedGuides';
interface Props { interface Props {
questionGroup: QuestionGroupType; questionGroup: QuestionGroupType;
@ -65,6 +66,11 @@ const { frontmatter: guideFrontmatter, author } = questionGroup;
{ {
showTableOfContent && ( showTableOfContent && (
<div class='bg-gradient-to-r from-gray-50 py-0 lg:col-start-3 lg:col-end-4 lg:row-start-1'> <div class='bg-gradient-to-r from-gray-50 py-0 lg:col-start-3 lg:col-end-4 lg:row-start-1'>
<RelatedGuides
relatedTitle={guideFrontmatter?.relatedTitle}
relatedGuides={guideFrontmatter?.relatedGuides || {}}
client:load
/>
<TableOfContent toc={tableOfContent} client:load /> <TableOfContent toc={tableOfContent} client:load />
</div> </div>
) )

@ -0,0 +1,37 @@
import type { SVGProps } from 'react';
export function AppleCalendarIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
width="1736"
height="1693"
viewBox="0 0 1736 1693"
fill="none"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<rect width="1736" height="1693" fill="#ECEFF1" />
<rect x="1" width="1734" height="526" fill="#FF3D00" />
<path
d="M724.689 300.13L750.665 128H805.4L756.691 401.947H701.224L669.269 240.501L637.587 401.947H581.892L533 128H588.101L613.894 299.947L646.032 128H692.505L724.689 300.13Z"
fill="white"
/>
<path
d="M976.776 283.419H890.632V356.061H992.617V401.947H835.303V128H992.206V174.069H890.632V238.812H976.776V283.419Z"
fill="white"
/>
<path
d="M1024.39 401.947V128H1096.84C1128.79 128 1154.31 138.182 1173.3 158.454C1192.29 178.771 1201.97 206.623 1202.34 242.008V286.433C1202.34 322.411 1192.84 350.673 1173.8 371.219C1154.86 391.674 1128.66 401.947 1095.28 401.947H1024.39ZM1079.72 174.069V356.015H1096.29C1114.73 356.015 1127.7 351.175 1135.23 341.45C1142.76 331.725 1146.73 314.969 1147.1 291.135V243.514C1147.1 217.946 1143.49 200.094 1136.37 189.958C1129.2 179.867 1117.06 174.571 1099.85 174.069H1079.72Z"
fill="white"
/>
<path
d="M831.353 1451.15H380.138V1345.95L587.348 1082.46C613.643 1045.98 632.999 1013.97 645.462 986.442C657.925 958.91 664.133 932.52 664.133 907.271C664.133 873.256 658.29 846.592 646.512 827.324C634.78 808.056 617.843 798.423 595.748 798.423C571.553 798.423 552.379 809.654 538.182 832.072C523.984 854.536 516.863 886.086 516.863 926.767H367.492C367.492 879.785 377.216 836.821 396.663 797.875C416.111 758.929 443.456 728.703 478.698 707.153C513.941 685.556 553.84 674.781 598.35 674.781C666.735 674.781 719.736 693.638 757.444 731.351C795.152 769.065 814.006 822.621 814.006 892.067C814.006 935.168 803.552 978.954 782.735 1023.29C761.872 1067.67 724.073 1122.27 669.383 1187.11L571.051 1327.55H831.353V1451.15Z"
fill="#424242"
/>
<path
d="M1354.1 888.871C1354.1 926.036 1346.21 959.001 1330.41 987.766C1314.62 1016.53 1292.89 1039.5 1265.22 1056.66C1296.77 1074.56 1321.69 1099.17 1339.91 1130.58C1358.12 1161.95 1367.25 1198.89 1367.25 1241.3C1367.25 1309.33 1347.62 1363.07 1308.36 1402.52C1269.1 1441.97 1215.6 1461.69 1147.94 1461.69C1080.29 1461.69 1026.47 1441.97 986.475 1402.52C946.53 1363.07 926.535 1309.33 926.535 1241.3C926.535 1198.89 935.62 1161.9 953.88 1130.35C972.095 1098.81 997.203 1074.24 1029.11 1056.71C1001.04 1039.54 979.171 1016.58 963.376 987.811C947.58 959.047 939.683 926.128 939.683 888.916C939.683 821.936 958.445 769.521 995.971 731.625C1033.45 693.729 1083.8 674.781 1146.89 674.781C1210.71 674.781 1261.2 693.912 1298.36 732.127C1335.52 770.343 1354.1 822.576 1354.1 888.871ZM1147.94 1338.05C1170.36 1338.05 1187.66 1328.46 1199.76 1309.38C1211.85 1290.29 1217.88 1263.72 1217.88 1229.71C1217.88 1195.69 1211.58 1169.07 1198.94 1149.76C1186.29 1130.45 1168.94 1120.81 1146.89 1120.81C1124.8 1120.81 1107.36 1130.45 1094.58 1149.76C1081.79 1169.07 1075.36 1195.69 1075.36 1229.71C1075.36 1263.72 1081.75 1290.29 1094.58 1309.38C1107.36 1328.51 1125.16 1338.05 1147.94 1338.05ZM1205.78 896.724C1205.78 866.909 1200.94 843.076 1191.31 825.224C1181.68 807.326 1166.89 798.377 1146.89 798.377C1127.95 798.377 1113.57 807.052 1103.8 824.402C1093.98 841.752 1089.05 865.859 1089.05 896.724C1089.05 926.904 1093.98 951.148 1103.8 969.594C1113.61 987.994 1128.31 997.217 1147.94 997.217C1167.57 997.217 1182.14 987.994 1191.59 969.594C1201.04 951.194 1205.78 926.904 1205.78 896.724Z"
fill="#424242"
/>
</svg>
);
}

@ -0,0 +1,22 @@
import type { SVGProps } from 'react';
export function FileIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
x="0px"
y="0px"
width={100}
height={100}
viewBox="0 0 48 48"
{...props}
>
<path fill="#90CAF9" d="M40 45L8 45 8 3 30 3 40 13z" />
<path fill="#E1F5FE" d="M38.5 14L29 14 29 4.5z" />
<path
fill="#1976D2"
d="M16 21H33V23H16zM16 25H29V27H16zM16 29H33V31H16zM16 33H29V35H16z"
/>
</svg>
);
}

@ -0,0 +1,40 @@
import type { SVGProps } from 'react';
export function GoogleCalendarIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
x="0px"
y="0px"
width="100"
height="100"
viewBox="0 0 48 48"
{...props}
>
<rect width="22" height="22" x="13" y="13" fill="#fff"></rect>
<polygon
fill="#1e88e5"
points="25.68,20.92 26.688,22.36 28.272,21.208 28.272,29.56 30,29.56 30,18.616 28.56,18.616"
></polygon>
<path
fill="#1e88e5"
d="M22.943,23.745c0.625-0.574,1.013-1.37,1.013-2.249c0-1.747-1.533-3.168-3.417-3.168 c-1.602,0-2.972,1.009-3.33,2.453l1.657,0.421c0.165-0.664,0.868-1.146,1.673-1.146c0.942,0,1.709,0.646,1.709,1.44 c0,0.794-0.767,1.44-1.709,1.44h-0.997v1.728h0.997c1.081,0,1.993,0.751,1.993,1.64c0,0.904-0.866,1.64-1.931,1.64 c-0.962,0-1.784-0.61-1.914-1.418L17,26.802c0.262,1.636,1.81,2.87,3.6,2.87c2.007,0,3.64-1.511,3.64-3.368 C24.24,25.281,23.736,24.363,22.943,23.745z"
></path>
<polygon
fill="#fbc02d"
points="34,42 14,42 13,38 14,34 34,34 35,38"
></polygon>
<polygon
fill="#4caf50"
points="38,35 42,34 42,14 38,13 34,14 34,34"
></polygon>
<path
fill="#1e88e5"
d="M34,14l1-4l-1-4H9C7.343,6,6,7.343,6,9v25l4,1l4-1V14H34z"
></path>
<polygon fill="#e53935" points="34,34 34,42 42,34"></polygon>
<path fill="#1565c0" d="M39,6h-5v8h8V9C42,7.343,40.657,6,39,6z"></path>
<path fill="#1565c0" d="M9,42h5v-8H6v5C6,40.657,7.343,42,9,42z"></path>
</svg>
);
}

@ -0,0 +1,40 @@
import type { SVGProps } from 'react';
export function OutlookCalendarIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
x="0px"
y="0px"
width={100}
height={100}
viewBox="0 0 48 48"
{...props}
>
<path
fill="#1976d2"
d="M28,13h14.533C43.343,13,44,13.657,44,14.467v19.066C44,34.343,43.343,35,42.533,35H28V13z"
/>
<rect width={14} height="15.542" x={28} y="17.958" fill="#fff" />
<polygon fill="#1976d2" points="27,44 4,39.5 4,8.5 27,4" />
<path
fill="#fff"
d="M15.25,16.5c-3.176,0-5.75,3.358-5.75,7.5s2.574,7.5,5.75,7.5S21,28.142,21,24 S18.426,16.5,15.25,16.5z M15,28.5c-1.657,0-3-2.015-3-4.5s1.343-4.5,3-4.5s3,2.015,3,4.5S16.657,28.5,15,28.5z"
/>
<rect width="2.7" height="2.9" x="28.047" y="29.737" fill="#1976d2" />
<rect width="2.7" height="2.9" x="31.448" y="29.737" fill="#1976d2" />
<rect width="2.7" height="2.9" x="34.849" y="29.737" fill="#1976d2" />
<rect width="2.7" height="2.9" x="28.047" y="26.159" fill="#1976d2" />
<rect width="2.7" height="2.9" x="31.448" y="26.159" fill="#1976d2" />
<rect width="2.7" height="2.9" x="34.849" y="26.159" fill="#1976d2" />
<rect width="2.7" height="2.9" x="38.25" y="26.159" fill="#1976d2" />
<rect width="2.7" height="2.9" x="28.047" y="22.706" fill="#1976d2" />
<rect width="2.7" height="2.9" x="31.448" y="22.706" fill="#1976d2" />
<rect width="2.7" height="2.9" x="34.849" y="22.706" fill="#1976d2" />
<rect width="2.7" height="2.9" x="38.25" y="22.706" fill="#1976d2" />
<rect width="2.7" height="2.9" x="31.448" y="19.112" fill="#1976d2" />
<rect width="2.7" height="2.9" x="34.849" y="19.112" fill="#1976d2" />
<rect width="2.7" height="2.9" x="38.25" y="19.112" fill="#1976d2" />
</svg>
);
}

@ -85,7 +85,7 @@ const relatedQuestionDetails = await getQuestionGroupsByIds(relatedQuestions);
href={`/${relatedRoadmap.id}`} href={`/${relatedRoadmap.id}`}
class='flex flex-col gap-0.5 rounded-md border bg-white px-3.5 py-2 hover:bg-gray-50 sm:flex-row sm:gap-0' class='flex flex-col gap-0.5 rounded-md border bg-white px-3.5 py-2 hover:bg-gray-50 sm:flex-row sm:gap-0'
> >
<span class='inline-block min-w-[170px] font-medium'> <span class='inline-block min-w-[195px] font-medium'>
{relatedRoadmap.frontmatter.briefTitle} {relatedRoadmap.frontmatter.briefTitle}
</span> </span>
<span class='text-gray-500'> <span class='text-gray-500'>

@ -16,7 +16,7 @@ export function RoadmapSelect(props: RoadmapSelectProps) {
const fetchProgress = async () => { const fetchProgress = async () => {
const { response, error } = await httpGet<UserProgressResponse>( const { response, error } = await httpGet<UserProgressResponse>(
`${import.meta.env.PUBLIC_API_URL}/v1-get-user-all-progress` `${import.meta.env.PUBLIC_API_URL}/v1-get-user-all-progress`,
); );
if (error || !response) { if (error || !response) {
@ -34,16 +34,21 @@ export function RoadmapSelect(props: RoadmapSelectProps) {
const canSelectMore = selectedRoadmaps.length < 4; const canSelectMore = selectedRoadmaps.length < 4;
const allProgress = const allProgress =
progressList?.filter((progress) => progress.resourceType === 'roadmap') || progressList?.filter(
[]; (progress) =>
progress.resourceType === 'roadmap' &&
progress.resourceId &&
progress.resourceTitle,
) || [];
return ( return (
<div className="flex flex-wrap gap-1"> <div className="flex flex-wrap gap-1">
{allProgress?.length === 0 && ( {allProgress?.length === 0 && (
<p className={'text-sm italic text-gray-400'}> <p className="text-sm italic text-gray-400">
No progress tracked so far. No progress tracked so far.
</p> </p>
)} )}
{allProgress?.map((progress) => { {allProgress?.map((progress) => {
const isSelected = selectedRoadmaps.includes(progress.resourceId); const isSelected = selectedRoadmaps.includes(progress.resourceId);
const canSelect = isSelected || canSelectMore; const canSelect = isSelected || canSelectMore;
@ -58,8 +63,8 @@ export function RoadmapSelect(props: RoadmapSelectProps) {
if (isSelected) { if (isSelected) {
setSelectedRoadmaps( setSelectedRoadmaps(
selectedRoadmaps.filter( selectedRoadmaps.filter(
(roadmap) => roadmap !== progress.resourceId (roadmap) => roadmap !== progress.resourceId,
) ),
); );
} else if (selectedRoadmaps.length < 4) { } else if (selectedRoadmaps.length < 4) {
setSelectedRoadmaps([...selectedRoadmaps, progress.resourceId]); setSelectedRoadmaps([...selectedRoadmaps, progress.resourceId]);

@ -7,6 +7,7 @@ import {
} from 'lucide-react'; } from 'lucide-react';
import { TabLink } from './TabLink'; import { TabLink } from './TabLink';
import LoginPopup from './AuthenticationFlow/LoginPopup.astro'; import LoginPopup from './AuthenticationFlow/LoginPopup.astro';
import { ScheduleButton } from './Schedule/ScheduleButton';
import ProgressHelpPopup from './ProgressHelpPopup.astro'; import ProgressHelpPopup from './ProgressHelpPopup.astro';
import { MarkFavorite } from './FeaturedItems/MarkFavorite'; import { MarkFavorite } from './FeaturedItems/MarkFavorite';
import { type RoadmapFrontmatter } from '../lib/roadmap'; import { type RoadmapFrontmatter } from '../lib/roadmap';
@ -45,8 +46,6 @@ const roadmapTitle =
roadmapId === 'devops' roadmapId === 'devops'
? 'DevOps' ? 'DevOps'
: `${roadmapId.charAt(0).toUpperCase()}${roadmapId.slice(1)}`; : `${roadmapId.charAt(0).toUpperCase()}${roadmapId.slice(1)}`;
const hasTnsBanner = !!tnsBannerLink;
--- ---
<LoginPopup /> <LoginPopup />
@ -95,6 +94,12 @@ const hasTnsBanner = !!tnsBannerLink;
className='relative top-px mr-2 text-gray-500 !opacity-100 hover:text-gray-600 focus:outline-0 [&>svg]:h-4 [&>svg]:w-4 [&>svg]:stroke-gray-400 [&>svg]:stroke-[0.4] hover:[&>svg]:stroke-gray-600 sm:[&>svg]:h-4 sm:[&>svg]:w-4' className='relative top-px mr-2 text-gray-500 !opacity-100 hover:text-gray-600 focus:outline-0 [&>svg]:h-4 [&>svg]:w-4 [&>svg]:stroke-gray-400 [&>svg]:stroke-[0.4] hover:[&>svg]:stroke-gray-600 sm:[&>svg]:h-4 sm:[&>svg]:w-4'
client:only='react' client:only='react'
/> />
<ScheduleButton
resourceId={roadmapId}
resourceType='roadmap'
resourceTitle={title}
client:load
/>
<DownloadRoadmapButton roadmapId={roadmapId} client:idle /> <DownloadRoadmapButton roadmapId={roadmapId} client:idle />
<ShareRoadmapButton <ShareRoadmapButton
description={description} description={description}
@ -103,11 +108,11 @@ const hasTnsBanner = !!tnsBannerLink;
/> />
</div> </div>
</div> </div>
<div class='mb-5 mt-5 sm:mb-8 sm:mt-5'> <div class='mb-5 mt-5 sm:mb-12 sm:mt-12'>
<h1 class='mb-0.5 text-2xl font-bold sm:mb-2 sm:text-3xl'> <h1 class='mb-0.5 text-2xl font-bold sm:mb-3.5 sm:text-5xl'>
{title} {title}
</h1> </h1>
<p class='text-balance text-sm text-gray-500 sm:text-base'> <p class='text-balance text-sm text-gray-500 sm:text-lg'>
{description} {description}
</p> </p>
</div> </div>
@ -135,6 +140,7 @@ const hasTnsBanner = !!tnsBannerLink;
text='Suggest Changes' text='Suggest Changes'
isExternal={true} isExternal={true}
hideTextOnMobile={true} hideTextOnMobile={true}
isActive={false}
/> />
</div> </div>
</div> </div>

@ -0,0 +1,40 @@
import { Calendar } from 'lucide-react';
import { cn } from '../../lib/classname';
import type { ResourceType } from '../../lib/resource-progress';
import { ScheduleEventModal } from './ScheduleEventModal';
import { useState } from 'react';
type ScheduleButtonProps = {
resourceId: string;
resourceType: ResourceType;
resourceTitle: string;
};
export function ScheduleButton(props: ScheduleButtonProps) {
const { resourceId, resourceType, resourceTitle } = props;
const [isModalOpen, setIsModalOpen] = useState(false);
return (
<>
{isModalOpen && (
<ScheduleEventModal
onClose={() => {
setIsModalOpen(false);
}}
roadmapId={resourceId}
/>
)}
<button
className="inline-flex items-center justify-center gap-2 rounded-md bg-gray-200 px-3 py-1.5 text-xs font-medium hover:bg-gray-300 sm:text-sm"
onClick={() => {
setIsModalOpen(true);
}}
>
<Calendar className="h-4 w-4 flex-shrink-0" />
<span className="hidden sm:inline">Schedule Learning Time</span>
</button>
</>
);
}

@ -0,0 +1,342 @@
import { DateTime } from 'luxon';
import { Modal } from '../Modal';
import { ChevronRight, type LucideIcon, X } from 'lucide-react';
import { useState, type ReactNode, type SVGProps } from 'react';
import { GoogleCalendarIcon } from '../ReactIcons/GoogleCalendarIcon';
import { OutlookCalendarIcon } from '../ReactIcons/OutlookCalendarIcon';
import { AppleCalendarIcon } from '../ReactIcons/AppleCalendarIcon';
import { FileIcon } from '../ReactIcons/FileIcon';
function generateRoadmapIcsFile(
title: string,
details: string,
location: string,
startDate: Date,
endDate: Date,
) {
const ics = `
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:${title}
DESCRIPTION:${details}
LOCATION:${location}
DTSTART:${startDate.toISOString().replace(/-|:|\.\d+/g, '')}
DTEND:${endDate.toISOString().replace(/-|:|\.\d+/g, '')}
RRULE:FREQ=DAILY
BEGIN:VALARM
TRIGGER:-PT30M
ACTION:DISPLAY
DESCRIPTION:Reminder: ${title} starts in 30 minutes
END:VALARM
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder: ${title} starts in 15 minutes
END:VALARM
END:VEVENT
END:VCALENDAR
`.trim();
return new Blob([ics], { type: 'text/calendar' });
}
type ScheduleEventModalProps = {
roadmapId: string;
onClose: () => void;
};
export function ScheduleEventModal(props: ScheduleEventModalProps) {
const { onClose, roadmapId } = props;
let roadmapTitle = '';
if (roadmapId === 'devops') {
roadmapTitle = 'DevOps';
} else if (roadmapId === 'ios') {
roadmapTitle = 'iOS';
} else if (roadmapId === 'postgresql-dba') {
roadmapTitle = 'PostgreSQL';
} else if (roadmapId === 'devrel') {
roadmapTitle = 'DevRel';
} else if (roadmapId === 'qa') {
roadmapTitle = 'QA';
} else if (roadmapId === 'api-design') {
roadmapTitle = 'API Design';
} else if (roadmapId === 'ai-data-scientist') {
roadmapTitle = 'AI/Data Scientist';
} else if (roadmapId === 'technical-writer') {
} else if (roadmapId === 'software-architect') {
roadmapTitle = 'Software Architecture';
} else if (roadmapId === 'ai-engineer') {
roadmapTitle = 'AI Engineer';
} else {
roadmapTitle = roadmapId
.split('-')
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ');
}
const [selectedCalendar, setSelectedCalendar] = useState<
'apple' | 'outlook' | null
>(null);
const [isLoading, setIsLoading] = useState(false);
const location = `https://roadmap.sh/${roadmapId}`;
const title = `Learn from ${roadmapTitle} Roadmap - roadmap.sh`;
const details = `
Learn from the ${roadmapTitle} roadmap on roadmap.sh
Visit the roadmap at https://roadmap.sh/${roadmapId}
`.trim();
const handleDownloadICS = () => {
setIsLoading(true);
const calendarTitle = selectedCalendar || 'ICS';
triggerScheduleEvent(
`${calendarTitle.charAt(0).toUpperCase()}${calendarTitle.slice(1)}`,
);
const startDate = DateTime.now().minus({
minutes: DateTime.now().minute % 30,
});
const endDate = startDate.plus({ hours: 1 });
const blob = generateRoadmapIcsFile(
title,
details,
location,
startDate.toJSDate(),
endDate.toJSDate(),
);
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${roadmapTitle}.ics`;
a.click();
setIsLoading(false);
URL.revokeObjectURL(url);
};
const triggerScheduleEvent = function (type: string) {
window.fireEvent({
category: 'ScheduleTimeClick',
action: `Schedule Learning Time`,
label: `Schedule Learning Time / ${type}`,
value: `Schedule Learning Time / ${type}`,
});
};
const handleGoogleCalendar = () => {
setIsLoading(true);
triggerScheduleEvent('Google');
const baseURL =
'https://calendar.google.com/calendar/render?action=TEMPLATE';
const startDate = DateTime.now().minus({
minutes: DateTime.now().minute % 30,
});
const endDate = startDate.plus({ hours: 1 });
const eventDetails = new URLSearchParams({
text: title,
dates: `${startDate.toISO().replace(/-|:|\.\d+/g, '')}/${endDate.toISO().replace(/-|:|\.\d+/g, '')}`,
details,
location,
recur: 'RRULE:FREQ=DAILY',
}).toString();
setIsLoading(false);
window.open(`${baseURL}&${eventDetails}`, '_blank');
};
const stepDetails = {
apple: {
title: 'Add to Apple Calendar',
steps: [
'Download the iCS File',
'Open the downloaded file, and it will automatically open your default calendar app.',
<>
If Apple Calendar is not your default calendar app, open Apple
Calendar, go to <strong>File &gt; Import</strong>, and choose the
downloaded file.
</>,
],
},
outlook: {
title: 'Add to Outlook Calendar',
steps: [
'Download the iCS File',
<>
Open Outlook and go to{' '}
<strong>File &gt; Open & Export &gt; Import/Export</strong>.
</>,
<>
In the Import and Export Wizard select{' '}
<strong>Import an iCalendar (.ics) or vCalendar file (.vcs)</strong>.
You can then choose to keep it a separate calendar or make it a new
calendar.
</>,
],
},
};
return (
<Modal
onClose={onClose}
bodyClassName="bg-transparent shadow-none"
wrapperClassName="h-auto max-w-lg"
overlayClassName="items-start md:items-center"
>
<div className="rounded-xl bg-white px-3">
<button
className="absolute right-4 top-4 text-gray-400 hover:text-black"
onClick={onClose}
>
<X className="h-4 w-4 stroke-[2.5]" />
</button>
<div className="flex flex-col items-center p-4 py-6 text-center">
{selectedCalendar && (
<CalendarSteps
title={stepDetails[selectedCalendar].title}
steps={stepDetails[selectedCalendar].steps}
onDownloadICS={handleDownloadICS}
onCancel={() => {
setSelectedCalendar(null);
}}
isLoading={isLoading}
/>
)}
{!selectedCalendar && (
<>
<h2 className="text-3xl font-semibold">Schedule Learning Time</h2>
<p className="mt-1.5 text-balance text-base text-gray-600">
Block some time on your calendar to stay consistent
</p>
<div className="mt-6 flex w-full flex-col gap-1">
<CalendarButton
icon={GoogleCalendarIcon}
label="Google Calendar"
onClick={handleGoogleCalendar}
isLoading={isLoading}
/>
<CalendarButton
icon={AppleCalendarIcon}
label="Apple Calendar"
onClick={() => {
setSelectedCalendar('apple');
}}
/>
<CalendarButton
icon={OutlookCalendarIcon}
label="Outlook Calendar"
onClick={() => {
setSelectedCalendar('outlook');
}}
/>
<div className="mx-auto my-4 text-base text-gray-600">
or download the iCS file and import it to your calendar app
</div>
<CalendarButton
icon={FileIcon}
label="Download File (.ics)"
onClick={handleDownloadICS}
/>
</div>
</>
)}
</div>
</div>
</Modal>
);
}
type SVGIcon = (props: SVGProps<SVGSVGElement>) => ReactNode;
type CalendarButtonProps = {
icon: LucideIcon | SVGIcon;
label: string;
isLoading?: boolean;
onClick: () => void;
};
function CalendarButton(props: CalendarButtonProps) {
const { icon: Icon, label, isLoading, onClick } = props;
return (
<button
className="flex w-full items-center justify-between gap-2 rounded-lg border px-3 py-3 leading-none hover:bg-gray-100 disabled:opacity-60 data-[loading='true']:cursor-progress"
data-loading={isLoading}
disabled={isLoading}
onClick={onClick}
>
<div className="flex items-center gap-2">
<Icon className="h-5 w-5 shrink-0 stroke-[2.5]" />
{label}
</div>
<ChevronRight className="h-4 w-4 stroke-[2.5]" />
</button>
);
}
type CalendarStepsProps = {
title: string;
steps: (string | ReactNode)[];
onDownloadICS: () => void;
isLoading?: boolean;
onCancel: () => void;
};
export function CalendarSteps(props: CalendarStepsProps) {
const { steps, onDownloadICS, onCancel, title, isLoading } = props;
return (
<div className="flex flex-col">
<h2 className="text-3xl font-semibold">{title}</h2>
<div className="mt-6 flex flex-col gap-2">
{steps.map((step, index) => (
<div key={index} className="flex items-baseline gap-3">
<div className="relative top-px flex h-6 w-6 shrink-0 items-center justify-center rounded-full bg-gray-200 text-sm text-gray-600">
{index + 1}
</div>
<div className="flex flex-col gap-1">
<p className="text-left text-base text-gray-800">{step}</p>
</div>
</div>
))}
</div>
<div className="mt-6 flex gap-2">
<button
className="flex-1 rounded-md border border-gray-300 py-2 text-sm text-gray-600 hover:bg-gray-100 disabled:opacity-60 data-[loading='true']:cursor-progress"
onClick={onCancel}
disabled={isLoading}
>
Go back
</button>
<button
className="flex-1 rounded-md bg-black py-2 text-sm text-white hover:bg-blue-700 disabled:opacity-60 data-[loading='true']:cursor-progress"
onClick={onDownloadICS}
disabled={isLoading}
data-loading={isLoading}
>
Download
</button>
</div>
</div>
);
}

@ -33,8 +33,6 @@ export function ShareRoadmapButton(props: ShareRoadmapButtonProps) {
setIsDropdownOpen(false); setIsDropdownOpen(false);
}); });
const embedHtml = `<iframe src="https://roadmap.sh/r/embed?id=${roadmapId}" width="100%" height="500px" frameBorder="0"\n></iframe>`;
return ( return (
<div className="relative" ref={containerRef}> <div className="relative" ref={containerRef}>
{isEmbedModalOpen && ( {isEmbedModalOpen && (

@ -1,4 +1,4 @@
import { useState, type CSSProperties } from 'react'; import { useState } from 'react';
import type { HeadingGroupType } from '../../lib/guide'; import type { HeadingGroupType } from '../../lib/guide';
import { ChevronDown } from 'lucide-react'; import { ChevronDown } from 'lucide-react';
import { cn } from '../../lib/classname'; import { cn } from '../../lib/classname';
@ -23,7 +23,7 @@ export function TableOfContent(props: TableOfContentProps) {
return ( return (
<div <div
className={cn( className={cn(
'relative min-w-[250px] px-5 pt-0 max-lg:min-w-full max-lg:max-w-full max-lg:border-none max-lg:px-0 lg:pt-10', 'relative min-w-[250px] px-5 pt-0 max-lg:min-w-full max-lg:max-w-full max-lg:border-none max-lg:px-0 lg:pt-5',
{ {
'top-0 lg:!sticky': totalRows <= 20, 'top-0 lg:!sticky': totalRows <= 20,
}, },
@ -46,7 +46,7 @@ export function TableOfContent(props: TableOfContentProps) {
<ol <ol
className={cn( className={cn(
'mt-0.5 max-lg:absolute max-lg:top-full max-lg:mt-0 max-lg:w-full space-y-0 max-lg:bg-white max-lg:shadow', 'mt-0.5 space-y-0 max-lg:absolute max-lg:top-full max-lg:mt-0 max-lg:w-full max-lg:bg-white max-lg:shadow',
!isOpen && 'hidden lg:block', !isOpen && 'hidden lg:block',
isOpen && 'block', isOpen && 'block',
)} )}
@ -68,7 +68,7 @@ export function TableOfContent(props: TableOfContentProps) {
</a> </a>
{heading.children.length > 0 && ( {heading.children.length > 0 && (
<ol className="my-0 ml-4 mt-1 max-lg:ml-0 max-lg:mt-0 max-lg:list-none space-y-0"> <ol className="my-0 ml-4 mt-1 space-y-0 max-lg:ml-0 max-lg:mt-0 max-lg:list-none">
{heading.children.map((children) => { {heading.children.map((children) => {
return ( return (
<li key={children.slug}> <li key={children.slug}>

@ -8,8 +8,6 @@ import { InfoIcon } from './ReactIcons/InfoIcon';
import { Spinner } from './ReactIcons/Spinner'; import { Spinner } from './ReactIcons/Spinner';
import { deleteUrlParam, getUrlParams, setUrlParams } from '../lib/browser'; import { deleteUrlParam, getUrlParams, setUrlParams } from '../lib/browser';
export interface Props {}
const messageCodes: Record<string, string> = { const messageCodes: Record<string, string> = {
tl: 'Successfully left the team', tl: 'Successfully left the team',
fs: 'Friend request sent', fs: 'Friend request sent',

@ -340,7 +340,7 @@ export function TopicDetail(props: TopicDetailProps) {
); );
return ( return (
<div className={'relative z-[90]'}> <div className={'relative z-[92]'}>
<div <div
ref={topicRef} ref={topicRef}
tabIndex={0} tabIndex={0}

@ -186,9 +186,11 @@ export function UpdatePublicProfileForm() {
}, []); }, []);
const publicCustomRoadmaps = profileRoadmaps.filter( const publicCustomRoadmaps = profileRoadmaps.filter(
(r) => r.isCustomResource, (r) => r.isCustomResource && r.id && r.title,
);
const publicRoadmaps = profileRoadmaps.filter(
(r) => !r.isCustomResource && r.id && r.title,
); );
const publicRoadmaps = profileRoadmaps.filter((r) => !r.isCustomResource);
return ( return (
<div> <div>
@ -622,7 +624,7 @@ export function UpdatePublicProfileForm() {
)} )}
</button> </button>
<a <a
className='flex shrink-0 flex-row items-center gap-1 rounded-lg border border-black py-1.5 pl-2.5 pr-3.5 text-xs uppercase text-black transition-colors hover:bg-black hover:text-white' className="flex shrink-0 flex-row items-center gap-1 rounded-lg border border-black py-1.5 pl-2.5 pr-3.5 text-xs uppercase text-black transition-colors hover:bg-black hover:text-white"
href={publicProfileUrl} href={publicProfileUrl}
target="_blank" target="_blank"
> >

@ -16,3 +16,4 @@ Optimized images load faster in your browser and consume less data.
- [Cloudinary - Image Analysis Tool](https://webspeedtest.cloudinary.com) - [Cloudinary - Image Analysis Tool](https://webspeedtest.cloudinary.com)
- [ImageEngine - Image Webpage Loading Test](https://demo.imgeng.in) - [ImageEngine - Image Webpage Loading Test](https://demo.imgeng.in)
- [SVGOMG - Optimize SVG vector graphics files](https://jakearchibald.github.io/svgomg/) - [SVGOMG - Optimize SVG vector graphics files](https://jakearchibald.github.io/svgomg/)
- [Minipic - Convert Images Super Fast](https://minipic.app/)

@ -0,0 +1,22 @@
---
title: 'AI Roadmaps Improved, Schedule Learning Time'
description: 'AI Roadmaps are now deeper and we have added a new feature to schedule learning time'
images:
"AI Roadmaps Depth": "https://assets.roadmap.sh/guest/3-level-roadmaps-lotx1.png"
"Schedule Learning Time": "https://assets.roadmap.sh/guest/schedule-learning-time.png"
"Schedule Learning Time Modal": "https://assets.roadmap.sh/guest/schedule-learning-time-2.png"
seo:
title: 'AI Roadmaps Improved, Schedule Learning Time'
description: ''
date: 2024-11-18
---
We have improved our AI roadmaps, added a way to schedule learning time, and made some site wide bug fixes and improvements. Here are the details:
- [AI generated roadmaps](https://roadmap.sh/ai) are now 3 levels deep giving you more detailed information. We have also improved the quality of the generated roadmaps.
- Schedule learning time on your calendar for any roadmap. Just click on the "Schedule Learning Time" button and select the time slot you want to block.
- You can now dismiss the sticky roadmap progress indicator at the bottom of any roadmap.
- We have added some new Project Ideas to our [Frontend Roadmap](/frontend/projects).
- Bug fixes and performance improvements
We have a new Engineering Manager Roadmap coming this week. Stay tuned!

@ -0,0 +1,22 @@
---
title: 'DevOps Project Ideas, Team Dashboard, Redis Content'
description: 'New Project Ideas for DevOps, Team Dashboard, Redis Content'
images:
"DevOps Project Ideas": "https://assets.roadmap.sh/guest/devops-project-ideas.png"
"Redis Resources": "https://assets.roadmap.sh/guest/redis-resources.png"
"Team Dashboard": "https://assets.roadmap.sh/guest/team-dashboard.png"
seo:
title: 'DevOps Project Ideas, Team Dashboard, Redis Content'
description: ''
date: 2024-10-16
---
We have added 21 new project ideas to our DevOps roadmap, added content to Redis roadmap and introduced a new team dashboard for teams
- Practice your skills with [21 newly added DevOps Project Ideas](https://roadmap.sh/devops)
- We have a new [Dashboard for teams](https://roadmap.sh/teams) to track their team activity.
- [Redis roadmap](https://roadmap.sh/redis) now comes with learning resources.
- Watch us [interview Bruno Simon](https://www.youtube.com/watch?v=IQK9T05BsOw) about his journey as a creative developer.
- Bug fixes and performance improvements
ML Engineer roadmap and team dashboards are coming up next. Stay tuned!

@ -7,6 +7,15 @@ seo:
title: '8 In-Demand Backend Developer Skills to Master' title: '8 In-Demand Backend Developer Skills to Master'
description: 'Learn what the essential backend developer skills are that you should learn and master to advance in your career.' description: 'Learn what the essential backend developer skills are that you should learn and master to advance in your career.'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-developer-skills-ece68.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/backend-developer-skills-ece68.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-02-27 date: 2024-02-27

@ -7,6 +7,15 @@ seo:
title: '25 Essential Backend Development Tools for @currentYear@' title: '25 Essential Backend Development Tools for @currentYear@'
description: 'Elevate your coding with backend developer tools that bring efficiency, scalability, and innovation to your projects. Improve your development process today!' description: 'Elevate your coding with backend developer tools that bring efficiency, scalability, and innovation to your projects. Improve your development process today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-development-tools-ou6el.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/backend-development-tools-ou6el.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-03-19 date: 2024-03-19

@ -7,6 +7,15 @@ seo:
title: 'Top 7 Backend Frameworks to Use in 2024: Pro Advice' title: 'Top 7 Backend Frameworks to Use in 2024: Pro Advice'
description: 'Get expert advice on backend frameworks for 2024. Learn about the top 7 frameworks that can elevate your development process.' description: 'Get expert advice on backend frameworks for 2024. Learn about the top 7 frameworks that can elevate your development process.'
ogImageUrl: 'https://assets.roadmap.sh/guest/top-backend-frameworks-jfpux.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/top-backend-frameworks-jfpux.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-09-27 date: 2024-09-27

@ -0,0 +1,281 @@
---
title: "Backend Developer Job Description [2024 Template]"
description: 'Learn how to write the perfect backend developer job description and get my best tips on how to recruit backend dev talent effectively.'
authorId: ekene
excludedBySlug: '/backend/job-description'
seo:
title: "Backend Developer Job Description [2024 Template]"
description: ''
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-job-description-nn3ja.png'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
isNew: true
type: 'textual'
date: 2024-11-12
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Backend developer job description example and template.](https://assets.roadmap.sh/guest/backend-job-description-nn3ja.png)
Hiring the right candidate for a [backend engineering](https://roadmap.sh/backend) role requires identifying individuals who possess the necessary technical and soft skills and align with your organization's values. Selecting the right candidate can be challenging with a high volume of applications.
Knowing what to prioritize when evaluating candidates is necessary for choosing the best fit for this role. In this guide, I’ll outline the key skills and qualities I focus on as a hiring manager when hiring a backend engineer.
Here is a summary of the backend developer job description:
- Design, develop, and maintain highly performant, reliable, scalable, and secure backend systems and server side logic.
- Oversee projects from conception to deployment, ensuring smooth execution and delivery to create a great and on-brand user experience.
- Maintain and optimize the backend infrastructure to meet evolving project needs.
- Collaborate with front-end developers to integrate user-facing elements with server-side logic.
- Write clean, standardized, maintainable, testable, and reusable backend code to solve business and technical problems.
Let’s look at the backend engineer role in more detail.
## Backend engineer job description template
The job description of a backend developer differs depending on the team, project, or organization. Based on my experience as a backend engineer recruiter, here is a sample job description template that outlines the key skills and qualifications hiring managers look for in potential candidates:
**Job title: Backend Engineer**
**Company:** [Company Name]
**Location:** [Location, region, hybrid, or remote]
**Job Type:** [Full-time, Part-time, or Contract].
**About us**
[Give a brief introduction of your company and what you do].
**Job Description**
**[Company Name]** is looking for experienced backend engineers who are passionate about building scalable, efficient, and reliable server-side applications. This role requires strong proficiency in server-side languages (such as Python, Java, or Node.js), databases (SQL, NoSQL), and API development. The ideal candidate will have a solid understanding of backend architecture, security best practices, and cloud technologies to support modern applications.
Collaboration with frontend developers, designers, product managers, and other teams is key to this role, so strong communication skills are important. We are looking for strong problem solvers who can apply their engineering skills across different platforms and environments to deliver the best possible experience for customers and internal users.
**Responsibilities**
- Take ownership of the design, architecture, development, deployment and operations of microservices you will develop, using DevOps practices, pair programming and other cutting-edge methodologies.
- Promote a highly collaborative environment with other product team members.
- Participate in regular technical forums to share knowledge with other engineers.
- Be an active member of cross-functional agile teams collaborating with product owners, frontend developers, designers, and business intelligence teams.
- Build the server side logic of our web application.
**Requirements**
- Solid backend experience with microservice and distributed event-driven architectural patterns
- Degree in computer science or any related discipline.
- Professional experience with one backend programming language, e.g., Python, C#, Java
- Experience working with docker and containerization technologies such as Kubernetes.
- A deep understanding of continuous integration and continuous delivery.
- Practical experience in applying advanced design concepts such as Domain Driven Design (DDD), Object Oriented Programming (OOP).
- Strong communication and collaboration skills.
**What we offer**
[Itemize the different perks you offer, for example, training allowance, competitive salary, home office setup, etc.].
**How to apply**
If this role excites you, please submit your resume and cover letter to **[contact email or link to** **job** **portal]**.
You have seen what a sample backend engineer job advert looks like; now, let’s have a detailed look at a backend developer’s responsibilities.
## Key backend developer responsibilities
The roles and responsibilities of a backend engineer could vary depending on the project requirements, company size, or team structure. However, there are typical roles and responsibilities that cut across board. They include:
- Server-side development
- Application Programming Interface (API) development
- Database administration and management
- Performance optimization
- Integration of third-party services
- Testing
- Documentation
- Collaboration
![Back-end engineer responsibilities](https://assets.roadmap.sh/guest/backend-engineer-responsibilities.jpg)
Typical projects that backend developers work on include:
- RESTful APIs that perform CRUD operations.
- Building web scraping and data processing services.
- Building image processing services.
- Designing and implementing content delivery networks (CDNs).
- Modeling and designing database systems.
Let’s look at their individual responsibilities in detail:
### Server-side development
This is one of the core responsibilities of a backend developer. It involves writing server-side web application logic to handle requests from the frontend, communicate with database systems, and handle an application’s business and backend logic.
### API development
A backend developer designs, implements, and maintains APIs for communicating between different services or parts of an application and with external systems. This involves creating endpoints, responding to requests, and ensuring API security. [Swagger](https://swagger.io/) is a standard tool used by backend engineers to design and document APIs.
### Database administration and management
Data plays a central role in software and application development. A backend developer decides how and where to store these data. Databases are one of the most used data storage solutions, and a backend developer designs and maintains them for efficient data management. The tasks here include deciding which databases to use, either [SQL](https://roadmap.sh/sql) or NoSQL databases, also known as document databases, choosing the right Object Relation Mapper (ORM) for mapping objects to a database, writing efficient queries, optimizing database performance, and ensuring data security.
### Performance optimization
Backend engineers continually look for ways to optimize performance. They identify performance bottlenecks such as slow database queries, poor code quality, and high application latency and work towards resolving them. This involves refactoring to ensure high-quality reusable code, updating dependencies, redesigning the database schema, etc.
### Integration of third-party services
Some applications integrate with third-party web services or APIs to perform specific tasks. Some of these third-party services include payment gateways, cloud services such as Google Cloud and [Amazon Web Services](https://roadmap.sh/aws), and user authentication services, such as Auth0. Backend engineers integrate these external services into an application.
### Testing and bug fixing
Backend engineers write unit, integration, and end-to-end tests to ensure system reliability. These tests help to keep the system *up* and bug-free during continuous development. Troubleshooting and fixing are also part of a backend engineer’s primary responsibility.
### Documentation
A backend developer writes and maintains technical specifications, API documentation, and guides for existing and new team members. These documents are forms of knowledge transfer and can be referenced when needed.
### Collaboration
Backend engineers collaborate with other team members, including frontend developers, UI/UX designers, project managers, product managers, etc., to achieve a common goal.
## Skills and qualifications needed to excel as a backend engineer
A backend engineer needs a combination of soft and technical skills to excel. Some of the skills you should look out for when hiring a backend engineer include:
- Knowledge of at least one backend programming language
- In-depth understanding of databases and caching
- Knowledge of Application Programming Interfaces (APIs)
- Basic knowledge of web servers
- Knowledge of design patterns
- Familiarity with version control systems
- Understanding of security best practices
- Collaboration and communication skills
### Knowledge of at least one backend programming language
A [backend developer](https://roadmap.sh/backend/developer-skills) should have an in-depth knowledge of at least one backend programming language, such as [Java](https://roadmap.sh/java), C#, [Python](https://roadmap.sh/python), [JavaScript (Node.js)](https://roadmap.sh/nodejs), etc. It is also beneficial for a backend engineer to be familiar with some backend frameworks such as Django, [ASP.NET](https://roadmap.sh/aspnet-core), Ruby on Rails, [Sprint Boot](https://roadmap.sh/spring-boot), etc.
![Backend languages](https://assets.roadmap.sh/guest/backend-languages.png)
### In-depth understanding of databases and caching
A backend developer should know how databases and caching work in robust web applications. Many types of databases are used in backend systems, including relational and document databases. Examples of Database Management Systems used in backend systems include Microsoft SQL Server, PostgreSQL, MySQL, MongoDB, etc.
[Caching](https://roadmap.sh/guides/http-caching) is a process of temporarily storing data that is requested regularly. It helps avoid recurrent unnecessary database queries. Redis is an example of an in-memory data store used for caching.
### Knowledge of APIs
APIs are used to communicate between different systems. These systems could be microservices, frontend and backend systems, or third-party systems. A backend developer is expected to know how to [design APIs](https://roadmap.sh/api-design) and make them available to consumers.
### Basic knowledge of web servers
A backend engineer should have a basic understanding of web server technologies. Web servers respond to client requests. An example of a web server is Nginx. During the interview process, you should ensure that the candidate understands how web servers work and also know how to configure them.
### Knowledge of design patterns
[Design patterns](https://roadmap.sh/guides/design-patterns-for-humans) are reusable code libraries or solutions to common problems in designing and structuring software components. A backend developer should know some of these design patterns. The common types of design patterns are:
- Creational patterns
- Structural patterns
- Behavioral patterns
- Architectural patterns
### Familiarity with version control systems
Version control systems help track and maintain a history of code changes made to an application. With a proper version control system, multiple developers can work on a codebase simultaneously. Through version control, they collaborate on a code repository.
A backend engineer is expected to have proficient knowledge of version control. Git is one of the most common version control systems today. There are many code repositories, including Bitbucket, GitHub, and GitLab.
### Understanding of security best practices
A backend developer should have a basic understanding of standard security practices and implement robust security measures to protect sensitive data and prevent unauthorized access to data. Common vulnerabilities include SQL injection, cross-site scripting, and cross-site request forgery. About every large cloud provider has features that provide security measures, including AWS IAM, Azure Active Directory, and Google Cloud Identity.
### Collaboration and communication skills
A backend developer typically collaborates with other engineers, managers, and testers across multiple teams to ensure consistency and improve user experience. During the interview process, you should pay close attention to the candidate's communication skills because a backend developer should be able to clearly communicate problems and their approach to a solution. Ask the candidate questions that border on collaboration and see how they respond.
## Additional skills that will make a candidate stand out as a backend developer
The role of a backend developer is very competitive. However, there are some skills that a backend developer should possess to make them stand out. Some of these skills include:
- Continuous learning
- Problem-solving skills
- Time management skills
- DevOps skills
### Continuous learning
The field of [backend engineering](https://roadmap.sh/backend) is continually expanding, so be sure to look out for candidates who enjoy learning. Find out if they stay up to date with the latest technologies and industry trends and how often they try out new things. In addition to acquiring new skills, you should also find out if they are willing to share knowledge and help in team development.
### Problem-solving skills
While it’s essential to use problem-solving tools, intrinsic problem-solving skills are equally important for a backend developer. Your potential hire should have an analytical mindset and be able to break complex problems into smaller chunks that can be solved incrementally.
### Time management skills
Engineers sometimes have chaotic workloads, which often lead to burnout and affect their performance. During the interview, ask the candidate about their time management practices and how they manage heavy workloads. Effective time management and prioritizing can make a candidate stand out as an engineer and avoid burnout.
### DevOps skills
Knowledge of [docker](https://roadmap.sh/docker) and container orchestration technologies, such as [Kubernetes,](https://roadmap.sh/kubernetes) is another skill that makes a backend developer stand out. A firm understanding of continuous integration and continuous deployment (CI/CD) setups is a plus. Consider a candidate with this basic DevOps skill for the role.
## Common backend engineer job interview questions
This curated list of the common backend developer job interview questions should help your search:
**What are the different HTTP methods?**
Here, the candidate should be able to explain the different HTTP methods, which are GET, POST, PUT, and DELETE.
**Describe what you understand** **about continuous integration and continuous delivery**
The candidate is expected to explain what CI/CD means in clear terms.
**What are databases****,** **and what are the different types of databases?**
The candidate should know what a database is and what relational and document databases are, along with examples.
**What is object****-****oriented programming?**
The candidate should be able to explain OOP, a process of designing software around objects.
**Explain the difference between synchronous and asynchronous programming**
Here, you should look for the candidate’s understanding of sync and async processes. Synchronous programming executes tasks sequentially, and each task must be completed before the next start. Asynchronous programming allows tasks to run independently without waiting for each other to complete. It uses promises or async/await to handle task completion.
**What is the purpose of caching in a backend system****,** **and what caching strategies have you used?**
The candidate should be able to explain what caching means and also the different caching strategies, which include:
- Full-page caching
- Data caching
- Result caching
**What are some common security vulnerabilities in web applications****,** **and how will you mitigate them?**
The candidate should be able to explain common security vulnerabilities, such as cross-site scripting, SQL injection, cross-site request forgery (CSRF), and so on. You can mitigate them by performing proper input validation and secure session management.
## Effective interview strategies and assessments
Evaluating backend engineers requires targeted assessments that reveal technical skills and problem-solving abilities. Here are practical techniques to help you identify qualified candidates:
- **Code review exercises:** Provide a sample code snippet on any backend programming languages with issues or inefficiencies. Ask candidates to identify problems, propose improvements, and explain their reasoning. This exercise tests attention to detail and understanding of best practices.
- **Live coding tasks:** Use short coding challenges focused on common backend development tasks like database queries or API calls. Live coding reveals how candidates approach problems under pressure and handle real-time debugging.
- **System design discussions:** Present a simple system design prompt, like designing a scalable file storage system. Listen for clarity in explaining their thought process, handling of trade-offs, and understanding of backend fundamentals.
- **Behavioral questions on past projects:** Ask about specific backend challenges they’ve faced and how they solved them. Look for evidence of adaptability, collaboration, and knowledge depth, such as experiences with database optimization or API integration.
- **Assess communication skills:** Observe how they explain technical concepts. Strong candidates communicate clearly and adapt explanations for both technical and non-technical audiences.
These methods offer a well-rounded view of a candidate’s backend development skills and experience.
## What’s next?
Backend engineers play a vital role in software engineering, and great ones are in high demand. Now that you have a clear understanding of what to look for, it’s time to build a hiring process that identifies candidates with the right technical skills and collaborative mindset.
The foundation of your tech stack depends on a strong backend. You can find potential hires in the roadmap.sh [community](https://roadmap.sh/discord) of beginner and experienced backend developers.
roadmap.sh also offers valuable resources to help you and your team stay ahead by helping you to:
- Create a personalized or [team-based roadmap](https://roadmap.sh/teams).
- Become part of a supportive community by [signing up on](https://roadmap.sh/signup) [roadmap.sh](http://roadmap.sh) [platform](https://roadmap.sh/signup).

@ -7,6 +7,15 @@ seo:
title: 'The 5 Best Backend Development Languages to Master (@currentYear@)' title: 'The 5 Best Backend Development Languages to Master (@currentYear@)'
description: 'Discover the best backend development languages to learn right now for career development, with practical tips from an experienced developer.' description: 'Discover the best backend development languages to learn right now for career development, with practical tips from an experienced developer.'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-languages-2x930.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/backend-languages-2x930.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-01-18 date: 2024-01-18

@ -7,6 +7,15 @@ seo:
title: '20 Backend Project Ideas to take you from Beginner to Pro' title: '20 Backend Project Ideas to take you from Beginner to Pro'
description: 'Seeking backend projects to enhance your skills? Explore our top 20 project ideas, from simple apps to complex systems. Start building today!' description: 'Seeking backend projects to enhance your skills? Explore our top 20 project ideas, from simple apps to complex systems. Start building today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-project-ideas-zxutw.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/backend-project-ideas-zxutw.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-05-09 date: 2024-05-09

@ -7,6 +7,15 @@ seo:
title: 'Top 10+ Backend Technologies to Use in @currentYear@: Expert Advice' title: 'Top 10+ Backend Technologies to Use in @currentYear@: Expert Advice'
description: 'Looking for the best backend technologies in @currentYear@? Check out our expert list of top tools for developers.' description: 'Looking for the best backend technologies in @currentYear@? Check out our expert list of top tools for developers.'
ogImageUrl: 'https://assets.roadmap.sh/guest/backend-technologies-pnof4.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/backend-technologies-pnof4.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"50 Popular Backend Developer Interview Questions and Answers": "/questions/backend"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-08-27 date: 2024-08-27

@ -6,7 +6,6 @@ seo:
title: 'Consistency Patterns - roadmap.sh' title: 'Consistency Patterns - roadmap.sh'
description: 'Everything you need to know about Week, Strong and Eventual Consistency' description: 'Everything you need to know about Week, Strong and Eventual Consistency'
isNew: false isNew: false
canonicalUrl: 'https://cs.fyi/guide/consistency-patterns-week-strong-eventual/'
type: 'textual' type: 'textual'
date: 2023-01-18 date: 2023-01-18
sitemap: sitemap:

@ -0,0 +1,210 @@
---
title: 'What is DevOps Automation? 8 Best Practices & Advice'
description: 'Streamline your DevOps pipeline! Explore what DevOps automation is and the 8 best practices for seamless delivery.'
authorId: fernando
excludedBySlug: '/devops/automation'
seo:
title: 'What is DevOps Automation? 8 Best Practices & Advice'
description: 'Streamline your DevOps pipeline! Explore what DevOps automation is and the 8 best practices for seamless delivery.'
ogImageUrl: 'https://assets.roadmap.sh/guest/what-is-devops-automation-03k11.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
isNew: true
type: 'textual'
date: 2024-11-05
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![What is DevOps Automation?](https://assets.roadmap.sh/guest/what-is-devops-automation-03k11.jpg)
DevOps Automation is all about using technology to streamline and enhance the processes involved in software development and IT operations. By automating repetitive tasks, teams can focus more on innovation and less on manual work, in other words, making the job fun and interesting while delivering the boring parts at the same time.
In this article, we'll explore what DevOps Automation really is, its key components, the benefits it offers, and the best [DevOps](https://roadmap.sh/devops) practices you should follow to get the most out of it.
## What is DevOps Automation?
DevOps Automation refers to the use of tools and scripts to automate the different stages of the DevOps lifecycle and many aspects of the software development life cycle. This includes everything from code integration and application deployment to infrastructure management and monitoring.
Automation is one of the key methodologies that help you ensure that these processes are, in the end, efficient, consistent, and reliable.
## Key DevOps Processes to Automate
The following key DevOps processes are the core of what automation in the DevOps space is:
* **Continuous Integration/Continuous Deployment (CI/CD):** Automates the process of integrating code changes and deploying them to production.
* **Infrastructure Management:** Uses code to manage and provision infrastructure, ensuring consistency across environments.
* **Monitoring:** Automatically tracks system performance and alerts DevOps teams to any issues.
## Components of DevOps Automation
DevOps Automation isn't just a single tool or process—it's a collection of various components that work together to streamline and enhance your development and operations workflows. Let's dive deeper into these key components to understand how they contribute to a robust DevOps strategy.
### 1. Continuous Integration (CI)
![Continuous Integration](https://assets.roadmap.sh/guest/continuous-integration1-cw7ms.png)
Continuous Integration (CI) is all about integrating code changes into a shared repository frequently, often multiple times a day. This practice helps detect issues early in the development cycle, making it easier to address them before they become bigger problems.
* **How It Works:** Developers commit their code changes to a central repository. Automated tools then build the application and run a suite of tests (like unit tests and integration tests) to ensure that the new code doesn't break existing functionality.
* **Benefits:**
* **Early Detection of Bugs:** By integrating and testing code regularly, teams can identify and fix bugs quickly.
* **Reduced Integration Problems:** Frequent integrations minimize the complexity and effort required to merge changes from different developers.
* **Improved Code Quality:** Automated testing ensures that code meets quality standards before it's merged.
### 2. Continuous Deployment (CD)
![Continuous Deployment](https://assets.roadmap.sh/guest/continuous-deployment1-xqyc2.png)
Continuous Deployment (CD) takes CI a step further by automatically deploying code changes to production once they pass all the necessary tests.
* **How It Works:** After the CI process successfully builds and tests the code, the CD pipeline automatically deploys the changes to the live environment without manual intervention.
* **Benefits:**
* **Faster Time-to-Market:** With the automation in place, you significantly reduce the time it takes to deploy changes into production, thus keeping your product competitive.
* **Reduced Risk of Deployments:** Automated deployments minimize human errors, ensuring that deployments are consistent and reliable.
* **Continuous Feedback:** Rapid deployments allow for quicker feedback from users, enabling faster iterations and improvements.
### 3. Infrastructure as Code (IaC)
![Infrastructure as Code](https://assets.roadmap.sh/guest/infrastructure-as-code1-ly5zn.png)
Infrastructure as Code (IaC) is the practice of managing and provisioning your IT infrastructure through machine-readable code rather than manual processes.
* **How It Works:** Automation tools like Terraform, Ansible, or AWS CloudFormation allow you to define your infrastructure (servers, databases, networks, etc.) in code. This code can be stored in version control systems, reviewed, and reused across different environments.
* **Benefits:**
* **Consistency Across Environments:** Ensures that development, testing, and production environments are identical, reducing the so-called "it works on my machine" syndrome.
* **Versioning your infrastructure:** Changes to infrastructure can be tracked, reviewed, and rolled back if necessary, just like application code.
* **Scalability:** Easily scale your infrastructure up or down by modifying the code, making it adaptable to changing needs.
### 4. Automated Testing
![Automated Testing](https://assets.roadmap.sh/guest/automated-test-execution-0uwu9.png)
Automated testing involves using software tools to run tests on your code automatically. This ensures that your application behaves as expected and maintains high quality as it evolves.
* **How It Works:** Automated tests (such as unit tests, integration tests, and end-to-end tests) are written alongside your code. These tests are executed automatically during the CI/CD pipeline to verify that new changes don't introduce bugs or regressions.
* **Benefits:**
* **Enhanced Code Quality:** Regular automated testing catches bugs early, ensuring that only reliable code reaches production.
* **Faster Feedback:** Developers receive immediate feedback on their code changes, allowing for quicker iterations and improvements.
* **Efficiency:** Automating repetitive testing tasks saves time and allows teams to focus on more complex testing scenarios and feature development.
### 5. Monitoring and Logging
![Monitoring and Logging](https://assets.roadmap.sh/guest/server-monitoring-logging-ye24z.png)
Monitoring and logging are essential for maintaining the health and performance of your applications and infrastructure. They provide real-time insights and historical data that help you troubleshoot issues and optimize performance.
* **How It Works:** Monitoring tools continuously track various metrics (like CPU usage, memory consumption, and response times) and logs from your applications and infrastructure. These tools can alert teams to potential issues and even trigger automated responses to certain conditions.
* **Benefits:**
* **Proactive Issue Detection:** Real-time monitoring helps identify and address problems before they impact users.
* **Automated Responses:** Triggering automated actions (like scaling resources during traffic spikes or restarting services after a crash) ensures that your systems remain resilient and performant without manual intervention.
### Benefits of DevOps Automation
DevOps automation provides many benefits, including as already mentioned, the side effect of removing humans from almost the entire DevOps workflow, thus reducing the chances of human error and granting DevOps operators more time to focus on more interesting activities.
However, there are more benefits than just reduced chance of errors. In fact, the following list covers some of the most relevant ones:
* **Increased Speed and Efficiency:** Automated processes run faster and on time, every time, allowing for faster development and deployment cycles.
* **Enhanced Collaboration Between Teams:** Streamlines workflows, making it easier for development and operations teams to work together. This is, in fact, one of the core [principles of the DevOps practice](https://roadmap.sh/devops/principles).
* **Faster Time-to-Market:** Everything covered so far helps accelerate the delivery of features and updates, keeping your products competitive.
## Best Practices for DevOps Automation
![Best Practices for DevOps Automation](https://assets.roadmap.sh/guest/devops-best-practices-rizoz.png)
### Start with Clear Objectives
Automation for the sake of automation makes no sense. Before diving into automation, it's essential that you define your goals.
What are you looking to achieve? Whether it's reducing deployment times, improving code quality, or enhancing collaboration, having clear objectives will guide the rest of your automation strategies and ensure they align with your business goals.
### Automate Repetitive and Time-Consuming Tasks
Identifying the repetitive and manual tasks (especially the ones that take a long time to complete) is a crucial next step to understanding what can and should be automated. In fact, these tasks should be the first set of candidates to be automated, as they are directly consuming the time of your teammates with activities that can obviously be done by a machine.
By automating these tasks, you are effectively freeing up your team to focus on more strategic and creative work, enhancing overall productivity.
### Implement Continuous Integration and Deployment
Whenever possible, code changes and the corresponding production deployment should be something that happens automatically with the least amount of human intervention possible.
This is because it’s such a critical task for any product, that it needs to be 100% reliable and efficient. In other words, it should always work, whether you do it once a week or 5 times on the same day, and it should always be performed as fast as possible.
This not only speeds up the development process but also ensures that any issues are detected and addressed promptly. CI tools usually offer the option of a rollback, in case something goes wrong. This is another key best practice, as errors will undoubtedly reach production, no matter how much we plan to avoid it, so it’s better to be prepared than to ignore the possibility and then have to manually perform rollbacks, or even worse, apply fixes directly in production.
### Use Infrastructure as Code (IaC)
Managing your infrastructure can be a daunting task for projects that have a complex architecture.
With IaC DevOps operators can manage the infra through code ensuring consistency across all environments.
Thanks to the “code” part of IaC, you can version control your infrastructure, making it easier to reproduce environments and roll back changes if needed.
### Ensure Proper Monitoring and Logging
Implement comprehensive monitoring solutions to keep an eye on your applications and infrastructure is a key DevOps automation practice.
After all, if you plan to improve, you need to measure, right?
In the same train of thought, effective logging helps you gain valuable insights and troubleshoot issues in your platform, ensuring your systems run smoothly for as long as possible.
### Foster a Culture of Collaboration and Continuous Improvement
Break with the idea that developers and operations should not work together side-by-side, and instead encourage open communication between both teams.
Promote a culture of continuous learning and adaptation, where teams regularly review and improve their processes based on feedback and new insights.
### Integrate Security into the Automation Process (DevSecOps)
Security should be an integral part of your DevOps pipeline and adding automation tools into the mix should not affect that.
Make sure to embed security practices within your DevOps automation processes and automate security testing and compliance checks to ensure that your applications are secure from the ground up.
### Address and Eliminate Toil
Toil refers to repetitive, manual tasks that do not provide lasting value, for instance: performing manual deployments after each sprint.
Imagine your development team needs to deploy a new version of your web application every week. Each deployment involves several repetitive steps, like logging into the server, copying the files, configuring the server, restarting all services and checking if everything went right.
While you might consider production deployments to be very valuable, the truth is that if you have to do it every week, then the **lasting** value is non-existent.
Try to identify sources of toil in your workflows and continuously work to reduce or eliminate them through automation.
## Choose your DevOps automation tools
Once you’ve incorporated these best practices into your DevOps activities, the next immediate action is to decide what your top automation tools will be.
These tools should allow you to:
* Comply with the best practices already covered.
* Empower your team to accomplish their tasks without getting in their way.
* Actually provide the automation level you require.
Regardless of the automation tools you decide to go with, some of the recommended categories that you should tackle are:
* **Continuous Integration/Continuous Deployment** (CI/CD): these will help you reduce your time-to-market and increase the confidence on every new deployment.
* **Configuration Management tools**: incredibly useful when you have to manage large infrastructures.
* **Infrastructure as Code** (IaC): they allow you to version your infrastructure and collaborate on it through simple text files, speeding up resource deployment & environment setups.
* **Test automation tools**: they will help you ensure quality by automating the testing of many aspects of your application (i.e automatically running UI tests as part of your deployment process).
## Conclusion
DevOps automation is a powerful approach to streamline your software development and IT operations interactions.
By automating key portions of your software development process like CI/CD, infrastructure management, and monitoring, you can achieve better speed, consistency, and overall improvement in collaboration within your teams.
Implementing best practices will ensure your automation efforts are successful and aligned with your business goals.
If you’re looking for more details on how to get started as a DevOps or you’d like to learn more about this practice, check out the [full DevOps roadmap here](https://roadmap.sh/devops).

@ -7,6 +7,15 @@ seo:
title: 'Is DevOps engineering a good career path in @currentYear@?' title: 'Is DevOps engineering a good career path in @currentYear@?'
description: 'Learn why a DevOps career path is a smart choice in 2024. Get insights into demand, growth, and earning potential in DevOps.' description: 'Learn why a DevOps career path is a smart choice in 2024. Get insights into demand, growth, and earning potential in DevOps.'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-career-path-2h4r7.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-career-path-2h4r7.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-08-20 date: 2024-08-20

@ -0,0 +1,268 @@
---
title: 'What Are the 7 Key Phases of the DevOps Lifecycle?'
description: 'Master the DevOps lifecycle by exploring its 7 phases, designed to enhance collaboration, streamline processes, and deliver software with agility.'
authorId: william
excludedBySlug: '/devops/lifecycle'
seo:
title: 'What Are the 7 Key Phases of the DevOps Lifecycle?'
description: 'Master the DevOps lifecycle by exploring its 7 phases, designed to enhance collaboration, streamline processes, and deliver software with agility.'
ogImageUrl: 'https://assets.roadmap.sh/guest/key-phases-of-devops-lifecycle-788fa.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false
type: 'textual'
date: 2024-11-01
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Learn the key phases of the DevOps lifecycle.](https://assets.roadmap.sh/guest/key-phases-of-devops-lifecycle-788fa.jpg)
Whether you’re an experienced DevOps engineer or trying to expand your expertise, you’ll likely adopt (or are already using) parts of the **7 key phases of the DevOps lifecycle** as a core **process** for developing, testing, and deploying software projects.
But what are these phases, and do they really need to be followed in a specific order to truly matter?
As a [DevOps engineer](https://roadmap.sh/devops), your primary role is to help the development and operations teams operate better. You’ll do this by collaborating closely with software engineers, quality assurance teams, and other stakeholders to set up **processes**, implement tools, and create standards to achieve the overall goal of the project.
In this guide, you’ll learn about these phases, how they're implemented, and the sequence in which they are applied in software development.
**TL;DR:** 7 key phases of the DevOps lifecycle are:
- Continuous development
- Continuous integration (CI)
- Continuous testing
- Continuous deployment (CD)
- Continuous monitoring
- Continuous feedback
- Continuous operations
Let’s look at the DevOps lifecycle in detail.
## What is the DevOps lifecycle?
DevOps lifecycle is a set of stages that software development (Dev) and IT operations (Ops) teams use to deliver software applications in an efficient and reliable manner. It is a continuous and iterative process that facilitates integration and collaboration between these teams.
In traditional software development, developers don’t just build and deploy applications. They must also accommodate changes, fix bugs, consider feature requests, and handle various administrative tasks. The same approach to continuous improvement applies in DevOps, which has led to industries adopting DevOps to factor in the lifecycle processes into their operations.
The primary goal of the DevOps lifecycle is to streamline your development and delivery process and ensure applications are reliable and efficiently deployed.
It follows a range of continuous development, integration, testing, monitoring, and feedback gathering, with each section using sets of best practices and tools to ensure the overall project goal.
![DevOps Lifecycle](https://assets.roadmap.sh/guest/7-key-phases-of-the-devops-lifecycle-4zoj6.png)
## 7 key phases of the DevOps lifecycle
The 7 key phases of the DevOps lifecycle, also known as the 7 C’s of DevOps, are sets of interconnected stages that work together in a continuous loop to help you develop, test, and deploy applications quickly. Below are the key phases of the DevOps lifecycle:
### 1. Continuous development
This phase is about planning and coding the software application. Developers plan the software and break the entire development process into smaller cycles that add value to the overall software development goal.
![Continuous Development](https://assets.roadmap.sh/guest/continuous-development-xbxj3.png)
By following this process, DevOps teams can easily map out the **software development lifecycle (SLDC)** to other stakeholders regarding expectations, responsibilities, and timelines. Additionally, because the development teams, testers, and other stakeholders build software piece-by-piece, the development process is fast, large-scale risk is minimal, and the process can easily adapt to changing requirements and business needs.
**Tools used for continuous development**
1. **Planning:** DevOps teams use project management tools like Jira, Linear, and ClickUp to help teams plan, track, and release software.
2. **Coding**: DevOps teams can use version control systems like Git, editors like Visual Studio Code, and pair programming tools like Tuple to effectively collaborate with other development teams when building software.
### 2. Continuous integration (CI)
After writing the code and storing it in a shared repository, DevOps teams can set up a CI pipeline on the repository so that when developers commit changes to the source code, they can do the following:
- Detect changes to existing code and initiate actions like unit testing, integration testing, and the build process.
- Perform code quality analysis.
- Generate deployment artifacts.
![Continuous Integration](https://assets.roadmap.sh/guest/continuous-integration-b4lef.png)
This is particularly important because the development team will continue to push updates into the source code to build new features, fix bugs, perform code improvement, and refactoring.
**Tools used**
Jenkins, CircleCI, Travis CI, and GitHub Actions are some automation tools DevOps teams use to build, test, and deploy code changes.
### 3. Continuous testing
Continuous testing involves automating tests on the developed code to ensure that changes are validated at each step of the development cycle, catch defects, and provide feedback without the need for human intervention.
![Continuous testing](https://assets.roadmap.sh/guest/continuous-testing-d90gb.png)
If an error or bug occurs, the code is returned to the previous phase (integration) for correction and possible fixes. Automated testing improves the overall workflow by saving time and resources.
**Tools used**
Selenium, JUnit, TestNG, and Cucumber are some automation testing tools that DevOps teams use to automate testing at scale.
### 4. Continuous deployment (CD)
This is the phase when the codes that have passed all tests are automatically deployed to the staging or production environment. Continuous deployment's overall goals are:
- Reduce the time between development and deployment.
- Facilitate the deployment of finished code to production servers.
- Ensure consistency across development, testing, staging, and production environments.
![Continuous Deployment](https://assets.roadmap.sh/guest/continuous-deployment-bprfv.png)
**Tools used**
1. **Configuration tools**: The DevOps team uses configuration management tools like Ansible, Puppet, Chef, and SaltStack to automate the provisioning, configuration, management, and continuous delivery of IT infrastructure. These tools help the DevOps team increase efficiency, maintain consistency across environments, and reduce errors.
2. **Containerization and orchestration tools**: The DevOps team uses tools like [Docker](https://roadmap.sh/docker), Vagrant, and [Kubernetes](https://roadmap.sh/kubernetes) to build and test applications. These tools help applications respond to demand (scaling up and scaling down) and maintain consistency across environments.
### 5. Continuous monitoring
This is the phase where you keep an eye on the deployed application to monitor performance, security, and other helpful data. It involves the collection of metrics and other application usage-related data to detect issues such as system errors, server downtime, application errors, and security vulnerabilities. Additionally, it involves collaboration with the operation teams to monitor bugs and identify improper system behavior.
![Continuous Monitoring](https://assets.roadmap.sh/guest/continuous-monitoring-cydj0.png)
Continuous monitoring improves the productivity and reliability of the system while reducing IT support costs. Any issues detected during this phase can be promptly reported and addressed in the continuous development phase, creating a more efficient feedback loop.
**Tools used**
Prometheus, Grafana, ELK Stack (Elasticsearch, Logstash, Kibana), and Datadog are some tools DevOps teams use to continuously monitor the application and infrastructure to identify and resolve issues.
### 6. Continuous feedback
Continuous feedback is about gathering information from users and stakeholders to understand how the software performs in real-life scenarios. The feedback is then continuously analyzed and used to make informed decisions and improve the overall development process.
![Feedback](https://assets.roadmap.sh/guest/continuous-feedback-eg1tr.png)
**Tools used**
DevOps teams use tools like Datadog and LogRocket to gather and gain insights into how users interact with their products.
### 7. Continuous operations
In the traditional software development process, developers might need to pull down the server when they want to update and maintain applications. This approach disrupts the development process, potentially increases organizational costs, and can lead to user service interruptions.
![Continuous operations](https://assets.roadmap.sh/guest/continuous-operations-h2yrj.png)
Continuous operations address these challenges, among others. It ensures the software remains available and operational with minimal downtime. This phase involves tasks such as:
- Performing zero-downtime deployments.
- Automating backups and recovery.
- Using infrastructure management to provision and scale resources.
- Distributing traffic across multiple servers to maintain performance during updates or high-traffic periods.
- Implementing strategies like database replication and rolling updates to maintain data availability.
**Tools used**
Puppet, Terraform, and Chef are some tools DevOps teams use to automate resource provisioning and ensure system reliability.
The DevOps lifecycle is a continuous process that involves development, integration, testing, deployment, monitoring, feedback, and operations. Beyond the improvement it brings, you’ll also notice that organizations are extending DevOps and further advancing its capability.
Let’s explore some of these extensions and how they’re changing the development process.
## Key DevOps extensions to watch in 2024
Below are some extensions that build on the core principles of DevOps, like automation, collaboration, and continuous improvement:
- DevSecOps
- GitOps
- DataOps
- FinOps
- MLOps
- AIOps
![DevOps extension](https://assets.roadmap.sh/guest/devops-extensions-8fy7t.png)
### DevSecOps
DevSecOps stands for **Development**, **Security**, and **Operations**. It’s an extension of DevOps that continuously integrates security practices into every phase of the software development lifecycle rather than treating them as an afterthought.
With the increase in cybersecurity threats and regulatory requirements, it has become more important to use DevSecOps to embed security into the pipeline so that organizations can deliver secure software faster.
DevSecOps uses tools like HashiCorp Vault, Snyk, OWASP ZAP, and Aqua Security to:
- Automate security testing.
- Perform continuous compliance.
- Enforce secure coding practices
- Perform vulnerability assessment.
### GitOps
GitOps stands for **Git Operations**. It’s an extension of DevOps that uses Git as a source of truth for managing infrastructure and application development. This means the DevOps teams can make changes to infrastructure through Git pull requests, which are then automatically applied via the CI/CD pipelines.
By adopting GitOps, organizations can improve the reliability of their systems, enforce standards for the team, and accelerate software delivery.
GitOps involves using tools like Jenkins X, Flux, and ArgoCD to automate the delivery and deployment of applications.
### DataOps
DataOps stands for **Data Operations**. It’s an extension of DevOps methodology designed to improve data pipeline communication, integration, and automation across the data and IT operations teams. DataOps aims to ensure that the data pipeline is fast, scalable, and reliable.
DataOps uses tools like Apache NiFi, data build tool (dbt), and Prefect to:
- Perform data versioning.
- Automate data testing.
- Automate the delivery of data pipelines.
### FinOps
FinOps stands for **Financial Operations**. It’s an extension of DevOps that enables organizations that use cloud services to efficiently manage their cloud costs and financial operations. The goal of FinOps is to optimize cloud-related costs by encouraging close collaboration between finance, operations, and engineering teams.
![finOps](https://assets.roadmap.sh/guest/1tvyy8hg-f4fd8.png)
FinOps also uses a lifecycle approach to optimize organization costs. It involves:
1. **Inform**: This phase involves gaining visibility into cloud spending by tracking cloud costs, setting budgets, and leveraging discounts or other freebies offered by cloud providers. Basically, it provides the team insights into where the money is being spent.
2. **Optimize**: This phase is all about optimizing cloud costs. It involves sizing resources, identifying areas of inefficiency, and other cost-improvement tasks that will help make cost-effective decisions without compromising performance.
3. **Operate:** This phase is about monitoring cloud spending, enforcing policies, and making needed adjustments to ensure the budget is not exceeded.
FinOps leverage tools like Azure Cost Management, AWS Cost Explorer, Cloudability, and CloudHealth to achieve the organization's cloud-related financial goals.
### MLOps
MLOps stands for **Machine Learning Operations**. It’s an extension of DevOps workflow that streamlines and automates the deployment, monitoring, and management of ML models in a production environment. It promotes collaboration between the data science and IT operations teams so that models can be versioned, continuously delivered, and retrained when needed.
Tools used include TensorFlow Extended (TFX), Kubeflow, KitOps, and MLflow.
### AIOps
AIOps stands for **Artificial Intelligence for IT Operations**. It’s an extension of DevOps that promotes using artificial intelligence, machine learning, and data analytics to automate and improve IT operations processes. When AIOps is integrated into DevOps processes, the organization benefits from enhanced efficiency, faster issue resolution, and proactive system monitoring.
Tools used include IBM Watson AIOps and Dynatrace.
The extension of DevOps workflow is a response to modern software challenges, driven by the ongoing shift in the DevOps ecosystem and the need for specialized practices across different software engineering fields.
## Essential DevOps lifecycle best practices
An essential part of DevOps culture is the lifecycle phases. While the lifecycle phases streamline the operational process and help you build reliable software, there are still some gotchas that you need to consider when integrating this process into your SDLC. Below are some best practices you should consider:
1. **Promote collaboration**: As a DevOps engineer, you need to encourage cross-functional collaboration and shared responsibilities among direct teams and other stakeholders. This will help you and your team avoid the traditional siloed approach, break communication barriers, and promote DevOps culture.
2. **Show empathy and support**: Implementing DevOps lifecycle into your development process may take time and require some adjustment for you and your team members. You need to support the team with resources and any helpful training material to help facilitate the process. Most importantly, allow time for everyone to adapt to the new process.
3. **Set metrics or milestones**: As the popular saying goes, **“You can’t manage what you can’t measure****.****”** You must set clear objectives and define performance metrics at the beginning or during the adoption of a new process. This will help you and your team know what success looks like.
4. **Invest in tools**: At the heart of DevOps are the toolchains that automate toils and enable easy collaboration between development and operations teams. You should invest in DevOps tools that your team needs to automate their DevOps workflow. Below are some DevOps tools that can help you automate processes:
- **CI/CD tools**: Tools like Jenkins, GitLab CI/CD, CircleCI, Azure Pipeline, and GitHub Actions help automate the integration and deployment of code changes.
- **Infrastructure as Code (IaC) tools**: Tools like Terraform, Ansible, Pulumi, Chef, AWS CloudFormation, and Vagrant help automate the provisioning and management of infrastructure.
- **Containerization and orchestration tools**: Tools like Docker, Kubernetes, OpenShift, Docker Swarm, and Amazon ECS (Elastic Container Service) help manage and orchestrate containers at scale.
- **Monitoring and logging tools**: Tools like Prometheus, ELK Stack (Elasticsearch, Logstash, and Kibana), Datadog, Splunk, and Grafana help track system performance, logging, and alerting.
- **Configuration management tools**: Tools like Chef, Puppet, CFEngine, SaltStack, and Ansible help ensure that system configurations remain consistent across environments.
- **Security and compliance tools**: Tools like HashiCorp Vault, OWASP ZAP, Snyk, SonarQube, and Aqua Security help enforce security policies, scanning, and compliance checks.
- **Collaboration and communication tools**: Tools like Slack, Microsoft Teams, Trello, Jira, and Confluence help facilitate communication and collaboration between teams.
5. **Continuous improvement**: Encourage your teams to share knowledge across teams, conduct service failure postmortem, and experiment with new ideas and potential solutions.
## Key takeaways
At the core of the DevOps lifecycle is continuity. By following these key phases in an iterative pattern, you’ll be able to take advantage of the lifecycle process to build applications that are maintainable, scalable, and reliable.
Use the [DevOps roadmap](https://roadmap.sh/devops) to stay up to date with the latest developments and extensions in the DevOps ecosystem. Additionally, you can create a [custom roadmap](https://roadmap.sh/teams) for your team to plan, track, and document the team's skills and growth.

@ -7,6 +7,15 @@ seo:
title: '11 DevOps Principles and Practices to Master: Pro Advice' title: '11 DevOps Principles and Practices to Master: Pro Advice'
description: 'Elevate your game by understanding this set of key DevOps principles and practices. Gain pro insights for a more efficient, collaborative workflow!' description: 'Elevate your game by understanding this set of key DevOps principles and practices. Gain pro insights for a more efficient, collaborative workflow!'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-skills-tlace.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-skills-tlace.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-09-24 date: 2024-09-24

@ -0,0 +1,156 @@
---
title: 'Why Does DevOps Recommend Shift-Left Testing Principles?'
description: 'Understand why DevOps emphasizes shift-left testing to boost early bug detection, reduce costs, and improve release cycles.'
authorId: william
excludedBySlug: '/devops/shift-left-testing'
seo:
title: 'Why Does DevOps Recommend Shift-Left Testing Principles?'
description: 'Understand why DevOps emphasizes shift-left testing to boost early bug detection, reduce costs, and improve release cycles.'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-shift-left-testing-16zah.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: true
type: 'textual'
date: 2024-11-04
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Why shift-left testing is recommended in DevOps](https://assets.roadmap.sh/guest/devops-shift-left-testing-16zah.jpg)
Why is there so much debate about testing methodologies if DevOps is about streamlining software delivery? Why do we still encounter approaches like shift-left, shift-right, and even shift-down testing? Shouldn’t there be one universally accepted strategy?
[DevOps](https://roadmap.sh/devops) emphasizes rapid development cycles, continuous integration, and delivery, but your projects or teams may have different needs, goals, or challenges. Factors like the **type of application, infrastructure, team size, legacy systems**, and **release schedules** can lead you to choose different testing strategies.
Despite these varying needs and challenges, DevOps recommends shift-left testing principles because it addresses the core problem of catching issues early. By integrating tests early, issues are resolved quickly before they become more costly and complex to fix.
In this guide, you’ll learn what Shift-Left testing is, its benefits, things to consider, and best practices when implementing it.
## What is Shift-Left testing?
Shift-Left testing is a principle in DevOps that involves incorporating quality assurance and other testing activities **earlier** in the software development lifecycle (SDLC).
Over the years, testing has been somewhat considered an afterthought of the development process. The traditional approach waits for the development cycle to end or at least waits until 50% of the development process is done before testing the application. This approach can be slow, costly, and does not maximize resources because bugs found during the tests can’t be easily fixed during the development cycle.
![Shift-Left testing](https://assets.roadmap.sh/guest/shift-left-testing-devops-3cr7m.png)
The main idea is to move testing to the **left side** of the development process so that it can happen earlier and more often during the design and development phase.
Shift-Left testing aligns with the DevOps principle of continuous integration and continuous delivery (CI/CD) because automated tests can be written alongside the code and executed as part of the development pipeline. This approach ensures that issues are caught early, developers receive immediate feedback, and overall software quality is improved.
To implement Shift-Left testing, organizations often rely on a variety of automated testing tools. While the choice of tools may vary based on team preference and specific projects, below are some popular tools for performing Shift-Left testing:
- Jenkins
- Selenium
- Cucumber
- SonarCube
- JMeter
## Benefits of Shift-Left testing in DevOps
Let’s explore some of the reasons why Shift-Left is important in your DevOps processes:
![Benefits of Shift-Left](https://assets.roadmap.sh/guest/shift-left-testing-devops-benefits-celh5.png)
1. **Reduced cost**: A goal of every organization is to reduce its *operating expenses* and maximize profit. When Shift-Left testing is factored into your development process, bugs are identified and fixed early, which is far less expensive than when you address them after deployment. This approach saves you both time and resources as reworks are minimal.
2. **Faster feedback and early detection**: Shift-Left testing provides faster feedback on the quality of your code because you’re testing early in the development process. This means you and your team can catch bugs and detect issues before they escalate. Additionally, it reduces the likelihood of finding and fixing defects later in development or in production.
3. **Improved quality**: The overall experience of your application becomes more reliable and stable because you'll likely find and fix bugs earlier before they impact your users' experience.
4. **Faster time to market:** Because defects are reduced and the development process is optimized, you can iterate faster and continuously release software.
5. **Improved collaboration and continuous learning:** Shift-Left testing follows the DevOps principle of collaboration between developers, testers, and other stakeholders. This means the team has a sense of responsibility and ownership, and they’ll learn more from one another.
Shift-Left testing advocates for testing earlier, moving the focus to the **left side** of the development process. You might wonder if this means testing ends after the design and development stages or if there's something like **right-side** testing as you prepare to go live.
Well, you guessed right, there's indeed Shift-Right testing. Let’s explore that next.
## What is Shift-Right testing?
Shift-Right testing is a principle in DevOps that involves incorporating quality assurance and other testing activities **later** in the software development lifecycle (SDLC). This is usually done when software has been released or is being used in production.
Unlike Shift-Left testing, which occurs at the beginning of the development process, Shift-Right testing occurs after the application has been deployed into production. It involves:
- Closely monitoring the application’s performance in the production environment to identify bugs and issues.
- Gradually releasing new features to selected users to test their impact first before doing a full rollout.
- Collecting feedback from users to understand the overall users’ experience and identify areas of continuous improvement.
- Conducting A/B testing to compare different versions of the software or features to determine users’ behavior and outcomes.
![Shift-Right testing](https://assets.roadmap.sh/guest/shift-right-testing-v86zs.png)
The main idea is to move system testing to the **right side** of the development process, ensure that the application performs well in real-world scenarios, and catch issues that may not be apparent during Shift-Left testing.
While Shift-Right testing comes with its own benefits when dealing with production-specific issues, it can be risky. The approach of fixing bugs in production can lead to downtime, cause a negative user experience, and damage your organization’s reputation.
## Challenges in adopting Shift-Left testing
It’s important to understand that Shift-Left testing is not a “magic wand” that solves all your testing problems. It also comes with its own challenges. Below are some challenges you might encounter when adopting it:
1. **Required skills**: Developers, testers, and other stakeholders may need to acquire new skills like test automation, continuous integration, and more. Training can be challenging for teams with limited resources.
2. **Cultural shift**: Adopting continuous testing on the left side of the development process requires a cultural change for all the stakeholders. Developers may need to take on additional testing responsibilities, while testers may need to acquire new skills. This can lead to resistance, adding to their workload and responsibilities.
3. **Cost implication**: The implementation process requires new toolsets and automation frameworks, which can be time-consuming and costly to set up. Additionally, teams must overcome the learning curve associated with these tools.
4. **Integration complexity**: Integrating testing in the early stage of SDLC can be complex, particularly in legacy and large systems. This is because it requires that all team members are aligned and willing to adjust their roles and responsibilities to accommodate the new testing approach.
5. **Risk management**: Testing early means teams must develop strategies to mitigate the risks associated with early testing and find a balance between early testing and potential risks.
## Overcoming challenges and implementing shift-left testing
Adopting Shift-Left testing in your development process comes with several challenges, particularly related to resources and cultural resistance, which may overshadow the advantages it offers. To successfully implement Shift-Left testing, consider the following strategies:
- **Promote a testing-first mindset** and encourage cross-functional collaboration between your teams with an emphasis on shared ownership of the product.
- **Invest in training and skill development** focused on test automation, CI/CD, and other DevOps practices.
- **Choose tools that align with your organization’s needs** and integrate seamlessly within your budget.
- **Start small** with a feature or pilot project, then gradually scale across the entire product chain. This approach will give your team the flexibility and the time to learn and refine strategies.
- **Regularly conduct risk assessments** to identify areas for improvement and implement corresponding mitigation strategies.
## Best practices for implementing Shift-Left testing principles
Below are some best practices to consider:
![Shift-Left best practices](https://assets.roadmap.sh/guest/shift-left-testing-devops-principles-0yrp4.png)
1. **Adopt early test plans**: Create a plan that clearly outlines the testing goals and scope of the project. Also, ensure that testing is integrated into the early stages of your SDLC.
2. **Test automation**: Use test automation tools to automate unit tests, integration tests, functional tests, and other necessary test cases. Additionally, regularly update and maintain test scripts to keep them relevant and accurate when running CI/CD pipeline.
3. **Collaboration and communication**: Use project management tools like Jira and Linear, along with traditional methods such as meetings, check-ins, and stand-ups, to facilitate communication and collaboration between developers, testers, and other stakeholders.
4. **Continuous learning**: Encourage your team to keep up-to-date with the latest testing techniques and tools, participate in industry events to learn from experts, and share knowledge and best practices within the team.
## Shift-Left testing in the real world
To gain a better understanding of how teams are using Shift-Left testing to build better applications, let’s explore two real-world examples: Microsoft and Uber.
### Microsoft
Over two and a half years, a Microsoft team successfully replaced 27,000 legacy tests with modern DevOps unit tests and a shift-left process. This approach allowed them to enhance software quality and performance goals.
![Microsoft, 2022. Pull request and rolling CI pipeline in action. https://learn.microsoft.com/en-us/devops/develop/shift-left-make-testing-fast-reliable#getting-faster](https://assets.roadmap.sh/guest/pr-rolling-ci-pipeline-jv1rp.png)
Additionally, the Azure DevOps platform integrates various Shift-Left testing practices, which the team leverages to deliver reliable cloud services and tools to its customers. At the core of Shift-Left testing in Microsoft are:
- Writing tests at the lowest possible level.
- Writing functional tests that can run anywhere.
- Treating test code as product code.
### Uber
Uber’s adoption of the Shift-Left testing principle of putting the test at the forefront of its software development process has helped it minimize risk and ensure the reliability and safety of its ride-sharing platform.
![Uber, 2024. Separation of testing data. https://www.uber.com/en-GB/blog/shifting-e2e-testing-left/](https://assets.roadmap.sh/guest/shift-left-testing-devops-uber-0xk2a.png)
One major change Uber made was to ensure they could test without deploying to production. This process requires launching a backend integration testing strategy **(BITS)** that enables on-demand continuous deployment and routing to test sandboxes. At the core of BITS are:
- Isolating data between production and test environment.
- Using [Cadence](https://cadenceworkflow.io/?uclick_id=b36cfaa6-c7d0-4da0-a756-64e7e4c3466e), an open-source workflow engine, to define workflow state, retries, and timers for resource teardown.
## Key takeaways
As businesses evolve, they will bring new challenges and use cases that need to be solved. This means as a DevOps engineer, you need to factor in tests early into the development process to maintain a balance between product quality and speed. Additionally, you need to stay up to date with the latest DevOps trends and toolchains that will help you build reliable applications.
Use the [DevOps roadmap](https://roadmap.sh/devops) to stay up to date with the latest developments and extensions in the DevOps ecosystem.

@ -7,6 +7,15 @@ seo:
title: '10+ In-Demand DevOps Engineer Skills to Master' title: '10+ In-Demand DevOps Engineer Skills to Master'
description: 'Find out exactly what it takes to be a successful DevOps engineer with my recommendations for essential DevOps skills' description: 'Find out exactly what it takes to be a successful DevOps engineer with my recommendations for essential DevOps skills'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-skills-tlace.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-skills-tlace.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-09-12 date: 2024-09-12

@ -0,0 +1,224 @@
---
title: 'DevOps engineer vs Full stack developer: Which is best?'
description: 'DevOps engineer vs Full stack developer: Compare the roles, required skills, and future prospects to make an informed career choice.'
authorId: ekene
excludedBySlug: '/devops/vs-full-stack'
seo:
title: 'DevOps engineer vs Full stack developer: Which is best?'
description: 'DevOps engineer vs Full stack developer: Compare the roles, required skills, and future prospects to make an informed career choice.'
ogImageUrl: 'https://assets.roadmap.sh/guest/devops-engineer-vs-full-stack-developer-jccsq.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'How to become a DevOps Engineer in 2024': '/devops/how-to-become-devops-engineer'
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false
type: 'textual'
date: 2024-10-17
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![DevOps vs Full Stack: Which suits you best?](https://assets.roadmap.sh/guest/devops-engineer-vs-full-stack-developer-jccsq.jpg)
There are several roles in tech, two common ones being DevOps engineers and full stack developers. The software development industry relies heavily on full stack and DevOps development.
DevOps aims at bridging the gap between developers and operation teams. This leads to an efficient and improved software delivery process.
A [DevOps engineer's](https://roadmap.sh/devops) primary responsibility is creating automated processes to develop, test, deploy, and maintain software systems, while a full stack developer specializes in writing application code that covers both the user-facing side (frontend) and behind-the-scenes logic (backend).
This guide explains what each role entails, addresses the motivations behind choosing either path, guides developers on choosing either path, and gives helpful tips for those who want to transition to DevOps engineering.
![DevOps Process](https://assets.roadmap.sh/guest/devops-process-ajk6p.png)
The key differences between DevOps engineers and full stack developers are summarized in the table below.
| DevOps engineer | Full stack developer |
|-----------------|----------------------|
| Responsible for the smooth flow of code changes from development to production. | Focuses on end-to-end application development (both frontend and backend) |
| Uses monitoring tools to track the performance of deployed software and also identify issues and bottlenecks in the deployment process. | Writes unit, integration, and end-to-end tests for the application code and fixes bugs related to the code. |
| Focuses on automating processes and ensuring a software application runs reliably and flawlessly. | Handles the development of web applications or a software program (frontend and backend) |
| Familiar with tools that aid task automation, code testing and deployments. | Has expertise in various frontend and backend programming languages |
| Focuses more on the infrastructure management side of the whole development life-cycle, which includes managing networks and servers. | Could either focus on the frontend and backend web architectures. |
| Has an in-depth understanding of operations to ensure optimal software delivery. | Possess a basic knowledge of operations. |
## DevOps engineer or full stack developer
Full stack developers specialize in web development, while DevOps engineers **focus** on the smooth integration and delivery of software components.
Both roles offer great career opportunities. DevOps engineers can work in different sectors and organizations occupying different capacities.
Some DevOps specializations include code release manager, automation architect, DevSecOps engineer, etc. The same applies to a full stack engineer. As a full stack developer, you can work as a [frontend](https://roadmap.sh/frontend?r=frontend-beginner) or [backend](https://roadmap.sh/frontend?r=frontend-beginner) developer.
DevOps developers and full stack developers are also in high demand. According to [Statista](https://www.statista.com/statistics/1367003/in-demand-it-roles/), full stack developers and DevOps developers are among the top technical positions demanded by recruiters worldwide in 2023. Indeed reported that the average salary of a [DevOps engineer](https://www.indeed.com/career/development-operations-engineer/salaries?from=top_sb) in the USA is $124,392, and that of a [full](https://www.indeed.com/career/full-stack-developer/salaries?from=top_sb) [](https://www.indeed.com/career/full-stack-developer/salaries?from=top_sb)[stack software developer](https://www.indeed.com/career/full-stack-developer/salaries?from=top_sb) is $124,120.
Before deciding which path to follow, some introspection is encouraged, and some factors are to be considered. Some of the things to consider include:
- Interest
- Strengths
- Willingness to continously learn new skills and technology
### Interest
Considering your interests before choosing which path to follow is helpful. Building a career takes time and hard work, and it is advisable to do that in something you are interested in.
DevOps is probably the right choice if you are interested in automating repetitive tasks, servers and cloud management, containerization, monitoring, logging etc.
On the other hand, if you are interested in writing application and domain code and enjoy seeing what you build and how users interact with applications directly and indirectly, then it is advisable to choose full stack development.
### Strengths
In addition to your interests, it is also helpful to consider what your strengths are. This would help you to decide what you can work on effortlessly and with less struggle.
Do you find scripting easy? Are you able to grasp the complexities behind containerization and container orchestration? Do you spend more time writing infrastructure code than writing application and domain code? If your answer to these questions is yes, you should consider DevOps.
Can you easily convert mock-ups to actual user interfaces? Do you find it fascinating to translate customer requirements into code? Are you able to interact with databases using SQL without much hassle? If yes, then it might be worth going for full stack development.
### Willingness to continuously learn new skills and technology
The DevOps and full stack fields continually evolve, and there is always something new. To be up to date, you have to be willing and open to learning constantly. This involves taking courses, reading articles, and getting updates on things happening in the tech field.
Here is each role in detail to help you make a deeper consideration.
## Who is a DevOps engineer?
A [DevOps](https://roadmap.sh/devops) engineer who can also be referred to as a DevOps developer is an IT professional with knowledge of development and operations. The development part involves writing codes and scripts, while the operations part includes managing on-premises and/or cloud infrastructure and system infrastructure.
In traditional software development, there is the challenge of having different teams working in silos. This siloed team structure makes it challenging to collaborate amongst teams, and the priorities and timelines of each team don't align with other teams.
DevOps helps to bridge the gap between development teams and operations teams. DevOps experts often work in a collaborative surrounding where they can collaborate with software engineers and IT teams.
![DevOps process](https://assets.roadmap.sh/guest/devops-lifecycle-simple-9lvkw.png)
DevOps has some core principles that influence the effectiveness of development and operations. Some of these DevOps principles include:
- Automation of the software development lifecycle
- Collaboration
### Automation of the software development lifecycle
This involves automating tests, builds, and releases of software versions, as well as tasks that can slow down the software delivery process.
### Collaboration
It breaks the silos across teams and enables collaboration and communication. This creates horizontal slices and enhances productivity across teams.
A DevOps developer can use several programming languages for development. Some of them are [Python](https://roadmap.sh/python), Ruby, [Go](https://roadmap.sh/golang), and [Rust](https://roadmap.sh/rust). Also, bash scripts help to automate processes.
Some organizations manage their own server infrastructure on-premise and deploy their applications on these servers. DevOps engineers are responsible for ensuring the servers run reliably and applications deploy successfully.
Cloud computing has gained popularity, and many software applications are deployed on various cloud computing platforms. There are cloud solution providers like [Microsoft Azure](https://azure.microsoft.com/), [Amazon Web Services](https://roadmap.sh/aws), and [Google Cloud Platform](https://cloud.google.com/) who take care of the server infrastructure and are mostly more reliable than the on-premise solution. One significant benefit of the cloud solution is that it is on a pay-as-you-go basis, i.e., you pay for only the cloud resources you use.
## Skills required to be a DevOps engineer
DevOps engineers require soft and technical skills to succeed in their career path. The skills required include:
- Knowledge of coding and scripting
- Knowledge of operating systems
- In-depth knowledge of containerization and orchestration
- Basic understanding of version control
- Understanding of monitoring, logging, and alerting systems
- Knowledge of cloud computing
### Knowledge of coding and scripting
Coding and scripting are essential skills every DevOps engineer should have. These skills are typically employed to automate repetitive tasks. Some of the recommended programming/scripting languages used in DevOps include [Python](https://roadmap.sh/python), [Go](https://roadmap.sh/golang), Ruby, [Rust](https://roadmap.sh/rust), and Bash.
### Knowledge of operating systems
DevOps engineers should have knowledge of operating systems. One common operating system used in DevOps is [Linux](https://roadmap.sh/linux). Having the fundamental knowledge of Linux is required, as many servers are Linux based.
### In-depth knowledge of containerization and orchestration
DevOps engineers should know how to use containerization tools to do their jobs effectively. Some common examples of containerization and orchestration tools include [Docker](https://roadmap.sh/docker) and [Kubernetes](https://roadmap.sh/kubernetes).
**Basic understanding of version control and continuous integration and deployment**
A DevOps engineer should be able to manage and track code changes. This is done with the use of version control systems. Git is a common version control system
Also, DevOps engineers should be familiar with continuous integration and deployment (CI/CD) tools that enable the automatic integration of code changes. Some common CI/CD tools are CirceCl and GitLab.
### Understanding of monitoring, logging, and alerting systems
Monitoring and logging are key aspects of the DevOps process, and it is expected that as a DevOps engineer, you have a good understanding of them. DevOps engineers use logging and monitoring systems to gather, analyze, and understand the system performance, and they set up alerts to be notified if the system state changes and needs to be attended to.
### Knowledge of cloud computing
DevOps engineers should have solid cloud computing skills. Recently, many applications have been deployed on the cloud. Third-party cloud providers mostly manage the cloud infrastructure. Some of the common cloud providers include [AWS](https://roadmap.sh/aws), Microsoft Azure, and Google Cloud Platform.
## Who is a full stack developer?
[Full stack developers](https://roadmap.sh/full-stack) are software developers with extensive frontend and backend development knowledge. Their role is to handle the complete web development process, from designing the user interface to building the server-side logic.
The frontend of an application includes everything the user can see and interact with, i.e., the user interface. The backend consists of the things the user doesn’t see. These include the server-side and systems supporting the business logic.
Full stack coders also use DevOps tools. Depending on the project, a full stack developer may use DevOps technologies like GitHub and mongoDB to create software applications.
Let's take a look at frontend and backend development in greater detail.
### Frontend development
It is concerned primarily with the user interface (UI) and user experience (UX). The common languages used in frontend development include HTML, CSS, and JavaScript. HTML defines the markup of the web page. CSS builds upon HTML and represents the style and format of the webpage. JavaScript is a programming language often used for frontend development and adds logic to your web page. You'll find an excellent guide and roadmap to learning [JavaScript](https://roadmap.sh/javascript) on roadmap.sh.
![Frontend development](https://assets.roadmap.sh/guest/frontend-development-common-languages-25kzq.png)
There are quite a few frontend frameworks out there. Some of the common ones are [React](https://roadmap.sh/react), [Vue](https://roadmap.sh/vue), and [Angular](https://roadmap.sh/angular). For a more detailed guide, look at the [frontend beginners roadmap](https://roadmap.sh/frontend?r=frontend-beginner) or the [advanced frontend roadmap](https://roadmap.sh/frontend?r=frontend).
### Backend development
It focuses on the application's functionality and *business logic*. Examples of backend components include data storage, security, and handling of business logic.
Backend development mainly involves creating API endpoints consumed by the application's front end. Some common backend programming languages include C#, [Java](https://roadmap.sh/java), [Rust](https://roadmap.sh/rust), [Golang](https://roadmap.sh/golang), and [Python](https://roadmap.sh/python). Check out the [backend developer](https://roadmap.sh/backend) roadmap.
![Backend development](https://assets.roadmap.sh/guest/backend-programming-common-languages-oyd3s.png)
## Skills required by full stack developers.
The necessary technical skills to required by full stack engineers include:
- Knowledge of HTML, CSS, and [JavaScript](https://roadmap.sh/javascript)/[TypeScript](https://roadmap.sh/typescript).
- Knowledge of at least one JavaScript framework, e.g., [React](https://roadmap.sh/react), [Vue js](https://roadmap.sh/vue), [Angular](https://roadmap.sh/angular).
- Knowledge of at least one backend language. You can transfer your knowledge of JavaScript to backend development with [Node JS](https://roadmap.sh/nodejs).
- In-depth understanding of server-side rendering and web security.
- Knowledge of APIs.
- Understanding of database management systems and database architecture.
## How to transition to DevOps
Some fundamental knowledge and skills are required for DevOps that will certainly be helpful in the transition. Here is a step-by-step guide for you:
- If you do not already know a programming language, learn one. Some languages used in DevOps include [Python](https://roadmap.sh/python) and [Golang](https://roadmap.sh/golang). [Bash](https://www.gnu.org/software/bash/) is commonly used for scripting.
- Learn about file systems and how to use bash to navigate through files. Also, learn to use Command-Line Interfaces (CLIs).
- Learn about [Docker](https://roadmap.sh/docker) and [Kubernetes](https://roadmap.sh/kubernetes).
- Learn about servers and cloud infrastructures. Some of the common cloud service providers include [AWS](https://roadmap.sh/aws), [Azure](https://azure.microsoft.com/), and [GCP](https://cloud.google.com/).
For more detailed guidance, refer to roadmap.sh's DevOps [beginner](https://roadmap.sh/devops) and [advanced](https://roadmap.sh/devops?r=devops) roadmaps.
## How to transition to full stack development
Are you looking to transition into full stack development? Here is a handy guide:
- Learn HTML, CSS, and JavaScript.
- Learn a JavaScript framework, e.g., [React](https://roadmap.sh/react), [Vue](https://roadmap.sh/vue), [Angular](https://roadmap.sh/angular).
- Learn a backend programming language of your choice, e.g., C#, [Python](https://roadmap.sh/python), [Java](https://roadmap.sh/java)
- Learn a backend framework of your choice, e.g., Node.js, [ASP.NET Core,](https://roadmap.sh/aspnet-core) [Spring boot](https://roadmap.sh/spring-boot).
- Learn database systems i.e SQL and NoSQL databases, e.g., [PostgreSQL](https://roadmap.sh/postgresql-dba), MongoDB
You can refer to roadmap.sh's [full stack development roadmap](https://roadmap.sh/full-stack) for a more detailed guideline.
As you've seen, becoming a DevOps engineer and full stack web developer requires several skill sets. Full stack developers and DevOps engineers have important roles in software development but have different areas of expertise and responsibilities.
Ultimately, the right choice depends on the specific needs and goals of the **software development project**. roadmap.sh offers step-by-step guidance on how to become a [DevOps engineer](https://roadmap.sh/devops?r=devops) and a [full stack developer](https://roadmap.sh/full-stack), and by signing up, you will be able to:
- Keep track of your progress and also share it on your roadmap.sh profile.
- Collaborate on other official roadmaps.
- Draw your roadmap, either as an individual learner or for [Dev](https://roadmap.sh/teams) [t](https://roadmap.sh/teams)[eams](https://roadmap.sh/teams).
- [Generate new roadmaps](https://roadmap.sh/ai) with AI.

@ -7,6 +7,15 @@ seo:
title: '12 In-Demand Front End Developer Skills to Master' title: '12 In-Demand Front End Developer Skills to Master'
description: 'Master these 12 in-demand front end developer skills and become a standout candidate in the web development field.' description: 'Master these 12 in-demand front end developer skills and become a standout candidate in the web development field.'
ogImageUrl: 'https://assets.roadmap.sh/guest/frontend-developer-skills-zdpyd.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/frontend-developer-skills-zdpyd.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-07-04 date: 2024-07-04

@ -7,6 +7,15 @@ seo:
title: 'Top 7 Frontend Frameworks to Use in 2024: Pro Advice' title: 'Top 7 Frontend Frameworks to Use in 2024: Pro Advice'
description: 'Get expert advice on frontend frameworks for 2024. Elevate your web development process with these top picks.' description: 'Get expert advice on frontend frameworks for 2024. Elevate your web development process with these top picks.'
ogImageUrl: 'https://assets.roadmap.sh/guest/top-frontend-frameworks-wmqwc.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/top-frontend-frameworks-wmqwc.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-09-26 date: 2024-09-26
@ -45,7 +54,7 @@ To help in that process, I’ve defined our own set of key indicators that will
1. **Performance:** How well does the frontend framework handle real-world scenarios, including page load times, rendering speed, and efficient resource use? 1. **Performance:** How well does the frontend framework handle real-world scenarios, including page load times, rendering speed, and efficient resource use?
2. **Popularity and Community Support:** Is there a large community around the framework? How easy is it to find tutorials, forums, and third-party tools? 2. **Popularity and Community Support:** Is there a large community around the framework? How easy is it to find tutorials, forums, and third-party tools?
3. **Learning Curve:** Is the framework easy to learn for new developers, or does it require mastering complex patterns and paradigms? 3. **Learning Curve:** Is the framework an easy [frontend developer skill](https://roadmap.sh/frontend/developer-skills) to learn for new devs, or does it require mastering complex patterns and paradigms?
4. **Ecosystem and Extensibility:** Does the framework offer a robust ecosystem of libraries, plugins, and tooling to extend its functionality? 4. **Ecosystem and Extensibility:** Does the framework offer a robust ecosystem of libraries, plugins, and tooling to extend its functionality?
5. **Scalability and Flexibility:** Can the framework handle both small and large projects? Is it flexible enough to support different project types, from single-page applications (SPAs) to complex enterprise solutions? 5. **Scalability and Flexibility:** Can the framework handle both small and large projects? Is it flexible enough to support different project types, from single-page applications (SPAs) to complex enterprise solutions?
6. **Future-Proofing:** Is the framework actively maintained and evolving? Will it remain relevant in the next few years, based on trends and support? 6. **Future-Proofing:** Is the framework actively maintained and evolving? Will it remain relevant in the next few years, based on trends and support?
@ -362,7 +371,7 @@ Astro is rapidly growing in popularity, especially for static site generation, a
## Conclusion ## Conclusion
The space of frontend development continues to evolve with an impressive list of frameworks to choose from. Whether you're aiming for performance, scalability, ease of use, or future-proofing, each frontend framework brings something unique to the table. The space of frontend development continues to evolve with an impressive list of frameworks and [languages](https://roadmap.sh/frontend/languages) to choose from. Whether you're aiming for performance, scalability, ease of use, or future-proofing, each frontend framework brings something unique to the table.
* **React** remains a reliable choice for large-scale applications. * **React** remains a reliable choice for large-scale applications.
* **Vue.js** offers a perfect balance of simplicity and scalability. * **Vue.js** offers a perfect balance of simplicity and scalability.

@ -0,0 +1,415 @@
---
title: "Frontend Developer Job Description [2024 Template]"
description: 'Learn how to write the perfect frontend developer job description and get my best tips on how to recruit frontend dev talent effectively.'
authorId: william
excludedBySlug: '/frontend/job-description'
seo:
title: "Frontend Developer Job Description [2024 Template]"
description: 'Learn how to write the perfect frontend developer job description and get my best tips on how to recruit frontend dev talent effectively.'
ogImageUrl: 'https://assets.roadmap.sh/guest/frontend-developer-job-description-5fwzy.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
isNew: true
type: 'textual'
date: 2024-11-04
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Frontend developer job description example and template.](https://assets.roadmap.sh/guest/frontend-developer-job-description-5fwzy.jpg)
Frontend developers create the interface and experience that people interact with. They develop visually appealing and functional website components, such as buttons. Their work shapes how users see and interact with a company's online presence. However, as a hiring manager, finding the right frontend developer for your team can be tough. It requires a thorough evaluation of a broad range of skills and know-how.
A well-written developer job description is key to finding the right developer. The challenge, however, is writing a developer job description that attracts top talent. A poorly written job description can attract unqualified applicants and overlook top talent. If you want to hire top frontend developers, you must understand what skills and duties come with the job.
In this guide, I will show you how to create a good [front-end developer](https://roadmap.sh/frontend) job description template based on my experience hiring front-end developers. In the following sections, you'll learn about the responsibilities, skills, and what to look for when hiring candidates.
## Frontend developer job description template
Front-end developer job descriptions may differ depending on a company's requirements and needs. Based on my experience as a front-end developer recruiter and an analysis of front-end developer job descriptions on LinkedIn, Indeed, and ZipRecruiter, here is a developer job description template that covers the essential skills and qualifications that hiring managers look for in potential hires:
**Job Title: Frontend Developer.**
**Company**: [Company Name].
**Location**: [Location].
**Job Type**: Full-time.
**About Us**: **[Company Name]** is [give a brief description of the company's history and goals].
**Job Description**
**[Company Name]** seeks experienced frontend developers who are passionate about developing user-friendly designs. This role requires expertise in HTML, CSS, JavaScript, and modern frontend frameworks (React). The ideal candidate will have a strong eye for design and a deep understanding of frontend technologies.
**Responsibilities**
- Translate web design mockups and feature requirements into functional, mobile-friendly websites using HTML, CSS, and JavaScript frameworks such as React, Angular, or Vue.js.
- Work closely with UI/UX designers to translate design wireframes into reusable code and collaborate with back-end developers to integrate APIs and services.
- Ensure cross-browser compatibility and optimize applications for maximum speed and scalability.
- Write clean, maintainable, and reusable code and conduct code reviews to ensure adherence to coding standards and [best practices](https://roadmap.sh/best-practices/frontend-performance).
**Requirements**
- Professional experience building dynamic frontend web applications and websites.
- Hands-on experience in HTML, CSS, JavaScript, and modern frontend frameworks.
- Solid understanding of responsive and adaptive design.
- Ability to collaborate with product managers, back-end developers, designers, and other team members during project development.
- Experience optimizing frontend performance for maximum speed and ensuring the technical feasibility of UI/UX designs.
- Hands-on experience with version control systems such as Git.
- Experience with tools for debugging and development automation like Chrome DevTools and Webpack.
- Relevant soft skills like customer service, communication, and problem-solving skills.
- Practical experience and a strong portfolio that shows a broad range of abilities.
- Bachelor’s degree in computer science or relevant industry experience.
**Nice to Have**
- Experience with web accessibility and SEO best practices.
- In-depth understanding of UI/UX design principles.
**What We Offer**
[Insert company's offers, for example, competitive salary and benefits package, etc.].
**How to Apply**
If this role excites you, please submit your resume and cover letter to **[contact email or link to application portal]**.
**Note**: From my experience hiring frontend developers, I have seen that a bachelor's degree in computer science is often preferred, but it is not always necessary. A lot of frontend developers are self-taught or go through coding boot camps. Therefore, hands-on experience and a solid portfolio can be as valuable as a formal degree.
## Key frontend developer responsibilities
Frontend developers are essential in the development process of web applications and websites. They ensure that the final product meets the users' and business needs from start to finish.
![Key responsibilities of a frontend developer](https://images.surferseo.art/641302d8-76f9-49b1-94c8-685fa873fc06.jpeg)
Below are frontend developer responsibilities a hiring manager should look for when hiring:
- Understanding the requirements of the project.
- Develop a responsive and seamless user experience.
- Maintain and optimize existing web applications.
- Collaborate with backend web developers and other teams.
### Understanding the requirements of the project
![Understanding the requirements of the project](https://assets.roadmap.sh/guest/key-front-end-developer-responsibilities-5vttr.png)
Hiring frontend developers who understand project requirements is crucial for a hiring manager. The ideal candidate should be able to:
- Communicate effectively with development teams to get a complete understanding of project requirements.
- Collaborate with designers, QA testers, and product managers to get project feedback.
This process involves the frontend developer:
- Attending project meetings to understand the project goals and objectives. These meetings can be in person or online with the design team to get all the details needed for the design.
- Collaborating with teams to clearly define requirements and gather feedback.
- Creating quality mockups to design and improve UI components like buttons and forms.
- Writing high-quality code **(HTML, CSS, JavaScript, etc)** that meets industry standards.
- Translating project requirements into functional user interfaces that incorporate new user-facing features. Examples of these new user-facing features include buttons, menus, and other navigation elements.
Hiring frontend developers who can easily understand project requirements is very important. They help increase a development team's performance and guarantee your project's success.
### Develop a responsive and seamless user experience.
A website thrives on a responsive and seamless user experience. Are users finding what they are searching for fast enough? Is moving around the website accessible for them? Hiring a frontend developer who understands and can answer these questions is essential.
![Develop a responsive and smooth user experience.](https://assets.roadmap.sh/guest/develop-a-responsive-and-seamless-user-experience-hbiki.png)
Frontend developer duties go far beyond designing a website's appearance. They prioritize the experience of every user and ensure a website is:
- **Responsive.** Website content must be viewable on mobile applications, desktops, and several devices.
- **Easy to use and understand.**
- **Ensuring cross-browser compatibility.** Users access websites via popular browsers like Chrome. A frontend developer must ensure a website looks and works the same on all browsers. It involves following web standards and debugging compatibility issues with browser developer tools.
### Maintain and optimize existing web applications.
![Maintain and optimize performance of an existing web application.](https://assets.roadmap.sh/guest/maintain-and-optimize-existing-web-applications-7yuvl.png)
Frontend developers aren't just individual who make cool web applications or websites. They also play a critical role in maintaining existing web applications. It is crucial to hire a frontend developer who can:
- **Fix bugs:** Frontend developers help resolve website issues like browser compatibility issues, unclickable buttons, etc.
- **Optimize applications:** Frontend web developers ensure a website works well and loads fast. They are responsible for optimizing website performance, improving load times, and troubleshooting frontend issues. Frontend developers must stay up-to-date with [industry trends](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/The_web_and_web_standards#web_best_practices) and [](https://developer.mozilla.org/en-US/docs/Learn/Getting_started_with_the_web/The_web_and_web_standards)best practices. This ensures that the websites they work on are accessible, follow web standards, and provide a great user experience.
### Collaborate with backend web developers and other teams
Completing a web development project isn't something one can do alone–it takes a team effort to get it done right.
![Collaboration between backend, frontend, web designers and other team members](https://assets.roadmap.sh/guest/collaborate-with-back-end-developers-and-other-teams-mt61w.png)
It is important to hire a frontend developer who can collaborate with various teams, like:
- **Backend web developers**: [Backend developers](https://roadmap.sh/backend) handle a website's server-side logic and data management. They code the website's core functionality, such as user authentication and data processing. Frontend and backend web developers collaborate to make the website functional and secure.
- **UI designers**: UI designers are like the artists who create a website's visual elements. They design the website's layout and appearance, such as the colors, buttons, and images. Frontend developers convert the design into a working website using their technical skills. They also collaborate with the UI designer to understand feature requirements related to the project.
- **Quality assurance testers (QA testers):** QA testers play a critical role in web development. They participate in the application development process from start to finish. Their early involvement helps them spot possible issues as the application develops. The QA tester creates testing plans at each stage, like functional and unit testing. They improve user experience by working with the frontend to identify and fix bugs.
## Essential skills for a frontend developer
![Essential frontend developer skills](https://assets.roadmap.sh/guest/essential-skills-of-a-front-end-developer-970q1.png)
Creating easy-to-use websites and applications requires a broad range of technical skills. When evaluating candidates, look for proficiency in these must-have frontend developer skills:
- Strong foundation in core web development technologies, like HTML, CSS, and JavaScript.
- Strong grasp of version control systems, such as Git.
- Good knowledge of frontend frameworks and libraries, for example, React JS and TailwindCSS.
- Experience with CSS preprocessors for modular and maintainable styling, such as Sass.
- Experience with browser testing and debugging tools, like Chrome DevTools.
- Proficient understanding of web performance optimization techniques, like lazy loading.
- Experience identifying and fixing performance bottlenecks using tools such as Google PageSpeed Insights.
- Attention to detail to ensure visually consistent and error-free web applications.
- Ability to stay up-to-date with emerging technologies like progressive web apps.
## Desirable skills for a frontend developer
Desirable skills set exceptional frontend web developers apart from the rest. They demonstrate a developer's ability to excel and deliver high-quality results.
![](https://assets.roadmap.sh/guest/difference-between-front-end-developers-and-back-end-web-developers-1-vaw6v.png)
Hire a frontend web developer who can do more than just the basics by checking for the following skills:
- Excellent knowledge of accessibility.
- Basic understanding of UI/UX design principles.
- Proficient in optimization techniques.
### Excellent knowledge of accessibility
[A good understanding of accessibility](https://code.pieces.app/blog/ada-compliance-made-easy-ada-testing-for-websites-and-applications) is a skill that frontend developers should have. It involves creating websites that everyone uses, including users with disabilities.
It is essential to hire a frontend web developer who has an understanding of the following:
- Accessibility guidelines and regulations, such as [WCAG 2.1](https://www.w3.org/TR/WCAG21/).
- [Semantic HTML and ARIA attributes](https://css-tricks.com/why-how-and-when-to-use-semantic-html-and-aria/).
- [Screen readers](https://blog.hubspot.com/website/screen-reader-accessibility) and other assistive technologies.
### Basic understanding of UX and UI design principles
Front-end developers must have a foundational knowledge of UI and UX design principles. This ability allows them to create easy-to-use designs, websites, and applications. Some essential elements of UI/UX design principles are:
- **Visual design principles:** Understanding this principle is vital for frontend developers. It involves understanding basic design principles like color theory and typography. These principles provide visual consistency and help developers create functional code.
- **User-centered design:** User-centred design **(UCD)** is a more thorough approach to design. This approach prioritizes the user's needs in all design and development decisions. It involves many stages, including user research and testing, design iterations, and more.
### Proficient in optimization techniques
Hiring a frontend web developer who possesses excellent performance optimization skills is important. This skill consists of:
- Code optimization techniques (code minification, compression, etc)
- Resource optimization (image compression, lazy loading, caching, etc.)
- Rendering optimization (browser, server-side rendering, etc.)
- Browser optimization (browser caching, HTTP/2, etc.)
- Tooling optimization (Webpack, code splitting, etc.)
A frontend web developer who is proficient at performance optimization techniques will:
- Use popular tools like Lighthouse and WebPageTest to analyze performance metrics.
- Identify bottlenecks using performance-enhancing techniques like network requests and DOM manipulation.
- Implement optimization strategies using techniques like lazy loading.
- Monitor performance regressions like page load times and response times.
Hiring Frontend developers who know optimization techniques is important for the following reasons:
- They help improve search engine rankings
- Improve user experience and engage users more with the web content.
- Increase conversation rates.
- Reduce bounce rates and user frustration.
## Tools used in frontend development
Frontend web developers need tools to implement new features and build interactive websites. These tools help them bring their creative vision to life and ensure a good user experience.
![Tools used by frontend developers](https://assets.roadmap.sh/guest/tools-used-in-front-end-development-qcocc.png)
When hiring a frontend developer, prioritize their proficiency in using tools like:
- **Web building blocks**: Examples of web building blocks are HTML, CSS, and [JavaScript](https://roadmap.sh/javascript).
- **Build tools**: Examples of these tools are Grunt, Gulp, or Webpack.
- **CSS preprocessors**: Examples of CSS preprocessors are Sass, Less, and Stylus.
- **Web frameworks**: Examples of popular frameworks are TailwindCSS, [Angular](https://roadmap.sh/angular), and [Vue.js](https://roadmap.sh/vue).
- **Web libraries**: Examples of libraries are [React](https://roadmap.sh/react), Anime.js, and Chart.js.
- **Debugging tools**: Examples of debugging tools are Chrome DevTools
- **Version control systems (VCS):** Git **(e.g., GitHub, GitLab, Bitbucket)** is an example of a VCS.
## Evaluating candidates for a frontend developer job
Hiring a frontend developer is not just about evaluating their technical abilities. There's more to it than that! It's about checking their fit with the company culture, soft skills, and more.
![The evaluation process for a front-end developer job](https://assets.roadmap.sh/guest/evaluating-candidates-for-a-front-end-developer-job-ugl1z.png)
The evaluation process for a frontend developer job involves the following steps:
- Technical interviews
- Behavioral interviews
- Practical assessment
- Reference checks
### Technical interviews
Technical interviews help ensure qualified candidates have the essential skills for the job. You can conduct technical interviews via online platforms like [HackerRank](https://www.hackerrank.com/) or in-person interviews. It enables you to test their knowledge of frontend tools, ability to explain code, and more.
![Technical interviews](https://assets.roadmap.sh/guest/technical-interviews-358u3.png)
Some examples of technical interview questions for a frontend developer job include:
- Explain the difference between the undefined and null values in JavaScript
- Explain the principle of responsive web design and how you implement it.
- Explain CSS specificity and how it works.
### Behavioral interviews
Behavioral interviews test a candidate's communication, problem-solving, teamwork, and adaptability skills. They give you an understanding of how well the candidate will fit with the team and company culture.
![Behavioral interviews](https://assets.roadmap.sh/guest/behavioral-interviews-pdgyj.png)
Some examples of behavioral interview questions for a frontend developer job include:
- Can you describe a time when you had to collaborate with a designer to implement a complex UI feature?
- How do you approach debugging coding issues?
- How do you handle tight deadlines when they all seem important and urgent?
### Practical assessment
A practical assessment is a hands-on test asking the candidates to complete a task or build a project. They include take-home projects, live coding sessions, pair programming, and code review exercises. It gives you a better idea of what the candidates can do beyond what you see on their resumes.
![Practical assessment](https://assets.roadmap.sh/guest/practical-assessment-tumxb.png)
Some examples of practical assessments for a frontend web developer job include:
- Build a basic web application using React or Angular.
- Debug and fix a broken webpage or web application.
Conduct the practical assessment based on the tools mentioned in the job description. This way, you ensure you're testing if the candidates are good at the skills and tools needed for the job.
### Reference checks
Reference checks help double-check a candidate's past job history and skills. Types of reference checks include professional, peer, character references, and more. They ensure the candidate fits the company culture and matches the job description.
![Reference checks](https://assets.roadmap.sh/guest/reference-check-k6kpf.png)
Some examples of reference check questions for a frontend web developer job include:
- What do you think about the candidate's work ethic and teamwork skills?
- Would you hire the candidate again if you had the opportunity?
Ask the above reference questions to people who know the candidate inside and out. People like ex-coworkers who can vouch for their skills and personal qualities. Use phone or video calls, email or online surveys, or in-person meetings to ask these questions.
## Frequently asked questions about frontend web development
![Frequently asked questions](https://assets.roadmap.sh/guest/frequently-asked-questions-about-front-end-web-development-pipia.png)
The process of getting into frontend development is often unclear to many people. The following are some answers to common questions to help you get started.
### How long does it take to be a frontend developer?
The time required to become a frontend developer can vary from person to person. It depends mostly on how fast you learn and how much time you put into learning and practicing. But if you keep at it, you can pick up frontend development skills in just a few months to a year.
### How can I stay up-to-date with the latest front-end technologies and trends?
[Visit roadmap.sh](https://roadmap.sh/frontend) to stay up-to-date with the latest front-end technologies and trends. It provides the latest resources to help you build web applications and stay ahead as a front-end developer. Also, you can connect with other developers by [joining online communities](https://discord.com/invite/cJpEt5Qbwa) and attending tech events.
## What is the typical career path for a frontend developer?
Frontend development offers a cool career path with vast opportunities for professional development.
![Typical career path for a frontend developer](https://assets.roadmap.sh/guest/typical-career-path-for-a-front-end-developer-96zb3.png)
The following is a typical career path for a frontend developer:
- **Entry-level frontend developer**: This is the beginning of your career in frontend development. At this stage, you are learning web basics and the skills needed to become a frontend developer, building projects with HTML, CSS, JavaScript, and libraries like React. This role is also known as a junior frontend developer.
- **Mid-level frontend developer**: At this stage, you have a strong understanding of how the development process of web applications works. You have the skillset to take on complex projects and mentor junior developers.
- **Senior-level frontend developer:** Senior-level frontend developers are experts in the frontend field. At this stage, you are responsible for mentoring junior developers, leading development teams, and much more.
- **Lead frontend developer**: As a senior-level frontend developer, you can switch to either a lead frontend engineer or a product designer role. Lead frontend engineer role requires you to provide technical vision, manage teams, and collaborate with product and design teams. Also, as a product designer, you focus on user experience, interaction design, visual design, and design systems. Both paths need sound technical, leadership, communication, and strategic thinking skills.
### What are the flexible work arrangements available to frontend developers?
There are many options for frontend developers when it comes to flexible work schedules. It helps boost productivity, which can lead to many career growth opportunities.
![Flexible work arrangements available to frontend developers](https://assets.roadmap.sh/guest/what-are-the-flexible-work-arrangements-available-to-frontend-developers-vwuyc.png)
Some of the flexible work arrangements include:
- **Remote work**: Several companies offer remote work options for frontend developers. Remote work allows you to work from anywhere, anytime, as long as you meet deadlines.
- **Hybrid work:** Hybrid Work combines working from the office with remote work. So you can choose specific days to work from the office and others from home. It allows you to maintain in-person collaboration with your work colleagues.
- **Freelance work**: A freelance frontend developer benefits greatly from the flexibility of freelancing. As a freelance frontend developer, you can choose when you work and which projects you want to take on. This is one of the main advantages of working as a freelance frontend developer. But being a freelance frontend developer doesn't always come with the stability and perks of a regular job.
### Who gets paid more backend or frontend web developer?
A backend and a frontend web developer both earn competitive salaries. The difference in pay depends on factors like location, industry, and experience level.
![Role and average salary of a front-end developer](https://assets.roadmap.sh/guest/role-and-average-salary-of-backend-developer-frontend-developer-full-stack-developer-4yebg.png)
According to Indeed, here are some average salary ranges for both positions:
- **Backend developer**: $154,657 per year.
- **Frontend web developer**: $113,894 per year.
- **Full stack developer (combination of frontend and backend)**: $126,376 per year.
### Is frontend development and software development the same?
![What is the difference between frontend and software development?](https://assets.roadmap.sh/guest/is-frontend-development-and-software-development-the-same-50pji.png)
No, frontend development is not the same as software development. Frontend development is like a niche within software development. It focuses on building the user interface and user experience of web applications.
Software development is more like an umbrella term that includes many specializations, such as:
- Frontend development
- Backend development
- Full stack development
- Mobile app development.
So, you can call a frontend or backend developer a software developer.
### What is the difference between frontend developers and backend web developers?
The development process of websites and applications requires frontend and backend web developers. However, their areas of expertise and responsibilities are different.
![Difference between a frontend developer and backend web developer](https://assets.roadmap.sh/guest/difference-between-front-end-developers-and-back-end-web-developers-kwa0q.png)
Frontend developers do the following:
- Build a website or application's user interface (UI) and user experience (UX). They create the visual elements you interact with on a website, like navigation menus.
- Work with HTML, CSS, JavaScript, frontend frameworks, and libraries like React.
Back-end web developers do the following:
- Work with Java and Python programming languages and frameworks like Node.js.
- Work on the server side of the web development process. They focus on the parts of the website users cannot interact with. Examples of this include API connectivity and data storage and retrieval.
### What are the programming languages and frameworks used in frontend development?
![Programming languages and frameworks used in frontend development](https://assets.roadmap.sh/guest/frontend-frameworks-and-libraries-fyelz.png)
Frontend developers often use a combination of programming languages, frameworks, and libraries like:
- **HyperText Markup Language (HTML)**: HTML is a standard markup language for creating web pages. It is the foundation of a website, providing its structure and content for the web browser to display.
- **Cascading Style Sheet (CSS):** CSS is vital in controlling a website's visual presentation. It is a styling language that controls the layout and appearance of HTML and XHTML web pages. CSS transforms HTML elements like `<input>` into visual UI components like styled form fields. It allows frontend developers to add colors, fonts, icons, and more to websites.
- **JavaScript**: Javascript is a fundamental tool for creating user-friendly websites in web development. It is a versatile scripting language that adds interactivity to a web page. Developers can use it to create dynamic elements that respond to user interaction. It makes static websites created with HTML and CSS to be functional.
- **JavaScript frameworks**: Examples of popular JavaScript frameworks are Angular and Vue.js.
- **JavaScript libraries**: Examples of libraries are React, Anime.js, and Chart.js.
- **CSS frameworks**: Examples of popular CSS frameworks are Bootstrap and TailwindCSS.
- **CSS libraries**: Examples of CSS libraries are Animate.css and Font Awesome.
## What next?
Hiring a frontend developer requires a grasp of the skills and duties that come with the job. By adhering to the tips in this article, you can pick the perfect candidate for your team. Now that you know what it takes to succeed in this role, it's time to take the next step.
Follow the [frontend developer roadmap](https://roadmap.sh/frontend) to learn and adapt to new technologies nonstop. Roadmap has resources to help newbies and pros improve and keep up with frontend trends. It also allows you to:
- Create your own personal or [team roadmap](https://roadmap.sh/teams) or generate one using AI.
- Keep track of your frontend web developer learning journey.
- Become part of a supportive community by [signing up on](https://roadmap.sh/signup) [roadmap.sh](http://roadmap.sh) [platform](https://roadmap.sh/signup).

@ -7,6 +7,15 @@ seo:
title: 'What Front End Programming Languages Should You Learn?' title: 'What Front End Programming Languages Should You Learn?'
description: 'Get ahead in web development. Discover the essential frontend languages every pro developer uses!' description: 'Get ahead in web development. Discover the essential frontend languages every pro developer uses!'
ogImageUrl: 'https://assets.roadmap.sh/guest/best-front-end-languages-gzngm.png' ogImageUrl: 'https://assets.roadmap.sh/guest/best-front-end-languages-gzngm.png'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-05-02 date: 2024-05-02
@ -25,7 +34,7 @@ Just starting out in web or mobile development? You may feel swamped by all the
As someone who's been through this process for over a decade, I’ve made this post to make your learning journey smoother. As someone who's been through this process for over a decade, I’ve made this post to make your learning journey smoother.
I'll focus on the essential front-end languages and recommend a few important frameworks and libraries. This will equip you with the knowledge needed to make informed decisions, provide a roadmap to help you focus on the right skills, and help you build a rewarding career in [front](https://roadmap.sh/frontend)[-](https://roadmap.sh/frontend)[end](https://roadmap.sh/frontend) [development](https://roadmap.sh/frontend). I'll focus on the essential front-end languages and recommend a few important frameworks and libraries. This will equip you with the knowledge needed to make informed decisions, provide a roadmap to help you focus on the right [skills](https://roadmap.sh/frontend/developer-skills), and help you build a rewarding career in [front-end development](https://roadmap.sh/frontend).
## What are Languages, Libraries, and Frameworks? ## What are Languages, Libraries, and Frameworks?
@ -48,7 +57,7 @@ Libraries are collections of pre-written code that developers can use to perform
- JQuery - JQuery
**Frameworks** **Frameworks**
Frameworks are more comprehensive than libraries as they provide a structure or skeleton with sets of rules for building applications. They enforce architecture and offer tools, libraries, and components to streamline developments. Examples include: [Front-end frameworks](https://roadmap.sh/frontend/frameworks) are more comprehensive than libraries as they provide a structure or skeleton with sets of rules for building applications. They enforce architecture and offer tools, libraries, and components to streamline developments. Examples include:
- Vue - Vue
- Angular - Angular

@ -0,0 +1,202 @@
---
title: 'Frontend vs. Backend in AI Development'
description: 'Learn the key differences between frontend and backend in AI development, from roles to tools, and how they impact project success.'
authorId: william
excludedBySlug: '/frontend/vs-backend-ai'
seo:
title: 'Frontend vs. Backend in AI Development'
description: 'Learn the key differences between frontend and backend in AI development, from roles to tools, and how they impact project success.'
ogImageUrl: 'https://assets.roadmap.sh/guest/frontend-vs-backend-in-ai-43wtm.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false
type: 'textual'
date: 2024-10-17
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![The best frontend developer skills to learn.](https://assets.roadmap.sh/guest/frontend-vs-backend-in-ai-43wtm.jpg)
Many software developers begin their careers by choosing an area of focus: backend or front end development. If you're an aspiring software developer, understanding the differences between frontend and backend can help you choose a focus for your career path. This guide focuses on the [front-end](https://roadmap.sh/frontend) and [back-end](https://roadmap.sh/backend) development for AI.
Frontend vs Backend is a common topic in software engineering and understanding both frontend and backend development is crucial for creating effective and efficient websites. Both are essential for a well-rounded web development process. Both career paths are in high demand.
Front-end development refers to the visual elements that users can directly interact with. It is the user facing side of an application also known as the client side of an application. Back-end development includes everything the user cannot see. It focuses on the application’s overall functionality and business logic.
Despite frontend and backend developers in AI having specific roles in the overall software development life cycle, they work together to design, program, test, and deploy AI applications. They collaborate to ensure AI applications meet quality and security standards. In addition to front-end and back-end developers, there are also full stack developers. Full stack developers work and specialize in both frontend and backend of web development.
![Frontend vs Backend AI developers](https://assets.roadmap.sh/guest/frontend-backend-jk2nh.jpeg)
The table below presents a comparison of frontend vs backend development AI specializations.
| Frontend AI development | Backend AI development |
| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Focuses on the visual aspects of an AI application which is the UI and users directly interact with. | Focuses on the server-side development of an application which has data storage and the user does not directly interact with. |
| Specializes in the client side of the application. | Not concerned with the client side of web applications. |
| The front end is about user interface (UI) and user experience (UX). | Focuses on the application’s functionality and business logic. |
| Uses HTML, CSS and JavaScript as part of the toolbox. | Uses back-end programming languages like Java, C#, Python and so on. |
Let’s look at frontend vs backend in detail.
## What is frontend development for AI?
Frontend development for AI involves the design and implementation of the visual elements of an AI application. Several AI applications are being used on a daily basis, such as Chatbots, Virtual assistants, face recognition systems, etc. A user interface (UI) enables you to interact with these applications.
An AI frontend developer designs and builds the parts of an AI application that users can directly interact with. For larger projects, front-end developers will work with a digital and web designer who is responsible for creating a graphic design for the web page of the application. Frontend developers are also referred to as web developers.
Frontends are also built on other platforms asides the web, such as mobile apps for Android and iOS, or desktop apps.
The next section presents who a front-end developer is and the tools they use for building applications for the web.
## Who is a frontend developer?
A [frontend developer](https://roadmap.sh/frontend) builds the visual part of an application, which includes the parts users see and directly interact with, such as the graphical user interface (GUI) and the command line, including the design, navigation menus, texts, images, videos, etc. A page or screen a user sees with several UI components is called a document object model (DOM).
![Frontend development AI tools](https://assets.roadmap.sh/guest/frontend-ai-developer-tools-q8xnv.png)
Frontend developers build these visual parts using front end programming languages such as:
- HTML (Hypertext Markup Language)
- CSS
- JavaScript
### HTML (Hypertext Markup Language):
The basic building block of an application. It defines the markup of the language.
### CSS (Cascading Style Sheets)
Builds upon HTML and defines the layout and style of an application.
### JavaScript
The front-end programming language that adds logic to an application. It can be used for both the frontend and backend (NodeJs, ExpressJs, NestJS).
HTML, CSS, and [JavaScript](https://roadmap.sh/javascript) are fundamental tools in a frontend developer’s toolkit and are used to determine the look and functionality of the client side of an application.
In addition to these languages, there are frontend frameworks, libraries, and CSS preprocessors that help to create websites and applications efficiently. Some of the popular ones are [React](https://roadmap.sh/react), [Vue](https://roadmap.sh/vue), [Angular](https://roadmap.sh/angular), and SASS.
## Front end developers responsibilities for AI
The core responsibilities of AI front end developers include:
- Designing and developing dashboards
- Developing graphs and charts for data visualization
- Integrating with AI services
- Testing and validating the integrated AI services
- Optimizing the user experience of AI applications
### Designing and developing dashboards
A dashboard conveys different but related information in an understandable format. Frontend developers are responsible for designing and developing dashboards that convey different AI data and metrics. They use design programs to lay out a dashboard prototype and ensure that the dashboards are implemented according to specifications.
### Developing graphs and charts for data visualization
Data visualization is an important process in AI that presents data in visual formats such as graphs and charts. Frontend AI developers use libraries such as Chart.js, Plotly, and D3.js to create graphs and charts to visualize and interpret data.
### Integrating with AI services
AI front end developers connect frontend applications to AI services via Application Programming Interfaces (APIs) to fetch data and predict or perform certain actions. For example, a weather application’s frontend connects to weather prediction services through API endpoints or other means of communication and displays the information users interact with.
### Testing and validating integrated AI services
After integrating AI services into an application, frontend AI developers also test and validate that these services function properly and provide accurate and efficient data. Testing and validation are important for identifying and resolving technical issues that might come up and for addressing optimization requirements.
### Optimizing the user experience of AI applications
Frontend AI developers focus on improving the user experience of software and other mobile applications by optimizing UI elements and adding features like hovering effects or tooltips, navigation flows, and application interactions. They also iterate on designs and features with UI/UX experts based on user feedback to enhance user satisfaction and produce a responsive web design.
## Frontend developer skills for AI
To be a frontend AI developer, you need a combination of soft and technical skills. Some of the skills you require to be a frontend AI developer include:
- Deep understanding of HTML, CSS, and JavaScript/TypeScript.
- Knowledge of at least one web application framework or library, e.g., React, Vue, and Angular.
- Knowledge of data visualization libraries. e.g., Chart.js, Plotly.
- Basic understanding of machine learning and machine learning models. e.g., linear regression, random forest, etc.
- Collaboration and communication skills.
- Problem-solving skills.
## What is back end development for AI?
Back end development for AI is the design and implementation of the server side of an AI application. As opposed to frontend development, which involves the visual and interactive elements of an application, backend development involves the part of an application a user cannot directly interact with. The next section goes into detail about who a back-end developer is and their role in the software development process and lifecycle.
## Who is a back-end developer?
A [back-end developer](https://roadmap.sh/backend) specializes in the server-side development of an AI application that users cannot see and directly interact with. A back-end developer manages the behind-the-scenes part of an application, such as the servers, databases, and machine learning models that power AI applications.
![backend developer tools](https://assets.roadmap.sh/guest/ai-backend-developer-tools-nozax.png)
AI back end developers use server-side programming languages such as C#, [Java](https://roadmap.sh/java), [Python](https://roadmap.sh/python), and [Rust](https://roadmap.sh/rust) and frameworks such as [Spring Boot](https://roadmap.sh/spring-boot), [ASP.NET core](https://roadmap.sh/aspnet-core), Django, and Ruby on Rails to develop the backend of AI applications.
## Back end developers responsibilities for AI
The responsibilities of AI back end developers include:
- Database design and management
- AI model development
- Application Programming Interface design and development
- Performance optimization
### Database design and management
Data is stored and retrieved from databases. AI deals with a large amount of data, which can be structured or unstructured. Back end developers are responsible for setting up these databases to save AI data. Two common types of databases are:
- [Relational databases](https://roadmap.sh/sql) /Structured Query Language (SQL) e.g., PostgreSQL, Microsoft SQL Server
- NoSQL databases, e.g., [MongoDB](https://roadmap.sh/mongodb).
### AI model development
AI models are computer programs that recognize patterns in data and make predictions. They rely heavily on trained and untrained data, and each model is suitable for different cases. Examples of AI models include:
- Classification models, e.g., random forest, K-nearest neighbor, naive bayes
- Regression models, e.g., linear regression, decision trees
Backend AI developers use tools and frameworks such as Pandas, Numpy, Scikit-Learn, PyTorch, and so on to develop AI these AI models.
### API design and development
A backend AI developer designs and develops APIs that are consumed by the frontend of an AI application or other services. API development involves creating endpoints that provide data that users can visualize and interact with. Backend AI developers use different tools to design and document APIs; a common one is [Swagger](https://swagger.io/).
### Performance optimization
Backend AI developers are constantly optimizing the performance of AI applications. They do this by scaling applications to ensure the backend can handle large volumes of requests. The performance optimization involves code refactoring, optimizing database queries, adding caching, and load balancing.
## Backend developer skills for AI
Some of the job-ready skills needed to excel as a backend AI developer include:
- In-depth knowledge of at least one back-end programming language.
- Knowledge of database systems.
- Basic knowledge of web servers.
- Basic knowledge of how to deploy applications on cloud services or on-premise.
- Knowledge of machine learning models.
- Knowledge of data structures and algorithm
- Knowledge of web application frameworks
- Problem-solving and logical reasoning skills.
- Collaboration and communication skills.
## Which should I go for - frontend vs backend?
As you’ve seen in the frontend vs backend comparison, frontend and backend developers who specialize in AI perform different responsibilities and require various skill sets.
![Frontend vs Backend](https://assets.roadmap.sh/guest/frontend-vs-backend-development-1hox5.png)
If you like user interfaces, keen on sound design, and like the visual aspects of creating apps, then perhaps you would be most interested in becoming a front end software developer. If you are more interested in servers, databases, and how systems work behind the scenes, then you should consider backend development.
You can begin your frontend or backend engineering career by obtaining a bachelor’s degree in computer science degree from a college.
roadmap.sh provides you with step-by-step guidance on how to become a [frontend developer](https://roadmap.sh/frontend) and [backend developer](https://roadmap.sh/backend). You can also explore the [full stack developer roadmap](https://roadmap.sh/full-stack) if you are interested in learning full stack development, which is a combination of frontend and backend development. Signing up on roadmap.sh makes it easy to track your progress and also share it on your profile. You can also draw up your personalized roadmap or work with AI to [generate new roadmaps](https://roadmap.sh/ai).

@ -0,0 +1,307 @@
---
title: "Top 10 Web Developer Portfolio Templates - A Pro’s Pick"
description: 'Build an impressive online presence with these 10 handpicked web developer portfolio templates.'
authorId: ekene
excludedBySlug: '/frontend/web-developer-portfolio'
seo:
title: "Top 10 Web Developer Portfolio Templates - A Pro’s Pick"
description: 'Build an impressive online presence with these 10 handpicked web developer portfolio templates.'
ogImageUrl: 'https://assets.roadmap.sh/guest/roammap-18-xvyn0.jpg'
relatedTitle: "Other Guides"
relatedGuides:
"How to Become a Front-End Developer in 7 Steps": "/frontend/how-to-become-frontend-developer"
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false
type: 'textual'
date: 2024-10-18
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Web developer portfolio templates and examples](https://assets.roadmap.sh/guest/roammap-18-xvyn0.jpg)
As the popular saying goes, “There aren’t too many chances to make a second first impression." This is particularly important for web developers, as hiring managers and potential employers form an initial opinion of you when they see your portfolio.
Given the competitive job market, web developer portfolios are even more crucial now. Beyond possessing the necessary technical and soft skills, web developers need every tool to build a strong brand perception and leave a lasting impression on recruiters.
I’ll focus on some unique web developer portfolio templates and discuss what made them distinctive and a great choice for your next inspiration. This will equip you with the knowledge needed to make informed decisions about the importance of a portfolio, the features to include, and ultimately, how to choose the right template.
## Top web developer portfolio examples to inspire you
To save time and get started quickly, below are some carefully curated web developer portfolio examples you can adopt and customize to suit your personal brand:
- Minimau
- Stimulus
- Lendex
- Nichol
- Mikon
- Noah
- Zyan
- iPortfolio
- Ethereal
- Steve
### Minimau (Premium)
Minimau is a [React](https://roadmap.sh/react)-based portfolio template that is extensible, customizable, and well-documented. It is compatible with the latest version of React and Bootstrap, ensuring that your portfolio remains up-to-date with current web development practices.
Here’s why you should consider Minimau as a template for your portfolio:
- A grid layout with Google font and FontAwesome icon integrated.
- Support for social media profiles.
- **World Wide Web Consortium (W3c)**-validated with clean code and cross-browser compatibility.
- Support for theme-switching (light theme and dark theme).
[Live demo link](https://preview.themeforest.net/item/minimau-react-minimal-portfolio-template/full_screen_preview/26303041).
![minimau preview](https://assets.roadmap.sh/guest/minimau-pghii.png)
### Stimulus (Free)
Stimulus is a great example of a well-designed HTML resume template with a metro-style block of content. Its mixture of gold, orange, and red colors is extensible and customizable. Additionally, its design is both extensible and customizable, which makes it easy for you to tailor the template to fit your personal branding and unique style.
Here's why Stimulus is a great template for your portfolio:
- A grid layout with unique blocks of content that you can easily use to showcase your work.
- Fast and lightweight because of minimal dependencies.
- Support for social media integration.
[Live demo link](https://templatemo.com/tm-498-stimulus).
![Stimulus preview](https://assets.roadmap.sh/guest/stimulus1-n4srr.png)
### Lendex (Premium)
Lendex is a unique design portfolio template with an elegant and creative design. It uses the latest version of BootStrap, which is responsive and cross-browser compatible.
The structure and in-build features make it a compatible portfolio template for a front end developer, visual artist, freelance web designer, content creator, and other creatives.
Here’s why you should consider Lendex as a template for your portfolio:
- Support for Google Fonts and Icofont.
- W3c-validated HTML files and cross-browser compatibility.
- Out-of-the-box support for blogging functionality.
- Support for embedded video player.
[Live demo link](https://preview.themeforest.net/item/lendex-personal-portfolio-bootstrap-5-template/full_screen_preview/31542002).
![lendex preview](https://assets.roadmap.sh/guest/lendex1-jivuj.png)
### Nichol (Premium)
Nichol is a well-documented portfolio built with [Vue](https://roadmap.sh/vue), TailwindCSS, and [JavaScript](https://roadmap.sh/javascript). The design is clean, modern, and fully responsive and includes NPM support to integrate desired packages.
Here's why Nichol could be the ideal template for your portfolio:
- Fully customizable in terms of page layout and theme switching.
- Support for Google font, Fonts, Icofont.
- W3c-validated HTML files and cross-browser compatibility.
- Support for animations to enhance user experience.
- Timeline view of education and experience.
[Live demo link](https://nichol-vuejs.vercel.app/).
![Nichol preview](https://assets.roadmap.sh/guest/nicho-vc283.png)
### Mikon (Premium)
Mikon is a creative, modern, and responsive portfolio template built with [Angular](https://roadmap.sh/angular), CSS, SCSS, and BootStrap. It is minimal, single-paged, and distinctly sectioned to show essential details at each glance.
Here's why Mikon makes a great template for your portfolio:
- Fully customizable with scroll spy enabled (updates navigation link based on current scroll position).
- Support for Google font, Fonts, and Icofont.
- W3c-validated HTML files and cross-browser compatibility.
- Support for animations to enhance user experience.
[Live demo link](https://preview.themeforest.net/item/mikon-angular-personal-portfolio-template/full_screen_preview/47436527).
![Mikon preview](https://assets.roadmap.sh/guest/mikon-aqk09.png)
### Noah (Free)
Noah is a unique and elegant template suitable for personal web developer portfolios, personal blogs, and personal resume websites. It has an artistic look and a simple, minimal design.
Here’s why you should consider Noah as a template for your portfolio:
- Support for multi-page template and image slideshow.
- Load on scroll animation.
- Off-canvas side navigation.
- Newsletter subscription form UI.
[Live demo link](https://themewagon.com/themes/free-html5-personal-landing-page-template-noah/).
![Noah preview](https://assets.roadmap.sh/guest/noah-qyycw.png)
### Zyan (Premium)
Zyan is a template specifically suited for creative developers looking to showcase their web development skills. It has a sleek, modern design and is fully responsive on all screens.
Here’s why Zyan is worth considering as a template for your portfolio:
- Custom cursor to enhance experience.
- Load on scroll animation for an enhanced experience.
- Support for embedded video player.
- Uses modern tools like GSAP, Slick Slider, FontAwesome, etc.
[Live demo link](https://codeefly.net/wp/zyan/)
![Zyan preview](https://assets.roadmap.sh/guest/zyan-k0g1e.png)
### iPortfolio (Free)
iPortfolio is a unique template that took a different approach of using a dashboard-like layout to structure the menu. Instead of the traditional approach of having the navigation menu at the top, iPortfolio puts the menu on the left side of the screen. This sidebar navigation provides a modern, streamlined look and enhances the user experience by making it easy to access different sections of your portfolio.
Here’s why iPortfolio is worth considering as a template for your portfolio:
- The unique sidebar layout makes the portfolio stand out.
- Support for animation and micro-interaction to enhance the user experience.
- Cross-browser compatibility and responsive to various screen sizes.
[Live demo link](https://bootstrapmade.com/demo/iPortfolio/)
![iPortolio preview](https://assets.roadmap.sh/guest/iportfolio1-hb7mf.png)
### Ethereal (Free)
Ethereal is a portfolio template crafted with creative developers in mind. It features a distinctive horizontal layout you can use to present your projects, case studies, and personal stories in a visually engaging and unconventional way. This layout is perfect for showcasing your work with a narrative flow.
Here’s why you should consider Ethereal as a template for your portfolio:
- The horizontal layout makes the portfolio stand out.
- Dedicated sections to showcase various projects, case studies, personal stories, and other [front end development skills](https://roadmap.sh/frontend/developer-skills).
- Designed to be easily customized and extended.
[Live demo link](https://html5up.net/ethereal)
![Ethereal preview](https://assets.roadmap.sh/guest/ethereal1-6x21l.png)
### Steve (Free)
Steve is a portfolio template with a neat and clean design that is ideal for web designers, web developers, graphics designers, or similar professions. This portfolio showcases a minimalist approach that ensures that your work and skills take center stage, which provides you with a polished and professional platform to showcase your projects, experience, and personal brand.
Here’s why you should consider Steve as a template for your portfolio:
- A distinct call to action to capture potential employers' attention.
- Contact form with custom validation.
- Testimonial carousel to showcase proof of work.
- Dedicated blog section.
[Live demo link](https://technext.github.io/steve/index.html)
![Steve preview](https://assets.roadmap.sh/guest/steve1-agtae.png)
### Bonus: Astro themes
Astro themes offer a collection of free and premium templates that you can use for your next portfolio website. They provide a wide range of options to help you build **portfolios**, landing pages, e-commerce sites, and more.
Here’s why you should consider Astro themes when choosing a template for your portfolio:
- Flexible option to select a template based on your preferred styling libraries or frameworks (such as TailwindCSS, PostCC, and UnoCSS)
- A wide selection of free and premium templates to help you get started quickly
- The ability to choose templates based on your favorite development technologies (like React, Vue, or Svelte)
[Live demo link](https://astro.build/themes/?search=&categories%5B%5D=portfolio)
![Astro theme](https://assets.roadmap.sh/guest/astro-m2r6h.png)
Now that you have seen some of the best templates you can adopt for your portfolio, let's take a look at some of the reasons why the selected templates stood out among thousands of options.
## What do top web development portfolios have in common
Having a well-structured web development portfolio is crucial for showcasing your technical and web design skills to potential employers. While the template you choose may depend on factors like your intended role and work experience, all portfolios share some common elements to showcase:
- Personal brand
- Showcase skills and expertise
- Highlight live projects and contribution
- Build credibility
- Networking and opportunities
1. **Personal brand**: The portfolio should have a personal bio or summary that gives a clear representation of who the developer is.
2. **Showcase skills and expertise**: The portfolio should highlight the owner's competencies. Demonstrates proficiency in various technologies, frameworks, libraries, and tools used in [frontend](https://roadmap.sh/frontend) or [backend](https://roadmap.sh/backend) development. In addition, consider showcasing your professional certifications, companies worked for, and years of experience.
3. **Highlight project and contribution**: The portfolio should contain work or project sections to demonstrate real-world impact. It can also include community engagement, like open source projects, technical writing, and public speaking.
4. **Build credibility**: Web developer portfolios are one of the best ways to build brand and credibility. They allow you to showcase your professional image, provide proof of your work, and share testimonials from colleagues or previous clients.
5. **Networking and opportunities**: Portfolios are a great marketing tool for crafting a unique online presence and increasing visibility. They are useful during your job applications because they help you stand out to potential employers and are also ideal for showcasing the latest personal projects on professional networks like LinkedIn.
With the opportunities offered by a portfolio, it can sometimes become overwhelming to decide what to add and how to structure it, especially if you have extensive experience in frontend development, backend, and other web development areas. Let’s look at these aspects in detail.
## What makes a developer’s portfolio stand out from the rest?
A well-crafted developer’s portfolio is important for showcasing your technical skills and experience. We can narrow it down to essential features that every portfolio must have, and optional features that can help you stand out when applying for jobs or bidding on projects.
### Essential features
- **Introductory and About Me section**: This section should include a brief introduction about yourself, your background, and your expertise. It’s also a great place to include your name, location, and any other interesting details about yourself.
- **Skills and technologies section**: This section shows the different skills and proficiencies, such as crafting responsive designs, enhancing user experience, building APIs, and managing databases. It can also include [front end programming languages](https://roadmap.sh/frontend/languages), [frameworks](https://roadmap.sh/frontend/frameworks), databases, and other specialized skills.
- **Project section**: This section highlights your best work and can include demo links, GitHub links, screenshots, project overview, technologies used, and any other essential details.
- **Experience section**: This section shows your work history and highlights what you have done, including the timeline.
- **Contact section:** One of the main goals of having a portfolio is to attract potential clients or employers. It is crucial for anyone looking at your portfolio to easily contact you using any of the mediums like contact forms, email addresses, or social media links (like GitHub profiles, LinkedIn, or any other relevant links).
### Optional features
- **Theming**: Your portfolio can contain a theme switcher (dark and light modes) and color schemes to further personalize the visitors' experience.
- **Engaging animations** and engaging design can further enhance the visitor's experience, making your own portfolio stand out.
- **Testimonials**: References and appraisals from clients, colleagues, or managers that validate your skills and work ethic might be a valuable addition to your portfolio.
- **Blog**: Including guides, articles, blog posts, and other written content can help establish you as a thought leader and demonstrate your expertise and passion for the field, which can then boost your portfolio.
## What are the criteria for choosing a web developer portfolio template?
The number of templates available can be overwhelming, especially considering that more developers are open-sourcing their work. Questions like "**Should I clone a template and modify it?"**, **"Is accessibility and Search Engine Optimization (SEO) support available?"** **"Should I use a website builder?"** and many more may arise.
In this section, we will look at best practices and tips that will help you make the right decision. Here are the points to consider:
- Design and aesthetics
- Content layout
- Technical features
- Compatibility
- Cost and licensing
- User experience
### Design and aesthetics
The template should have a clean, modern, and professional design that captures your brand with consistent elements across all pages. Additionally, visual elements, such as colors, fonts, layouts, images, etc., should be customizable.
### Content layout
The portfolio template should have a dedicated section to easily access contact information, learn more about you, and showcase your work experience.
### Technical features
The template should have good SEO support, follow accessibility guidelines, be compatible with all major browsers, and support Open Graph tags (information previews) when shared on social media.
### Compatibility
If you intend to manage your portfolio content with a **Content Management System (CMS)**, leverage web development-specific libraries, or use cloud-based media storage to optimize media, choosing a template compatible with and supports desired tools and technologies is important.
### Cost and licensing
Ensure that the template you intend to use allows you to use it freely as you wish. Additionally, consider your budget, as templates range from free to premium.
### User experience
The template should be well-structured with a good sitemap, excellent information architecture, and intuitive navigation. It should also be responsive (like mobile devices) and have good loading speed.
Your personal portfolio usually crafts the first impression for potential employers and clients. Investing time in creating a well-designed, structured, and user-friendly portfolio that captures your experience is important.
Additionally, web developer portfolios are not a one-time effort. They require constant updates on your latest projects. The [roadmap.sh](https://roadmap.sh)’s [frontend development roadmap](https://roadmap.sh/frontend) is a valuable resource to keep your skills up to date, and our [frontend developer questions](https://roadmap.sh/questions/frontend) guide can help you to ace your next interview. Additionally, you can track your learning paths and connect with a vibrant community by [signing up](https://roadmap.sh/signup) on the roadmap.sh platform.

@ -0,0 +1,191 @@
---
title: 'Full Stack Developer Job Description [2024 Template]'
description: 'Looking to hire a Fullstack Engineer? Get the complete job description, skills, and responsibilities right here!'
authorId: william
excludedBySlug: '/full-stack/job-description'
seo:
title: 'Full Stack Developer Job Description [2024 Template]'
description: 'Looking to hire a Fullstack Engineer? Get the complete job description, skills, and responsibilities right here!'
ogImageUrl: 'https://assets.roadmap.sh/guest/fullstack-job-h15x6.jpg'
isNew: false
type: 'textual'
date: 2024-11-01
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Full Stack developer job description example and template.](https://assets.roadmap.sh/guest/fullstack-job-h15x6.jpg)
One of the main challenges I face as a hiring manager looking for a full stack engineer is assessing the versatility of potential candidates. With tons of applications to review, I need to make decisions about potential hires and ascertain that they are knowledgeable in both front-end and back-end languages, frameworks, and tools.
This guide will discuss who a [full stack engineer](https://roadmap.sh/full-stack) is, their job description, roles, and objectives. It will also cover the essential skills and qualifications I look out for when hiring candidates for a full stack developer role.
Here is a summary of the full stack developer job description:
- Design and develop the user interface of the application using technologies such as HTML, CSS, and JavaScript.
- Build and manage server-side logic, databases, and application programming interfaces (APIs) using technologies such as JavaScript, Python, Java, Go, and Rust.
- Connect the frontend application to the backend services and ensure a seamless data flow from the client to the server.
- Solve business problems by writing clean, maintainable, and reusable code.
- Collaborate with other stakeholders in the project to ensure the go-live of the project.
## Full stack engineer job description template
The complexity of a project, the technology adopted, and the domain knowledge are some factors that might influence the job description of a full stack engineer. Based on my experience as a full stack engineer recruiter and an analysis of full stack engineer job descriptions on popular platforms like LinkedIn and Indeed, here is a template of a full stack developer job description you can adopt during your hiring process:
**Job title: Full stack engineer.**
**Company**: [Company Name].
**Location**: [Supported location, region, hybrid, or remote].
**Job Type**: [Full-time, Part-time, or Contract].
**About Us**: [Company Name] is [give a brief description of the company’s history and goals].
**Job Description**
[**Company Name**] is looking for an experienced full stack engineer. As a full stack engineer, you will develop and manage [**company products and features**] and collaborate closely with [**company teams**]. The ideal candidate will have a solid understanding of frontend and backend technologies.
**Responsibilities**
- Development of new business applications based on detailed specifications.
- Working with project stakeholders to shape project scope, approach, and structure.
- Identify and fix bugs on both frontend and backend codebases.
- Designing project specifications and translating them into implementation details.
- Write clean, maintainable, and reusable code based on [best practices](https://roadmap.sh/best-practices/backend-performance).
- Performing code reviews and mentoring junior frontend, backend, and full stack developers to support the organization's growth.
**Requirements**
- Professional experience in full stack engineering.
- Built APIs and microservices with Python.
- Strong proficiency in frontend technologies like HTML, CSS, JavaScript, and modern frameworks like React.
- Good understanding of databases and data management systems.
- Basic knowledge of CI/CD pipelines.
- Experience with debugging and automation tools like Jenkins and Ansible.
- Bachelor’s degree in computer science, computer engineering, or a related field (or equivalent experience).
**Nice to have**
- Experience with Docker.
- Familiarity with server-side events and streaming services.
- Prior experience in a similar role within a distributed team.
**What we offer**: [Company’s offer like workspace setup allowance, training, and other pecks].
**How to apply**: [Mode of application (email or job portal), resumes, cover letters, and any other required information].
## What skills should I look for in a full stack engineer?
A full stack engineer requires a diverse set of skills spanning across technical knowledge and other complementary skills. These are some required skills I look out for when hiring:
- Frontend development skills.
- Backend development skills.
- Basic DevOps skills.
- Testing and caching skills.
- Soft skills.
### Frontend development skills
Full stack engineers must have a good understanding of [frontend development skills](https://roadmap.sh/frontend/developer-skills). These include proficiency in languages like HTML, CSS, and [JavaScript](https://roadmap.sh/javascript), which are essential for creating structure, responsive design, and implementing interactive web functionalities. Additionally, they should be skilled in leading JavaScript libraries and frameworks like [React](https://roadmap.sh/react), [Vue](https://roadmap.sh/vue), and [Angular](https://roadmap.sh/angular), which can be used to develop medium to large applications.
![frontend skills](https://assets.roadmap.sh/guest/frontend-development-common-languages-o88e3.png)
### Backend development skills
A full stack engineer must possess strong [backend developer skills](https://roadmap.sh/backend/developer-skills). These include a deep understanding of [API design and development](https://roadmap.sh/api-design), database management, and [security best practices](https://roadmap.sh/best-practices/api-security). Additionally, proficiency in server-side programming languages such as [JavaScript](https://roadmap.sh/javascript), [Java](https://roadmap.sh/java), [Python](https://roadmap.sh/python), C#, [Go](https://roadmap.sh/golang), and [Rust](https://roadmap.sh/rust) is important.
![Backend skills](https://assets.roadmap.sh/guest/backend-programming-common-languages-gzcyd.png)
### DevOps skills
In full stack development, [**DevOps skills**] are highly valuable. A basic understanding of how to package software using Docker or Kubernetes, deploy and automate software delivery, and familiarity with cloud providers such as [AWS](https://roadmap.sh/aws), Google Cloud Platform, and Azure will come in handy.
![DevOps](https://assets.roadmap.sh/guest/devops-p4c0y.png)
### Testing and performance improvement skills
In full stack development, proficiency in automated testing and debugging is essential for identifying and resolving bugs in both frontend and backend code. Moreover, a strong grasp of caching techniques and technologies such as Redis can significantly enhance application performance and improve the overall user experience.
![testing and performnace](https://assets.roadmap.sh/guest/testing-and-performance-improvement-skills-1z2hm.png)
### Soft skills
While technical skills are essential, full stack engineers must also possess a strong soft skill set. Full stack developers must have good communication skills (written and spoken), organization skills, and the ability to collaborate effectively with other team members to ensure the project's success.
![Soft skills](https://assets.roadmap.sh/guest/soft-skills-qnz1f.png)
## Additional skills to consider when hiring full stack engineers
As a hiring manager in the current job market, you will get to review multiple CVs and profiles when hiring a full stack engineer. It is important to identify additional skills to help narrow the search and pick the right candidate for the role. Below are some additional skills to look for:
- Problem-solving
- Stakeholder communication
- Adaptability
- Project management
- Community and networking
### Problem-solving
A full stack engineer should be able to tackle complex problems spanning both the client and server sides of applications. They must demonstrate a solid problem-solving mindset and creative solutions through projects, open-source contributions, and other endeavors.
### Stakeholder communication
Beyond collaborating with other teams to ensure a smooth software development process, it is even more important for full stack engineer to articulate technical concepts to non-technical stakeholders, as the success or failure of the project depends on them.
### Adaptability
Frameworks, libraries, design principles, and so on will continue to evolve. Full stack engineer candidates must demonstrate a track record of quickly acquiring new skills and technologies.
### Project management skills
Working on multiple projects simultaneously is inevitable. Full stack engineer candidates should have a basic understanding of project management principles and methodologies like Agile and Scrum. Additionally, they should be able to manage their time, prioritize tasks, and meet deadlines.
## Community and networking
As a hiring manager looking for a full stack developer, you should seek candidates who actively participate in developer communities, attend meetups, contribute to open-source projects, and join hackathons. This shows that they have a growth mindset, can easily unblock themselves by leveraging community engagement, and can increase their skills.
## Common interview questions when hiring for full stack engineer role
While CVs, resumes, and portfolios give you an idea of what a potential candidate is capable of, you still need to conduct interviews to determine if the candidate fits the role. Check out these interview questions that can help you check if they're a good fit:
### What programming languages and frameworks are you most comfortable with?
Look for proficiency in languages and frameworks related to your company’s current tech stack.
### What types of databases have you worked with?
Assess the candidate's understanding of SQL and NoSQL databases, ability to explain pros and cons, and what influences their decision to use a particular database.
### What's your approach to ensuring responsive design across different devices?
Look for knowledge of design principles, mobile-first approach, and familiarity with CSS frameworks.
### How do you handle API security and authentication in your projects?
Look for proficiency in authentication methods (like JWT and OAuth) and security best practices.
### How do you collaborate with non-technical team members?
Look for strong communication skills, ability to explain technical concepts in simple terms, and empathy.
### Ask scenario-based questions like “If our main application went down, what steps would you take to diagnose and resolve the issue?”
Look for their approach to troubleshooting, ability to remain calm under pressure, and knowledge of debugging.
## Wrapping up
The possibilities offered by the web will continue to evolve, and the role of software engineers building for it will also change. While the internet is filled with resources such as courses, articles, and blogs on front-end, back-end, and full stack engineering skills and job descriptions, these often become outdated quickly. Therefore, a reliable source of truth is needed. [The full stack developer roadmap](https://roadmap.sh/full-stack) is a source of truth for hiring managers looking for full stack engineers.
Additionally, roadmap.sh has a [supportive community](https://roadmap.sh/discord), a goldmine for connecting with full stack engineers and spotting potential employees.

@ -0,0 +1,183 @@
---
title: 'Full stack vs Back end: What are the differences?'
description: 'Full-stack vs Back-end: Learn the key differences in skills, roles, and technologies and find the right development path for you.'
authorId: william
excludedBySlug: '/full-stack/vs-backend'
seo:
title: 'Full stack vs Back end: What are the differences?'
description: 'Full-stack vs Back-end: Learn the key differences in skills, roles, and technologies and find the right development path for you.'
ogImageUrl: 'https://assets.roadmap.sh/guest/full-stack-vs-backend-y0i1g.jpg'
isNew: false
type: 'textual'
date: 2024-10-17
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Key differences between full stack vs backend developers](https://assets.roadmap.sh/guest/full-stack-vs-backend-y0i1g.jpg)
Thinking about getting into web development? You've probably heard job titles like full stack developer, backend developer, frontend developer, design engineer, and many more.
Let's focus on two great options: **full stack** and **backend development**. Both are rewarding paths if you want to build websites and apps. These roles work together to create the websites and apps you use every day on the internet.
While each role works towards the common goal of creating an application that users can access from anywhere via the Internet, they differ in their responsibilities. Understanding these differences is important, whether your goal is to pick up a new skill, change career path, or secure a job.
This guide provides an in-depth discussion of the key differences between [full stack](https://roadmap.sh/full-stack) and [backend](https://roadmap.sh/backend) development, what they entail, their similarities, and the web ecosystem changes. Finally, it offers roadmaps for your full stack or backend journey.
The table below summarizes the major differences:
| Full stack Development | Back end Development |
|------------------------|----------------------|
| Build both the client-side (frontend) and server-side (backend) of the application. | Specializes only on the server-side of the application. |
| Uses frontend and backend languages such as HTML, CSS, JavaScript, Java, PHP, etc. | Proficient only in backend programming languages like Python, C++, Java, etc. |
| Responsible for frontend web development tasks such as crafting responsive web design, enhancing user experience, and ensuring accessibility, as well as backend development tasks like managing databases, implementing security measures, caching, and writing APIs. | Responsible for only the server-side logic like managing database, security, caching, and writing APIs. |
| Have the highest earning potential. | Lower earning potential as compared to full stack development. |
| Uses libraries and frameworks that work on the client or server, or both. | Uses libraries and frameworks that work only on the server. |
| Most challenging to learn as it involves combining frontend and backend development | Relatively easier to learn as compared to Full stack as it focuses only on the backend development |
| Highest number of jobs available | Lower number of jobs as compared to full stack development |
Let's look at the differences in detail.
## Differences between Full stack and Backend development
These are the key differences between full stack and backend discussed under the following criteria:
- Focus
- Roles and ownership
- Technologies
- Skill sets
- Salary and job opening
- Learning curve
![full stack vs backend](https://assets.roadmap.sh/guest/differences-between-full-stack-and-back-end-development-ms2vk.png)
## Focus
The primary focus of a full stack developer is to develop both the client-side and the server side of a web application, while backend development focuses solely on the server side.
## Roles and ownership
Full stack development entails broader ownership and responsibility, covering both frontend and backend technological aspects of the application. In contrast, backend development's ownership and responsibilities are confined to the server side.
## Technologies
A Full stack web developer has a broader skill set covering both frontend and backend technologies. This includes markup languages like HTML and CSS, and scripting languages such as JavaScript, Python, and Java, and frameworks like React, Vue, Django, [Spring Boot](https://roadmap.sh/spring-boot), and Laravel.
Similarly, backend development utilizes server-side programming languages like Python, Ruby, Java, JavaScript (Node.js), and Go, along with frameworks such as Django, Ruby on Rails, Express.js, and Gin-gonic.
## Skill sets
A full stack developer has a wide range of skills that encompass both frontend and backend principles. They can work on user interface design, human-computer interaction, and client-side security, caching, queues, and system design. While full stack developers can touch all elements of an application, backend developers typically have deeper expertise in backend principles due to their focused specialization.
## Salary and job opening
Based on reviews of popular job posting platforms like LinkedIn, Indeed, and Glassdoor, Full stack developers have more job openings and higher average salaries as compared to backend developers.
## Learning curve
Backend development is relatively easier to learn because its core focus is on backend languages, libraries, frameworks, and other server-side development. In contrast, full stack development combines both frontend and backend development, making it more challenging to learn.
While the points above cover the fundamental differences between full stack and backend development, it's worth noting that their roles and responsibilities can also vary depending on factors such as the organization, industry, and project scope.
Understanding each role and its responsibility is important. Let's look at those next.
## What is Full stack development?
The term "Full stack" refers to a developer who knows both the frontend and the backend of a web application. Full stack developers are versatile enough to handle all aspects of a web project, from constructing dynamic user interfaces that users can see and interact with to managing the server-side logic, database, and server management.
The following are some of the key aspects of full stack development:
- Frontend technologies
- Backend technologies
- Application Programming Interfaces (API) design
- Database
- Deployment
- Security
- Adaptability
## Frontend technologies
A deep understanding of frontend popular languages like HTML, CSS, and [JavaScript](https://roadmap.sh/javascript) is fundamental for building robust and scalable applications. Additionally, as a frontend developer, expertise in determining when and how to utilize frontend development frameworks and libraries like [React](https://roadmap.sh/react), [Vue](https://roadmap.sh/vue), [Angular](https://roadmap.sh/angular), and others is crucial for crafting dynamic applications that are responsive, accessible, and compatible across various browsers.
![html css and javascript](https://assets.roadmap.sh/guest/frontend-development-common-languages-25kzq.png)
## Backend technologies
Proficiency in server-side languages such as [Java](https://roadmap.sh/java), [JavaScript (Node.js)](https://roadmap.sh/nodejs), [Python](https://roadmap.sh/python), C#, [Go](https://roadmap.sh/golang), [Rust](https://roadmap.sh/rust), and their respective frameworks and libraries is essential for constructing scalable and robust services. Backend developers work behind the scenes, building the software required for the website and application user interface to be fully functional.
![Back end technologies](https://assets.roadmap.sh/guest/backend-programming-common-languages-oyd3s.png)
## Application Programming Interfaces (API) design
A [solid understanding](https://roadmap.sh/api-design) of designing, building, and implementing APIs is essential in full stack development. Additionally, knowing when to adopt different API protocols like REST, [GraphQL](https://roadmap.sh/graphql), WebSocket, and gRPC ([Google Remote Procedure Call](https://grpc.io/)) is also important.
![API design](https://assets.roadmap.sh/guest/application-programming-interfaces-design-dybns.png)
## Database
Determining whether to utilize a relational database management system like [PostgreSQL](https://roadmap.sh/postgresql-dba) or a non-relational database like [MongoDB](https://roadmap.sh/mongodb), opt for stored procedures, or an object-relational mapping (ORM) for data management are important decisions a full stack developer must address. Additionally, a good understanding of designing schemas and optimizing queries is also important.
![Relational vs Non-Relational Database](https://assets.roadmap.sh/guest/relational-vs-non-relational-database-k4mwi.png)
## Deployment
The essence of building an application is to ensure that the target users can access it without restrictions and utilize it as intended. Full stack developers should understand deployment strategies and cloud platforms like [AWS](https://roadmap.sh/aws), Azure, and Google Cloud.
![Clouds deployment — AWS vs Azure vs GCP](https://assets.roadmap.sh/guest/clouds-deployment-nhvx3.png)
## Security
Exposing the application to the internet makes it susceptible to attacks. Therefore, familiarity with [security best practices](https://roadmap.sh/best-practices/api-security) and vulnerabilities is crucial to ensuring the integrity and safety of these applications.
![Web Security](https://assets.roadmap.sh/guest/web-security-6r9gg.png)
## Adaptability
Open-source and research activities have constantly changed the web development ecosystem. Full stack developers must be willing to learn new technologies, know when to build from scratch or use third-party solutions, and adapt to changing project requirements.
## What is Backend development?
Unlike full stack development, which combines the roles of frontend developers and backend developers to build applications, backend web development focuses solely on the server side. Backend developers handle tasks that occur behind the scenes and are not directly visible to users, including managing data, executing complex logic, and managing databases.
Backend development is divided into the presentation layer(which handles requests and responses), the business layer(which handles logic like calculation and data processing), and the data access layer (which handles database interactions). It uses server-side technologies similar to a full stack developer.
## Similarities between Full stack and Backend development
Full stack and backend development share several similarities as they both work on the server side of the application. Below are some key similarities in the web development process between full stack and backend:
- Both work on server-side functionality, such as business logic, database interaction, and data processing.
- Design and implement APIs to facilitate communication between software components.
- Both ensure the security and integrity of user data.
- Collaborate with other team members and business stakeholders to ensure project success.
- Both handle errors, edge cases, and other difficult technical aspects of the application.
- Both are involved in designing and architecting scalable systems.
## Web development in the modern era: Full stack vs Backend
While the web's possibilities are exciting and fascinating, they have also changed the roles and responsibilities of developers building applications for it. Let's consider the points below as a case study of how these changes might affect full stack and backend development:
## Collaboration
While full stack development's role and responsibilities are collaborative in nature compared to the specialized focus of backend development, the current innovative trend will further heighten the demand for collaboration. Full stack developers will increasingly collaborate with various stakeholders to build performant and dynamic applications. This may also require backend developers to expand their role beyond their traditional domain.
![Collaboration](https://assets.roadmap.sh/guest/collaboration-7sg14.png)
## Versatility
As the web offers more opportunities, organizations will migrate their core applications from native platforms to web-based solutions, necessitating developers to embrace versatility and acquire new skills.
For full stack web developers who already navigate both frontend and backend development fields, they are well-positioned to adapt to changing demands by acquiring additional skills to meet business needs and project requirements. Similarly, backend developers may need to adjust their roles and embrace expanded responsibilities that extend beyond their domain-specific tasks to leverage the possibilities presented by this transition fully.
![Versatility](https://assets.roadmap.sh/guest/versatility-surv2.png)
## Job role
The new possibilities offered by the web will undoubtedly reshape job descriptions and shift the required skills of developers building for the web. Full stack and backend developer in the tech industry may need to evaluate their career goals, upskill, and embrace these changes to remain competitive and build dynamic solutions.
The possibilities offered by the web, coupled with evolving business requirements, require developers to upskill and stay updated continuously with the latest changes. A reliable source of truth is important for this journey. The [full](https://roadmap.sh/full-stack) [](https://roadmap.sh/full-stack)[stack development](https://roadmap.sh/full-stack) and [backend development](https://roadmap.sh/backend) roadmap are valuable resources for experienced and beginner developers looking to explore a career in web development.
Additionally, these roadmaps allow you to track your progress, showcase your skills to potential employers, and become [part of a supportive communit](https://discord.com/invite/cJpEt5Qbwa)[y](https://discord.com/invite/cJpEt5Qbwa).

@ -7,6 +7,15 @@ seo:
title: 'How to become a DevOps Engineer in @currentYear@' title: 'How to become a DevOps Engineer in @currentYear@'
description: 'Want to become a DevOps engineer? Our @currentYear@ guide covers skills, certifications, and expert career advice. Start your journey today!' description: 'Want to become a DevOps engineer? Our @currentYear@ guide covers skills, certifications, and expert career advice. Start your journey today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/become-devops-engineer-4x2p7.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/become-devops-engineer-4x2p7.jpg'
relatedGuidesTitle: 'Other Guides'
relatedGuides:
'Is DevOps engineering a good career path in 2024?': '/devops/career-path'
'10+ In-Demand DevOps Engineer Skills to Master': '/devops/skills'
'DevOps engineer vs Full stack developer: Which is best?': '/devops/vs-full-stack'
'11 DevOps Principles and Practices to Master: Pro Advice': '/devops/principles'
'What Are the 7 Key Phases of the DevOps Lifecycle?': '/devops/lifecycle'
'Why Does DevOps Recommend Shift-Left Testing Principles?': '/devops/shift-left-testing'
'What is DevOps Automation? 8 Best Practices & Advice': '/devops/automation'
isNew: false isNew: false
type: 'textual' type: 'textual'
date: 2024-06-11 date: 2024-06-11
@ -47,55 +56,60 @@ Let’s dive into the essential skills required for a DevOps engineer.
## Skills required to become a DevOps engineer ## Skills required to become a DevOps engineer
### Operating system ### Operating system
A DevOps engineer should understand the operating system, especially Linux (distribution or any variant). This is because most of the servers in use are Linux-based, so having a solid foundation in the Linux OS is imperative for infrastructure management and troubleshooting. A DevOps engineer should understand the operating system, especially Linux (distribution or any variant). This is because most of the servers in use are Linux-based, so having a solid foundation in the Linux OS is imperative for infrastructure management and troubleshooting.
### Solid programming fundamentals ### Solid programming fundamentals
As a DevOps engineer, you will use your knowledge of programming languages and scripting languages (bash scripting, shell scripting, etc) to: As a DevOps engineer, you will use your knowledge of programming languages and scripting languages (bash scripting, shell scripting, etc) to:
- Automate processes and frequent tasks - Automate processes and frequent tasks
- Patch a security bug exposing your internal application to outside users - Patch a security bug exposing your internal application to outside users
- Create automation tools, monitoring tools, and logging tools - Create automation tools, monitoring tools, and logging tools
- Create monitoring dashboards to visualize workload and resource usage - Create monitoring dashboards to visualize workload and resource usage
Hence, hands-on experience with programming is crucial to excel in your DevOps career. Hence, hands-on experience with programming is crucial to excel in your DevOps career.
### Version control ### Version control
A basic understanding of version control is one of the essential DevOps skills required for DevOps engineer jobs. In your DevOps career, you will likely work in a team rather than alone. Systems like Git facilitate collaboration in a team while providing a centralized repository for the code. A basic understanding of version control is one of the essential DevOps skills required for DevOps engineer jobs. In your DevOps career, you will likely work in a team rather than alone. Systems like Git facilitate collaboration in a team while providing a centralized repository for the code.
### Networking fundamentals ### Networking fundamentals
Many modern-day applications are distributed systems that rely on networking. For instance, a single application could be composed of a frontend, backend, database, file server, etc., each residing on a separate server. For a seamless user experience, these separate entities should be able to communicate smoothly. Many modern-day applications are distributed systems that rely on networking. For instance, a single application could be composed of a frontend, backend, database, file server, etc., each residing on a separate server. For a seamless user experience, these separate entities should be able to communicate smoothly.
### Containerization and orchestration ### Containerization and orchestration
Containerization (or container technology) and orchestration help solve the issues of software deployment and resource utilization. Knowledge of containerization and orchestration helps reduce deployment time and allows you to scale applications quickly without downtime, resulting in a better user experience. Containerization (or container technology) and orchestration help solve the issues of software deployment and resource utilization. Knowledge of containerization and orchestration helps reduce deployment time and allows you to scale applications quickly without downtime, resulting in a better user experience.
### Cloud deployment ### Cloud deployment
Procuring hardware to deploy the software is not always feasible and beneficial. Furthermore, once you purchase the hardware, you need more time and resources to manage the new hardware. Depending upon the complexity of the application, choosing the cloud instead of on-premise hardware can significantly reduce deployment time and cost. Procuring hardware to deploy the software is not always feasible and beneficial. Furthermore, once you purchase the hardware, you need more time and resources to manage the new hardware. Depending upon the complexity of the application, choosing the cloud instead of on-premise hardware can significantly reduce deployment time and cost.
### Infrastructure as Code (IaC) ### Infrastructure as Code (IaC)
IaC can be seen as a superior form of automation for a DevOps engineer. IaC tools like Terraform and Amazon Cloud CDK allow the operations team to set up and manage infrastructure by simply changing a configuration file. This makes it easier to manage and scale the application. IaC can be seen as a superior form of automation for a DevOps engineer. IaC tools like Terraform and Amazon Cloud CDK allow the operations team to set up and manage infrastructure by simply changing a configuration file. This makes it easier to manage and scale the application.
So, how do you learn these essential skills? In what sequence do you acquire these skills? So, how do you learn these essential skills? In what sequence do you acquire these skills?
The following section presents a complete DevOps roadmap on how you can learn these skills and become a DevOps engineer. The following section presents a complete DevOps roadmap on how you can learn these skills and become a DevOps engineer.
## How to become a DevOps engineer: the DevOps roadmap ## How to become a DevOps engineer: the DevOps roadmap
The internet is full of resources for learning DevOps and DevOps tools. Many of these guides lack structure and organization, resulting in a dilemma of where to start. The internet is full of resources for learning DevOps and DevOps tools. Many of these guides lack structure and organization, resulting in a dilemma of where to start.
To help beginners learn DevOps in a structured manner, [roadmap.sh](https://roadmap.sh/) has a beginner-friendly [DevOps engineer roadmap](https://roadmap.sh/devops?r=devops-beginner) that will help you land into DevOps engineer positions. To help beginners learn DevOps in a structured manner, [roadmap.sh](https://roadmap.sh/) has a beginner-friendly [DevOps engineer roadmap](https://roadmap.sh/devops?r=devops-beginner) that will help you land into DevOps engineer positions.
This section presents a concise version of the DevOps engineering roadmap. It is recommended that you implement real-world projects recommended in each stage of the roadmap. In the end, you can publish these DevOps projects to GitHub as an open-source project repository, and the repository will act as your portfolio and increase your exposure in the DevOps community. This section presents a concise version of the DevOps engineering roadmap. It is recommended that you implement real-world projects recommended in each stage of the roadmap. In the end, you can publish these DevOps projects to GitHub as an open-source project repository, and the repository will act as your portfolio and increase your exposure in the DevOps community.
### Step 1: Learn a programming language ### Step 1: Learn a programming language
Programming language is essential to a DevOps engineer. I recommend you start with either Python or Go. [Python](https://roadmap.sh/python) is a popular language that is easier to learn and used in various projects involving [backend](https://roadmap.sh/backend) development, writing machine learning algorithms, automating everyday tasks, etc. Programming language is essential to a DevOps engineer. I recommend you start with either Python or Go. [Python](https://roadmap.sh/python) is a popular language that is easier to learn and used in various projects involving [backend](https://roadmap.sh/backend) development, writing machine learning algorithms, automating everyday tasks, etc.
![Popular programming languages](https://assets.roadmap.sh/guest/learn-a-programming-language-he481.jpeg) ![Popular programming languages](https://assets.roadmap.sh/guest/learn-a-programming-language-he481.jpeg)
[Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) is an excellent resource for learning Python and basic programming concepts. It will also come in handy when building automation tools.
[Automate the Boring Stuff with Python](https://automatetheboringstuff.com/) is an excellent resource for learning Python and basic programming concepts. It will also come in handy when building automation tools.
To demonstrate your understanding of Python, you can create a web scraper (or other coding projects) that extracts a list of hotels, their address, prices, reviews, and locations from a site like [booking.com](http://booking.com/). To demonstrate your understanding of Python, you can create a web scraper (or other coding projects) that extracts a list of hotels, their address, prices, reviews, and locations from a site like [booking.com](http://booking.com/).
@ -105,7 +119,7 @@ According to [Gitnux](https://gitnux.org/linux-statistics/), 92.4% of the world
![The most popular operating systems today](https://assets.roadmap.sh/guest/most-popular-operating-systems-exdwq.jpeg) ![The most popular operating systems today](https://assets.roadmap.sh/guest/most-popular-operating-systems-exdwq.jpeg)
Furthermore, you should make the terminal your best friend. Some programs and packages may not have a GUI counterpart, and even when they exist, using the CLI(Command Line Interface) alternative is faster and easier to automate. Furthermore, you should make the terminal your best friend. Some programs and packages may not have a GUI counterpart, and even when they exist, using the CLI(Command Line Interface) alternative is faster and easier to automate.
An excellent way to practice Linux for DevOps engineers is to install it on a thumb drive and try to do everyday tasks like changing the directory, creating new files and folders, editing files, searching for files and folders, etc., using Linux commands instead of using the GUI interface. An excellent way to practice Linux for DevOps engineers is to install it on a thumb drive and try to do everyday tasks like changing the directory, creating new files and folders, editing files, searching for files and folders, etc., using Linux commands instead of using the GUI interface.
@ -115,12 +129,13 @@ Version control systems like Git make it easier for developers to track changes
![Git and GitHub](https://assets.roadmap.sh/guest/git-and-github-kui4q.jpeg) ![Git and GitHub](https://assets.roadmap.sh/guest/git-and-github-kui4q.jpeg)
[This tutorial](https://www.atlassian.com/git) will help you learn Git basics and how to use Git for collaboration using Bitbucket, a code hosting platform. [This tutorial](https://www.atlassian.com/git) will help you learn Git basics and how to use Git for collaboration using Bitbucket, a code hosting platform.
For advanced concepts on git branching, [refer to this site.](https://learngitbranching.js.org/) Once you go through the tutorial, you can easily switch from Bitbucket to GitHub and GitLab, which are more popular among developers. For advanced concepts on git branching, [refer to this site.](https://learngitbranching.js.org/) Once you go through the tutorial, you can easily switch from Bitbucket to GitHub and GitLab, which are more popular among developers.
### Step 4: Networking fundamentals ### Step 4: Networking fundamentals
Learning networking fundamentals becomes vital to the DevOps team when working with software components constantly communicating with other services. Knowledge of networks comes in handy when setting up resources in the public cloud. At a minimum, you should clearly understand standard protocols(TCP/IP, UDP), routing, IP addressing, subnetting, and ports.
Learning networking fundamentals becomes vital to the DevOps team when working with software components constantly communicating with other services. Knowledge of networks comes in handy when setting up resources in the public cloud. At a minimum, you should clearly understand standard protocols(TCP/IP, UDP), routing, IP addressing, subnetting, and ports.
A DevOps engineer should have a sound knowledge of web servers like Nginx. Nginx allows you to serve your application on the web while handling reverse proxy and load balancing. [Apache](https://httpd.apache.org/) is another web server that provides similar features. A DevOps engineer should have a sound knowledge of web servers like Nginx. Nginx allows you to serve your application on the web while handling reverse proxy and load balancing. [Apache](https://httpd.apache.org/) is another web server that provides similar features.
@ -130,34 +145,33 @@ For your practice, you can create a simple frontend (or clone it from GitHub) an
### Step 5: Containerization ### Step 5: Containerization
An application developed by one developer may not work on other machines due to the difference in environment. To eliminate this issue, DevOps engineers use containerization tools like Docker. An application developed by one developer may not work on other machines due to the difference in environment. To eliminate this issue, DevOps engineers use containerization tools like Docker.
Docker allows engineers to create consistent development, testing, and production environments. It also ensures the developed application is portable across different platforms. Docker allows engineers to create consistent development, testing, and production environments. It also ensures the developed application is portable across different platforms.
![Docker and Kubernetes](https://assets.roadmap.sh/guest/docker-and-kubernetes-fxplh.jpeg) ![Docker and Kubernetes](https://assets.roadmap.sh/guest/docker-and-kubernetes-fxplh.jpeg)
Applications rely on multiple containers that communicate with each other. To facilitate the orchestration of these containers, you can use container orchestration tools like [Kubernetes](https://roadmap.sh/kubernetes). The [Docker Roadmap](https://roadmap.sh/docker) provides essential resources to help you master Docker and Kubernetes.
Applications rely on multiple containers that communicate with each other. To facilitate the orchestration of these containers, you can use container orchestration tools like [Kubernetes](https://roadmap.sh/kubernetes). The [Docker Roadmap](https://roadmap.sh/docker) provides essential resources to help you master Docker and Kubernetes. You can demonstrate your understanding of containerization tools by creating a simple project with frontend and back deployed as two separate containers. If you have already developed these components in the previous stages of the roadmap, re-use them to save time.
You can demonstrate your understanding of containerization tools by creating a simple project with frontend and back deployed as two separate containers. If you have already developed these components in the previous stages of the roadmap, re-use them to save time.
Alternatively, certifications like Docker Certified Associate and Certified Kubernetes Administrator can help you prove your knowledge. Alternatively, certifications like Docker Certified Associate and Certified Kubernetes Administrator can help you prove your knowledge.
### Step 6: Cloud services ### Step 6: Cloud services
Cloud services like [AWS](https://roadmap.sh/aws), Azure, and Google Cloud Platform are some popular cloud providers that allow you to deploy your projects without investing in expensive hardware. Many cloud services across these cloud platforms are analogous. Cloud services like [AWS](https://roadmap.sh/aws), Azure, and Google Cloud Platform are some popular cloud providers that allow you to deploy your projects without investing in expensive hardware. Many cloud services across these cloud platforms are analogous.
If you are a beginner, start with AWS. It is the most widely used cloud platform. Once you are comfortable with AWS’s services and key concepts, you can deploy the application created in earlier stages to the AWS. If you are a beginner, start with AWS. It is the most widely used cloud platform. Once you are comfortable with AWS’s services and key concepts, you can deploy the application created in earlier stages to the AWS.
Alternatively, you could demonstrate your understanding by taking the [certification exam from AWS](https://aws.amazon.com/certification/?trk=dc557659-52ab-4a28-b2b8-0b1fb90235db&sc_channel=ps&ef_id=CjwKCAjw88yxBhBWEiwA7cm6pRXCRcI-uDNNigl81tPxsbbyV9RqT6MsdSM_x5EzoFnfxcr6N22rvBoCS7IQAvD_BwE:G:s&s_kwcid=AL!4422!3!465713397254!e!!g!!aws%20certification!11138243015!111694711080&gclid=CjwKCAjw88yxBhBWEiwA7cm6pRXCRcI-uDNNigl81tPxsbbyV9RqT6MsdSM_x5EzoFnfxcr6N22rvBoCS7IQAvD_BwE). Becoming an AWS certified DevOps engineer helps you gain credibility for your DevOps skills. Alternatively, you could demonstrate your understanding by taking the [certification exam from AWS](https://aws.amazon.com/certification/?trk=dc557659-52ab-4a28-b2b8-0b1fb90235db&sc_channel=ps&ef_id=CjwKCAjw88yxBhBWEiwA7cm6pRXCRcI-uDNNigl81tPxsbbyV9RqT6MsdSM_x5EzoFnfxcr6N22rvBoCS7IQAvD_BwE:G:s&s_kwcid=AL!4422!3!465713397254!e!!g!!aws%20certification!11138243015!111694711080&gclid=CjwKCAjw88yxBhBWEiwA7cm6pRXCRcI-uDNNigl81tPxsbbyV9RqT6MsdSM_x5EzoFnfxcr6N22rvBoCS7IQAvD_BwE). Becoming an AWS certified DevOps engineer helps you gain credibility for your DevOps skills.
![Top cloud providers](https://assets.roadmap.sh/guest/top-cloud-providers-76zj5.jpeg) ![Top cloud providers](https://assets.roadmap.sh/guest/top-cloud-providers-76zj5.jpeg)
Once comfortable launching your infrastructure using the GUI, you should learn about Infrastructure as Code(IaC). I recommend using [Terraform](https://www.terraform.io/) for IaC as it is cloud-agnostic and popular among software developers and operations teams. Terraform allows you to set up and make changes to infrastructure resources by editing a configuration file, resulting in infrastructure automation. Once comfortable launching your infrastructure using the GUI, you should learn about Infrastructure as Code(IaC). I recommend using [Terraform](https://www.terraform.io/) for IaC as it is cloud-agnostic and popular among software developers and operations teams. Terraform allows you to set up and make changes to infrastructure resources by editing a configuration file, resulting in infrastructure automation.
### Step 7: Continuous integration and delivery ### Step 7: Continuous integration and delivery
[Continuous Integration and Continuous Delivery](https://www.youtube.com/watch?v=nyKZTKQS_EQ) (or Continuous Deployment) (CI/CD) is a set of practices aimed at automating and streamlining software changes from development to production.
[Continuous Integration and Continuous Delivery](https://www.youtube.com/watch?v=nyKZTKQS_EQ) (or Continuous Deployment) (CI/CD) is a set of practices aimed at automating and streamlining software changes from development to production.
Today, in practice, when you commit and push your changes to the remote repository (say GitHub), the tests kick-off; if the tests pass successfully, your changes are merged and then deployed to the staging and production server. Today, in practice, when you commit and push your changes to the remote repository (say GitHub), the tests kick-off; if the tests pass successfully, your changes are merged and then deployed to the staging and production server.
@ -165,7 +179,7 @@ Today, in practice, when you commit and push your changes to the remote reposito
CI/CD is a combination of three skills: programming, writing configuration files, and Git. As such, you don’t need to learn new skills to implement CI/CD. However, some organizations use tools like CircleCI and Jenkins to simplify the process. CI/CD is a combination of three skills: programming, writing configuration files, and Git. As such, you don’t need to learn new skills to implement CI/CD. However, some organizations use tools like CircleCI and Jenkins to simplify the process.
You can practice CI/CD using GitHub actions. [GitHub provides a set of tutorials](https://docs.github.com/en/actions/learn-github-actions) for the same. You can follow along those tutorials to get a good grasp of Continuous Integration and Continuous Deployment. You can practice CI/CD using GitHub actions. [GitHub provides a set of tutorials](https://docs.github.com/en/actions/learn-github-actions) for the same. You can follow along those tutorials to get a good grasp of Continuous Integration and Continuous Deployment.
Finally, you can implement CICD in one of your projects created while learning previous skills in this roadmap. Finally, you can implement CICD in one of your projects created while learning previous skills in this roadmap.
@ -176,15 +190,19 @@ Next, let’s discuss the mindset needed to become a DevOps engineer.
To become a successful DevOps engineer and successfully embrace the DevOps culture, you must orient your thoughts around the following: To become a successful DevOps engineer and successfully embrace the DevOps culture, you must orient your thoughts around the following:
### Automation ### Automation
Software products or systems are prone to various errors, including human errors. Stress during work and the race against deadlines can increase the frequency of these errors. Automating processes helps reduce human error and eliminate boring tasks. Software products or systems are prone to various errors, including human errors. Stress during work and the race against deadlines can increase the frequency of these errors. Automating processes helps reduce human error and eliminate boring tasks.
### Risk awareness ### Risk awareness
DevOps engineers must understand the risks entangled with changes to a software system and deployment infrastructures. The risk should be minimized by utilizing automated testing, monitoring, and incremental changes. DevOps engineers must understand the risks entangled with changes to a software system and deployment infrastructures. The risk should be minimized by utilizing automated testing, monitoring, and incremental changes.
### Systems thinking ### Systems thinking
DevOps professionals or any member of the operations teams must understand how different components within a system communicate and interact with each other to deliver the desired solution. A graphical representation of the system can come in handy when fixing issues or knowledge transfer within the DevOps teams. DevOps professionals or any member of the operations teams must understand how different components within a system communicate and interact with each other to deliver the desired solution. A graphical representation of the system can come in handy when fixing issues or knowledge transfer within the DevOps teams.
### Continuous learning ### Continuous learning
A continuous learning and continuous improvement mindset is essential across all roles in software engineering, but its importance is amplified for a DevOps engineer. A DevOps engineer must continually learn about new technologies, tools, DevOps principles, and DevOps practices and implement the ones best suited to the project. A continuous learning and continuous improvement mindset is essential across all roles in software engineering, but its importance is amplified for a DevOps engineer. A DevOps engineer must continually learn about new technologies, tools, DevOps principles, and DevOps practices and implement the ones best suited to the project.
You may not have the DevOps mindset, but that is okay. You can build this mindset as you learn and grow into the role. Let us look at some technical skills required to become a DevOps engineer. You may not have the DevOps mindset, but that is okay. You can build this mindset as you learn and grow into the role. Let us look at some technical skills required to become a DevOps engineer.

@ -7,7 +7,16 @@ seo:
title: 'How to become a Front-End Developer in 7 Steps' title: 'How to become a Front-End Developer in 7 Steps'
description: 'Learn how to become a front-end developer in 7 clear steps. Start your coding journey with practical tips and resources today!' description: 'Learn how to become a front-end developer in 7 clear steps. Start your coding journey with practical tips and resources today!'
ogImageUrl: 'https://assets.roadmap.sh/guest/how-to-become-frontend-developer-i23nx.jpg' ogImageUrl: 'https://assets.roadmap.sh/guest/how-to-become-frontend-developer-i23nx.jpg'
isNew: true relatedTitle: "Other Guides"
relatedGuides:
"What Front End Programming Languages Should You Learn?": "/frontend/languages"
"Top 7 Frontend Frameworks to Use in 2024: Pro Advice": "/frontend/frameworks"
"12 In-Demand Front End Developer Skills to Master": "/frontend/developer-skills"
"Top 30 Popular Front End Developer Interview Questions": "/questions/frontend"
"Top 10 Web Developer Portfolio Templates - A Pro’s Pick": "/frontend/web-developer-portfolio"
"Frontend vs. Backend in AI Development": "/frontend/vs-backend-ai"
"Frontend Developer Job Description [2024 Template]": "/frontend/job-description"
isNew: false
type: 'textual' type: 'textual'
date: 2024-08-15 date: 2024-08-15
sitemap: sitemap:
@ -37,7 +46,7 @@ However, becoming a front-end developer isn't just about jumping straight into c
- **Step 6:** Join online communities and attend events. - **Step 6:** Join online communities and attend events.
- **Step 7**: Build a portfolio and apply for jobs. - **Step 7**: Build a portfolio and apply for jobs.
The above steps will give you the skills to become a proficient front-end developer. This guide will provide a deep dive into the steps and benefits of working in a front-end position. The above steps will give you the [skills](https://roadmap.sh/frontend/developer-skills) to become a proficient front-end developer. This guide will provide a deep dive into the steps and benefits of working in a front-end position.
## Benefits of pursuing a career in front-end development ## Benefits of pursuing a career in front-end development
@ -129,7 +138,7 @@ When you become skilled at using Git, you'll work and deploy projects faster. Th
### Step 4: Learn front-end frameworks and libraries ### Step 4: Learn front-end frameworks and libraries
Learning front-end frameworks and libraries is essential for a front-end developer. It will make your job easier and help you build faster websites and applications. Learning [front-end frameworks](https://roadmap.sh/frontend/frameworks) and libraries is essential for a front-end developer. It will make your job easier and help you build faster websites and applications.
![Front-end frameworks and libraries](https://assets.roadmap.sh/guest/frontend-frameworks-and-libraries-8vplh.jpeg) ![Front-end frameworks and libraries](https://assets.roadmap.sh/guest/frontend-frameworks-and-libraries-8vplh.jpeg)
@ -250,7 +259,7 @@ Nope, you don't need a Computer Science degree. Many front-end developers are se
### Which languages should I study to learn front-end development? ### Which languages should I study to learn front-end development?
The following are the main coding languages used in front-end development: The following are the main coding [languages used in front-end development](https://roadmap.sh/frontend/languages):
- **HTML (Hypertext Markup Language)**: For structuring the content on a webpage. - **HTML (Hypertext Markup Language)**: For structuring the content on a webpage.
- **CSS (Cascading Style Sheets)**: For styling the content on a webpage. - **CSS (Cascading Style Sheets)**: For styling the content on a webpage.
@ -258,7 +267,7 @@ The following are the main coding languages used in front-end development:
### How skilled in these coding languages must I be to land my first job? ### How skilled in these coding languages must I be to land my first job?
To secure your first job as a front-end developer, you must be proficient in HTML, CSS, and JavaScript. It will allow you to create a portfolio site that shows your coding skills to employers. To secure your first job as a front-end developer, you must be proficient in HTML, CSS, and JavaScript. It will allow you to create a [web developer portfolio](https://roadmap.sh/frontend/web-developer-portfolio) site that shows your coding skills to employers.
### Is HTML, CSS, and JavaScript enough for a front-end developer? ### Is HTML, CSS, and JavaScript enough for a front-end developer?
@ -303,4 +312,4 @@ Though it is not required, having a grasp of the basics of backend development c
To become a front-end developer, you need a mix of skills, dedication, and the right guidance. If you follow the steps in this guide, you'll be on track to kickstart an excellent front-end career. Stay on track with a personalized learning plan available on roadmap.sh. To become a front-end developer, you need a mix of skills, dedication, and the right guidance. If you follow the steps in this guide, you'll be on track to kickstart an excellent front-end career. Stay on track with a personalized learning plan available on roadmap.sh.
roadmap.sh will keep you focused and help you reach your maximum potential as a front-end developer. It has numerous resources that will help you learn front-end and web development. To get started, sign up, create a [front-end roadmap plan](https://roadmap.sh/frontend), and begin studying. You can also share the roadmap with your study buddies. roadmap.sh will keep you focused and help you reach your maximum potential as a front-end developer. It has numerous resources that will help you learn front-end and web development. To get started, sign up, create a [front-end roadmap plan](https://roadmap.sh/frontend), and begin studying. You can also share the roadmap with your study buddies.

@ -0,0 +1,42 @@
---
title: Age Calculator
description: Create an age calculator using HTML, CSS, and JavaScript.
isNew: true
sort: 19
difficulty: 'beginner'
nature: 'Frontend'
skills:
- 'HTML'
- 'CSS'
- 'JavaScript'
- 'DOM Manipulation'
- 'Package Management'
seo:
title: Build an Age Calculator App with JavaScript
description: Create an age calculator using HTML, CSS, and JavaScript.
keywords:
- 'age calculator'
- 'frontend project idea'
- 'luxon date manipulation'
- 'javascript datepicker'
roadmapIds:
- 'frontend'
---
The goal of this project is to help you learn about how to use external packages using [npm](https://www.npmjs.com/). The user inputs their birthdate via a [JavaScript Datepicker](https://www.npmjs.com/package/js-datepicker), and the app calculates and displays their exact age, including years, and months using [Luxon](https://www.npmjs.com/package/luxon).
![Age Calculator](https://assets.roadmap.sh/guest/age-calculator-do1un.png)
## Requirements
You are required to develop an age calculator with the following features:
- A form that allows users to input their birthdate using a JavaScript datepicker (avoid the default HTML date picker)
- Use the [Luxon](https://www.npmjs.com/package/luxon) library to calculate the exact age in years, months, and days
- Display the result on the same page after the user submits the form
- Implement basic validation to ensure the birthdate is valid
- Use simple styling to make the calculator visually appealing and responsive
<hr />
This project will help you understand how to manipulate dates and times in JavaScript using [Luxon](https://www.npmjs.com/package/luxon). You'll gain experience handling user input via a datepicker, performing date calculations, and designing a simple user interface.

@ -22,6 +22,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
You are required to build a CLI tool that starts a caching proxy server, it will forward requests to the actual server and cache the responses. If the same request is made again, it will return the cached response instead of forwarding the request to the server. You are required to build a CLI tool that starts a caching proxy server, it will forward requests to the actual server and cache the responses. If the same request is made again, it will return the cached response instead of forwarding the request to the server.

@ -1,23 +1,23 @@
--- ---
title: 'Custom Dropdown' title: 'Custom Dropdown'
description: 'Create a custom dropdown using HTML, CSS, and JavaScript.' description: 'Create a custom dropdown using HTML, CSS, and JavaScript.'
isNew: false isNew: false
sort: 19 sort: 20
difficulty: 'intermediate' difficulty: 'intermediate'
nature: 'JavaScript' nature: 'JavaScript'
skills: skills:
- 'HTML' - 'HTML'
- 'CSS' - 'CSS'
- 'JavaScript' - 'JavaScript'
- 'DOM Manipulation' - 'DOM Manipulation'
seo: seo:
title: 'Build a Custom Dropdown Menu with JavaScript' title: 'Build a Custom Dropdown Menu with JavaScript'
description: 'Learn how to create a fully customizable dropdown menu that allows users to select an item and see the selection reflected in the dropdown.' description: 'Learn how to create a fully customizable dropdown menu that allows users to select an item and see the selection reflected in the dropdown.'
keywords: keywords:
- 'custom dropdown' - 'custom dropdown'
- 'javascript dropdown' - 'javascript dropdown'
- 'html and css' - 'html and css'
roadmapIds: roadmapIds:
- 'frontend' - 'frontend'
--- ---
@ -27,4 +27,4 @@ Given below is the mockup showing the dropdown in its default, open, and selecte
[![Custom Dropdown](https://assets.roadmap.sh/guest/dropdown-1f4b3.png)](https://assets.roadmap.sh/guest/dropdown-1f4b3.png) [![Custom Dropdown](https://assets.roadmap.sh/guest/dropdown-1f4b3.png)](https://assets.roadmap.sh/guest/dropdown-1f4b3.png)
This project will help you practice DOM manipulation, event handling, and creating responsive and interactive elements with JavaScript. This project will help you practice DOM manipulation, event handling, and creating responsive and interactive elements with JavaScript.

@ -22,6 +22,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
You are required to build a command-line interface (CLI) utility for backing up any type of database. The utility will support various database management systems (DBMS) such as MySQL, PostgreSQL, MongoDB, SQLite, and others. The tool will feature automatic backup scheduling, compression of backup files, storage options (local and cloud), and logging of backup activities. You are required to build a command-line interface (CLI) utility for backing up any type of database. The utility will support various database management systems (DBMS) such as MySQL, PostgreSQL, MongoDB, SQLite, and others. The tool will feature automatic backup scheduling, compression of backup files, storage options (local and cloud), and logging of backup activities.

@ -23,6 +23,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
Build a simple expense tracker application to manage your finances. The application should allow users to add, delete, and view their expenses. The application should also provide a summary of the expenses. Build a simple expense tracker application to manage your finances. The application should allow users to add, delete, and view their expenses. The application should also provide a summary of the expenses.
@ -61,7 +62,7 @@ $ expense-tracker list
$ expense-tracker summary $ expense-tracker summary
# Total expenses: $30 # Total expenses: $30
$ expense-tracker delete --id 1 $ expense-tracker delete --id 2
# Expense deleted successfully # Expense deleted successfully
$ expense-tracker summary $ expense-tracker summary
@ -82,4 +83,4 @@ You can implement the application using any programming language of your choice.
<hr /> <hr />
This project idea is a great way to practice your logic building skills and learn how to interact with the filesystem using a CLI application. It will also help you understand how to manage data and provide useful information to users in a structured way. This project idea is a great way to practice your logic building skills and learn how to interact with the filesystem using a CLI application. It will also help you understand how to manage data and provide useful information to users in a structured way.

@ -0,0 +1,39 @@
---
title: Flash Cards
description: Create a flash card app using JavaScript frameworks.
isNew: true
sort: 20
difficulty: 'beginner'
nature: 'Frontend'
skills:
- 'HTML'
- 'CSS'
- 'JavaScript'
- 'JavaScript Frameworks'
seo:
title: Build a Flash Cards App
description: Create a flash card app using JavaScript frameworks
keywords:
- 'flash cards'
- 'frontend project idea'
- 'javascript frameworks'
roadmapIds:
- 'frontend'
---
The goal of this project is to help you learn about how to use state management and component-based architecture using JavaScript frameworks. You will build a flash card app with pre-defined JavaScript questions and answers that users can flip through to test their knowledge.
![Flash Cards](https://assets.roadmap.sh/guest/flash-cards-crzw6.png)
## Requirements
You are required to develop a flash cards app with the following features:
- Pre-defined flashcards with questions and answers
- Progress bar to show the user's progress
- Ability to view flashcards one at a time and flip to reveal the answer
- Simple navigation to cycle through the flashcards
<hr />
This project will help you understand how to manage state and create reusable components. You can use any framework of your choice, such as React, Angular, or Vue.js, to build this project.

@ -22,6 +22,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
In this project, you will build a simple command line interface (CLI) to fetch the recent activity of a GitHub user and display it in the terminal. This project will help you practice your programming skills, including working with APIs, handling JSON data, and building a simple CLI application. In this project, you will build a simple command line interface (CLI) to fetch the recent activity of a GitHub user and display it in the terminal. This project will help you practice your programming skills, including working with APIs, handling JSON data, and building a simple CLI application.

@ -22,6 +22,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
You are required to build a simple number guessing game where the computer randomly selects a number and the user has to guess it. The user will be given a limited number of chances to guess the number. If the user guesses the number correctly, the game will end, and the user will win. Otherwise, the game will continue until the user runs out of chances. You are required to build a simple number guessing game where the computer randomly selects a number and the user has to guess it. The user will be given a limited number of chances to guess the number. If the user guesses the number correctly, the game will end, and the user will win. Otherwise, the game will continue until the user runs out of chances.

@ -28,7 +28,7 @@ roadmapIds:
In this project, you will style the HTML website structure you created previously [in a different project](/projects/basic-html-website). The focus will be on learning how to use CSS to create responsive layouts, apply color and typography, and enhance the overall design of your website. In this project, you will style the HTML website structure you created previously [in a different project](/projects/basic-html-website). The focus will be on learning how to use CSS to create responsive layouts, apply color and typography, and enhance the overall design of your website.
Rough mockups of the website structure for mobile and desctop devices are given below. Do not worry about the design details i.e. colors backgrounds etc at this stage; we are not looking for a beautiful design, but a well-structured and responsive website. Just focus on making the layout same as the mockup and ensuring it looks good on different screen sizes. Rough mockups of the website structure for mobile and desktop devices are given below. Do not worry about the design details i.e. colors backgrounds etc at this stage; we are not looking for a beautiful design, but a well-structured and responsive website. Just focus on making the layout same as the mockup and ensuring it looks good on different screen sizes.
[![Styled HTML Website](https://assets.roadmap.sh/guest/portfolio-template-xdhki.png)](https://assets.roadmap.sh/guest/portfolio-template-xdhki.png) [![Styled HTML Website](https://assets.roadmap.sh/guest/portfolio-template-xdhki.png)](https://assets.roadmap.sh/guest/portfolio-template-xdhki.png)
@ -51,4 +51,4 @@ For bonus points, you can:
--- ---
After completing this project, you will have a solid understanding of how to style a basic HTML website using CSS. You can move on to more advanced topics, such as CSS animations, transitions, and grid layouts, in future projects. After completing this project, you will have a solid understanding of how to style a basic HTML website using CSS. You can move on to more advanced topics, such as CSS animations, transitions, and grid layouts, in future projects.

@ -22,6 +22,7 @@ roadmapIds:
- 'java' - 'java'
- 'golang' - 'golang'
- 'spring-boot' - 'spring-boot'
- 'cpp'
--- ---
Task tracker is a project used to track and manage your tasks. In this task, you will build a simple command line interface (CLI) to track what you need to do, what you have done, and what you are currently working on. This project will help you practice your programming skills, including working with the filesystem, handling user inputs, and building a simple CLI application. Task tracker is a project used to track and manage your tasks. In this task, you will build a simple command line interface (CLI) to track what you need to do, what you have done, and what you are currently working on. This project will help you practice your programming skills, including working with the filesystem, handling user inputs, and building a simple CLI application.

@ -16,6 +16,15 @@ seo:
- 'backend interview questions' - 'backend interview questions'
- 'backend interview' - 'backend interview'
- 'backend test' - 'backend test'
relatedTitle: "Other Guides"
relatedGuides:
"The 5 Best Backend Development Languages to Master (2024)": "/backend/languages"
"Top 10+ Backend Technologies to Use in 2024: Expert Advice": "/backend/technologies"
"Top 7 Backend Frameworks to Use in 2024: Pro Advice": "/backend/frameworks"
"8 In-Demand Backend Developer Skills to Master": "/backend/developer-skills"
"25 Essential Backend Development Tools for 2024": "/backend/developer-tools"
"20 Backend Project Ideas to take you from Beginner to Pro": "/backend/project-ideas"
"Backend Developer Job Description [2024 Template]": "/backend/job-description"
sitemap: sitemap:
priority: 1 priority: 1
changefreq: 'monthly' changefreq: 'monthly'

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save