Jump to content

Articles


wdfw w ff wdf sfsfd sfdwdfsdfwerw r werw erwe rwe rwer werwer werw erwer we r we rwerewrwe rwe rwer wer werwer werwe

If you are serious about keeping your Data Center secure and high performing, then making sure your API is not being hammered and that data is not moving in and out of the API without your control.
In Data Center, we can control what is happening in our API in several areas:
Account - allow us to control what accounts have product access and can create tokens to be used to connect with the API Rate Limiting - allow us to define what connections we allow and how many calls they can make before they get throttled. Allow list - allow us to control from where we will allow connections.   Account
The first thing you want to do is make sure that you control the accounts used to connect to your API. You do this by creating local accounts following a special standard, so you set the account name and email. This will ensure that you are in control of the account and no one can access it or reset the password to gain access.
Example:
Username: SAINT001 Full Name: SAINT001 Email: SAINT001@yourcompany.com Once the account has been created, you log in as that user using the Switch user function in the User Admin section. Go to Profile ⇾ Personal access tokens and create a token for that user. Make sure it expires in 6 months, or a year. The length depends on how often you want to set up the review of all integrations to make sure the integrations are still active and the documentation of the integration is up to speed.
 
Rate Limiting
Rate Limiting have two purposes in our setup: limit the amount of requests that integrations can make to prevent performance issues and to control what accounts can access the API.
Enable Rate Limiting and set it to Block all requests. If you have an old Jira with a lot of unknown integrations, or if people are treating it is a playground, then first set it to Limit Requests. This way you can turn down the number of requests, so people notice that something is happening, so they contact you about it.
This is assuming their integration actually has been built with response management and rate limiting support, which they should if they know what they are doing. If they don't, then they actually pose a danger to your Jira, and they should not connect to it anyway.
Once you have activated this, and it is blocking all requests, then no one can access the API. This is not what we want, so we add all our integration accounts to the Exemptions list. This will allow those accounts to connect to the API again.
Set the rate limiting to whatever limit makes sense in general, depending on the configuration of your hosting hardware and perceived impact from the number of integrations you have. If you see that an integration account show up in the List of limited accounts repeatedly, then talk to the integration owner and see if there is a problem, or if that integration need a more generous rate limit.
 
Allow list
The Allow list will give you the ability to further control access to your API by preventing access from any source that does not match what you have defined. This prevents someone from gaining access to one of the integration account to connect from outside what you have defined.
It also prevents users to share their integration account and token with other groups in your organization, which you should absolutely not allow.
The Allow list should be activated, and the settings should be set to allow authenticated users. You can then add domain names, exact matches, wildcard expressions and regular expressions. Be careful when adding wildcard expressions since users will often request whole networks and that will reduce the effectiveness of your allow list.
Always be as specific as possible. This means that it is far better to add a dozen specific endpoints than adding a wildcard for a full subnet.
 
Access to data
As a Jira administrator, you should have no involvement when it comes to managing access in Jira. All licenses should be managed by your AD, even if you are a small company, and all project access should be managed by the teams that work in those projects.
This is very important because if you are responsible for licenses and project access, then you are also legally responsible for how the integrations handle the data they have access to.
 
Make sure that all Jira projects are hidden by default!
I know that sharing is caring, but oversharing is not something you want to spend time in jail for. Make sure that all projects have the same settings for this, and that is that all Jira projects are hidden unless you have a role in that project.
This ensures that integrations also can only access the data that they have access through by the teams manually giving that account a role in their project.
If you absolutely must have everything open to everyone in the organization, but still want to restrict the integration accounts only, then that can be done with AD groups. Just assign all employees in the organization an AD group, and then use that in your permission settings to give all employees access to every project.
Since the integration accounts are local, they will not have that group (unless you stupidly add it of course, but that kind of defeats the purpose of having it...). This way those accounts still need to be assigned a role, and you are able to control the data they have access to.
 
Secure, Compliant and responsible
These three simple words should always be your mantra when you are working as an administrator in Jira and for integrations they are extra important.
If you do not control your API's, then you not only risk exposing things that should not be exposed. This can be secret projects or god forbid information about your internal infrastructure or customers that a malicious hacker can exploit.
You also risk legal actions based on how the information your Jira provide to other systems, should they use them incorrectly. While Jira in itself do not handle a lot of sensitive data, the tickets themselves can have a lot of this, especially if your users have requested custom fields that hold this kind of information.
And finally, I think everyone can see that if anyone in your organization can connect to your API and do whatever they want, there is only a matter of time before this will start impacting performance.
At the end of the day, it is your job to make sure your Jira is Secure, Compliant and that you configure it responsibly.
 
--
These are very small steps you can take to secure your API access, and there are other ways as well. Do you have additional steps on how to secure Jira API, or do you think this is not the way to do it?
Sign off in the comments!
 
Jimi Wikman
I remember when I first saw Insight in the Riada office and I was blown away by the potential. When Insight was split off into Mindville later I thought that Insight would take off like a rocket. And it did so well that Atlassian eventually acquired Mindville. I had no reason to think that Insight would not become a new product with Atlassian that would rock the world, but I was wrong. Very wrong.
In July 2020 Atlassian announced that they acquired Mindville and thereby took ownership of Insight as a product. Since then things have moved on for the Data Center version where things like improved UI and Auditing have been focus points, making it an even better administration tool for Jira Administrators.
For cloud... well, it has been pretty dead in the water.
Sure it has the base functions, but there are so many things missing!
Differences between Data Center and Cloud.
Import data types
Cloud: CSV, JSON, Assets Discovery
Data Center: CSV, JSON, Assets Discovery, DB, LDAP, Jira Users and Groups
Integrations
Cloud: Jira Service Management Services, Marketplace Integrations for Cloud
Data Center: Cloud providers (AWS, Azure, Google Cloud), Mobile device and software management (JAMF, SCCM, Snow), Other CMDBs (ServiceNow, Device42), Atlassian ecosystem (Jira & Bitbucket, Confluence, Tempo), Others (NVD)
REST APIs
Cloud: Public REST API, External Imports API
Data Center: Public REST API
Object schema templates
Cloud: Coming soon!
Data Center: ITSM, HR, FM
 
There is more...
While this just show the high level differences I think you can see that there is a substantial gap in high level functionalities. In addition to these changes we also miss features like the ability to upload scheme specific icons and automation. There is also no file management for CSV imports and so on.
 
The Gap is not the worst part...
While having a big gap between Data Center and Cloud is bad, there are other things that in my opinion are even worse and that is accessibility. I don't mean the UI, but the fact that on Data Center Assets is available for free, while on Cloud you have to double your annual cost and go premium to get your hands on it.
The fact that a single agent license cost a whooping $47 (compared to Jira Software's $15 per license) is cause for many mid-sized to large companies to immediately regret trying out Assets in Data Center.
This cost and the fact that you can not even try it out in a limited capacity make Assets something that only those willing to buy on a leap of faith, or people that already have experience with the product, to actually experience it. This is the same problem that Atlassian have with Jira Align and I think it is also why both Jira Align and Assets are growing a lot slower than they should.
Assets as a Jira System Administration tool is amazing
If you have used Assets on Data Center or Server, then you probably already know what an amazing tool it is to keep track of your Jira system. The Jira environment import not only spider though your system and keep you updated on changes, it is also a very nice one stop database for all your administration needs.
It will allow you to keep track of all integrations, service accounts and anything else that you have that is not directly included in the import. If you have a messy system with a lot of technical debt from migrations and things like that, then it is an amazing tool to keep track of what you need to clean up and what you should consolidate.
It also provides a very useful tool for your support desk where you can connect all tickets to existing configurations. For example, you can connect all configuration requests and automatically assign an approval to the project lead. This speed things up and you can simply ignore tickets that are not approved, seriously reducing time you spend on tickets.
If used correctly you can also connect all tickets to the configurations involved. This type of historical documentation really help to maintain your system well-kept and organized.
I hope to see much more development on Assets Cloud
I really, really like Assets. It is one of my favorite features for Jira Service Management and as such I really, really hope we will see a lot of improvements when it comes to the Cloud version. The Jira environment import is a must I would say, but also AWS and Azure import is really, really important. I think many will also miss both Tenant and Yamf imports.
When it comes to the Jira environment import it has some areas where it should absolutely be adjusted. For example, you should be able to follow the full chain of configurations regardless of starting point and there is no Permission schema, which is odd on Data Center.
The road forward if I was in charge
I am no fan of the forced Premium features that Atlassian have. I think it goes against their core values and I think you should be able to explore all products regardless of subscription level. So what I would do is either break out Assets as its own product or add it for free with limitations in the free subscription tier.
If you can make 3 schemes and only have 1000 items in each for free, then more people will want to try it out. More people trying it out means that more people will see how useful it is, and more people will want to get the full version. More people means that more companies will build more apps for it... and so on.
--
Well, for now I will continue to enjoy the amazing features that Jira environment import provides on Data Center. I hope that one day I will not only consider moving to Cloud, but actually yearn for it!
Let's get Assets on Cloud Amazing!!
Jimi Wikman
I currently own two websites, atlasstic.com and jimiwikman.se. and I want to set up support for both of them. I don't want to spend a lot of money doing so, as I have other things to sink my money in, like hosting for example. So I want to set up a dual support using just one license. To make this a bit trickier I want to make it so that the two setups will feel and look completely different.
So let us plan this shall we?
So I have one Jira Cloud instance and one Confluence instance. The Jira instance is a premium license, because I want to play around with Advanced Roadmaps. I have a standard Jira Service Management on top of that and my Confluence setup is also a standard setup. I want to take advantage of all the Atlassian products I can, so I also have Jira Work Management, Jira Product Discovery, Compass, Bitbucket, Status page, Trello and Beacon. So I have a pretty extensive toolbox to play around with.
My Key add-ons at the moment are Refined that I will use to split the support portals, Scriptrunner for all kind of magic and Microsoft 365 for Jira for all email/teams/Jira combinations. I am also running BigPicture Enterprise and StoryMap for planning and for making some videos.
One Support project for both sites.
The core of the support setup will be one Jira Service Management project where all tickets from both sites will aggregate. This makes sense since there are not a lot of tickets flowing in. If I want to split this later on that will not be a big problem as Refined allow us to make these changes quickly and with ease.
I want to show open incidents and tie in Status Page to show on the portal. I also want to display Confluence pages to answer common questions, but as a content block and to show when a user writes a ticket. Since I have two sites I want to have this with two sets of projects and spaces.
For support, I want to have different types of requests depending on what the person submitting a ticket for wants. I also want SLAs to measure my response and resolve times as well as timers to help count down and remind customers automatically in different time intervals. I want to automate the status transitions during conversations so I don't have to change the status manually every time.
Let us plan the project setup
The first thing we need to do is to plan the issue types so we know what kind of requests we want to handle. While you technically can use any issue types as you will define the actual ticket types, there are some nice features built into Jira Service Management that we can use.
ITSM is a pretty good standard for must use cases and in Jira Service Management we can add those under Features in the project settings. So in the Work categories section we will activate Service requests, Incidents, Problems and Changes. We will also activate post-incident reviews but mostly to try that out rather than it being anything we probably will need. As I don't have Premium I can't activate Customer Service Management, so we leave that one for now.
 

Now that we have these activated we will get extra sections in our project that act as Queue categories, which is very nice. Since we have these defined now as sections, or categories really, it makes sense to also have these as our issue types.
The next step will be to map the different request types towards these sections.
Planning Request Types
The first thing we need is something for when people email in. This will allow us to separate these from other requests as the quality of these are usually very poor compared to portal created tickets that we can control the content from. We also need an incident type, so people can report problems of course. I do get some collaboration tickets also of various types, so we need something for that. Suggestions sometimes come in as well and we want those to go to Jira Product Discovery for processing. Legal is always good to have in case we get requests or demands from legal sources.
So, let us break that down into actual request types:
Incoming Email Incident Collaboration Suggestion Legal General questions I think that will be a good start and then we can build upon that later when we see the need for it.
Asset Management
I love Jira Assets and I work extensively with it in my role as Atlassian Platform Owner at Sinch, but in order to use Assets I need the premium version of Jira Service Management. At $47 monthly for just one Agent that is a bit much, so we will settle for the very limited Services feature for now. It is not a very good feature compared to the actual Assets product, but it will work for connecting tickets to the different parts of the two websites.
Create the project
Based on this we can go ahead and create the project. We could go for the ITSM template, but it adds a lot of things that we don't need that we just have to clean up later, so we go for the blank project for IT teams instead. In the screenshot below I had to add another Key since I already have this setup. I choose company managed because I like structure and order and I do not like team based projects.
Now t
Now that we have the project it is time to tweak some things and I started with the issue types. I decided that I would change them up a bit and this is the list I can up with.

As you can see I have created a new Issue Type Scheme since I like to name things so they look good rather than having generated names. On top of the four standard issue types that comes with ITSM (Incident, Problem, Service request, change request) I also added one for Post Incident Reviews since we have the feature activated. I also added Ask a question for more open type and then Consultation for collaborative things. Finally, I added one issue type for Email request as well.
From there we can now begin creating the request types and the forms we want to go with each request type. I just add them one by one and map them to the request categories and issue types.

Most request types end up in Service Request, but we get a few in each except for Problems. This is fine as problems are internal tickets.
Building the Request Forms
I like my tickets clean without too much clutter, so when designing the request forms I go super simplistic and then I can add later if I need to. I also like to use Forms since that allow me to ask for any type of information without adding a ton of custom fields.

For the request form itself I always make sure I have the Summary field, even when I work with Forms. This is because the summary is what trigger the suggestions from Confluence and it also ensures that I get variations in the summary instead of having them all the same if you choose to hide it.
At the bottom you can see that I have added a form to this request type as well, which we will cover in a different post.
 

For the Issue View I just have the Description and Summary in the top section for this and then I add the fields I feel I want for this request type. I did add tabs for this project and I will show how I did that in another post so you can see how that looks and what you can do with it. Adding the tabs require you to go to the Screens and this article is already a bit long.
Since we do not have that many request types I will just add two Portal categories, one for General requests and one for Incidents for now. We will experiment a bit with this in Refined later so we might come back and adjust this then. As we can place individual request types in Refined rather than just display the project setup, this is not as important as if we had not used Refined.

Now that we have our issue types and request types setup we need to create the workflows and set up the automations we will use. This is the topic of the next article, so if you like this so far make sure you keep an eye out for the next chapter.
This is a rather high level article, so let me know if you want me to dive deeper into a topic in another article.
Jimi Wikman
If you have worked in a larger company you probably have noticed that escalation between the different support tiers cause a lot of problems. Perhaps you even notice this in medium or even small companies as well. The reason for this is that Jira Service Management is missing functionality that is needed for escalation to work properly. For a tool that claim to be an ITSM tool, this is quite strange, but well in line with the way Atlassian thinks about their products.
If you are unfamiliar with ITSM and support tiers, then I suggest this nice article as a starting point: https://www.bmc.com/blogs/support-levels-level-1-level-2-level-3/. If you don't want to read all that, then the short summary is that in ITSM support is set in multiple levels of technical expertise.
It starts with a basic support, which is to answer the most obvious questions and to make sure the tickets have enough information. Then the tickets Tier1 can not solve goes to Tier 2 which have more technical knowledge and so on. You can have as many tiers as you want, but most models have 3 or 4 where the last tier is outside help towards vendors for example.
Jira Service Management does not support collaboration
This might be a strong statement, but in this case I feel it is actually true. Maybe we should say handovers, which is what we are actually talking about, but since communication has to remain constant towards the customer I feel that this is still true.
So what am I talking about?
In Jira Service Management today there are hard boundaries around the projects that can not be bridged without harming customer experience. What I mean by that is that in order for me to hand over a ticket to another team I am restricted to 4 options:
Have everyone working in one giant monolith project. Move the ticket to another project. Clone the ticket to another project. Create a linked ticket to another project. Before we dive into what these 4 options mean, let us first define what our customers expect from the interaction with support. From a customer perspective they have a problem, or a request of some sort and they have done their job by submitting a ticket to support. They now expect support to handle their request and solve their problem in that ticket. This is a fair expectation and if we break this expectation they will experience frustration.
1. One Monolith to ruin it for all
This is by far the most common way to work in small companies and it is how Atlassian envision us using Jira Service Management. One box where everyone that needs to be involved have a role. The problem with this setup however becomes very apparent when you start to grow as an organization, or when you start to have multiple products and services with shared resources.
Not only will there be a lot of people in the project, perhaps several hundred people or thousands even if the organization is large, internationally distributed or need to handle multiple companies setup because of company structure or acquisitions. To be able to make sense of a large instance with many teams you need to make a lot of queues and this is where the first problem is with Jira Service Management today: There is no nesting of queues. You have to get an add-on to handle that, which add cost to your already quite expensive platform.
The second problem is that when you mix many teams in one project, you will start to add complexity as the various teams want to customize their experience. You will start to build automations with multiple exceptions, you need to start adding local groups with all the problems that come from that and you will have subsets of screens connected to customized issue types and... well you get the idea. It quickly becomes messy and soon you will have manuals for how to work based on what type of request for which team you are working for to navigate all those custom fields that confuse everyone.
This is a horrible way of working.
If we instead work with Jira Service Management where we have an IT Support desk for first line support (Tier1) and dedicated projects for Tier 2 and Tier 3 teams, then we are in a much better place. But there are still issues...
2. Move ticket to another project
Our first option when not working in a monolith when we want to hand over a ticket to second or third tier teams is to move the ticket to their project. It makes sense technically because the tier 1 team will have no more involvement with this ticket and it should not be handled by another team.
From a customer service perspective it is a terrible option, however. Not only do you break all old communication because by moving you are now changing the URL and the ticket ID. This will make all old communication useless because links will not work and the poor customer no longer can reference the ticked ID as they now have a new one.
Technically you also have permissions to consider and if you do not have the same setup the customer can lose access to their ticket all together. The information in the ticket can also vanish if you do not use Forms and the custom fields are not the same in the projects.
Any SLA you have will also be ruined since each project have their own SLA and when you move a ticket the SLAs will be reset as they are counted again with the new SLA in the project they are being moved to.
In short: Never move support tickets if you can avoid it.
3. Clone the ticket to another project
This is an even worse solution than moving the ticket. Not only do you get all the negatives from moving the ticket, you also duplicate the information. This means that the customer now have two identical requests, but you also have different statuses and different communication. If you for example clone the ticket and then close the initial ticket, the customer will get a notification that their request has been closed, which will confuse the heck out of them when they then get a reply in a ticket that look identical, but with a different ID and different URL.
In short: Never clone a support ticket unless you REALLY want to frustrate your customers.
4. Create a linked ticket to another project
This is very similar to cloning the ticket if you are doing it wrong. That would be that you create a linked ticket and assign it to the customer. Then it would just be a cloned ticket you have linked.
Used correctly however that creates a separate conversation between the two teams. This is how it should be used in Incident Management for example where we need activities to be performed in development or Infra teams for example.
This will not help us in our scenario where we want to make a handover, however as the customer conversation still will be in the original ticket. We could build an automation that sync the conversation between the original ticket and the linked ticket, but since that will be posted as the actor in the automation communication will look very bad on both sides.
We will also still have to keep the original ticket open in the project for the Tier 1 team, even though they no longer have any involvement. The customer experience might be ok, but the setup will clutter up the queues for the Tier 1 team. The Tier 1 team will also be responsible for the SLA, which means that they might unfairly get bad SLA results because of the Tier 2 team activities.
In short:  this is probably the best option, but it is not very good.
 
How do we solve this then?
Without knowing the architecture of Jira Service Management the suggestions here might be more or less difficult to accomplish, but I will make the suggestions based on the customer experience and UX rather than architecture.
1. Change Queues to allow tickets from any project
I can not for the life of me understand the architectural decision to restrict this when boards have had this functionality forever. Just this small change alone will make Queues so much more useful and it will allow teams to work with multiple requests from one area. Queues for Jira Service Management have the right idea, but they focus on local groups, which any sane Jira Administrator avoid like the plague, especially if they already sync users with the AD.
Make Queues like boards so they can be attached to projects or a user. Not only will that allow teams to work cross projects, but it will also open up for different views that can lead to add-ons or native improvements to how support in general can be designed.
2. Add account sync to automation
It would be very nice, not just for thise scenario, to be able to synch comments WITH the account that made the comment rather than using the automation agent as the author. This will allow for a better customer experience and it will make many types of setups feel more seamless than it does today.
3. Build a native handover function
While we can work with custom fields to handover ticket between queues if we get the change to queues to allow data from any project, I would much rather see a native function in Jira Service Management. The reason for that is that it would allow extending that function with more innovation and standard functionality.
The way I envision it a customer agent would just click on a handover link or button and then get a screen like the move screen. There they can select what project they want to hand over to and possibly what team. A comment field can be there by default if they want to add an internal comment as well.
When the support agent submits the ticket is flagged as handover and in their project it will no longer be visible by default in the original project (as it has been handed over). There should be a way to set up a queue to see all handover tickets however if that is wanted. This action will also trigger a new ticket in the project the support agent handed over the ticket to.
What makes this different from just a linked ticket then?
The first change is that the handover ticket work like a cloned ticket with the same information as the original ticket. This means that reporter for example is the customer and not the support agent as when you create a linked ticket.
The second change is that all comments are synced between both ticket with the account information on who made the comment. This way the communication is seamless from the customer perspective and the support agents. It also means that everything is synced toward the original ticket, making that the master regardless if the ticket has been handedover due to escalation.
If the handover ticket is handed over, then the same steps should happen, but the sync should now be done twice, once for each of the tickets in the chain.
What about the workflows?
This is a problem as many teams what to have their own workflows. As we can not, or want to, force people to have the same workflows, we need to figure out what status we will show to the customer. Each ticket will of course show whatever status the team put it in so they can follow their workflow in Jira Service Management, we just need to consider what to show to the customer in the portal.
I can think of several ways to solve this.
The first solution is to just add a label instead of using the workflow. This label can just say Escalated for example and the label stays until the ticket is closed. It is simple, but perhaps not the best from a customer experience perspective since the status actually is communication.
The second solution is to choose either the original ticket workflow or the handover ticket workflow. This can cause some strange scenarios if there are many different statuses between the original ticket and the handover ticket. Having status change from in progress to Open or New for example might be a little weird. While that can be fixed with not changing status from the original ticket to the handover ticket until it has moved at least one transition, it is not fool proof and can be confusing.
The third option is to treat this as some form of integration so we setup a mapping between different projects. This would be a massive thing to build and a pain to manage, but if done well it could probably be used for other things as well. This require you to do a lot of work also every time a new project is added that you might want to handover to.
The fourth option would be to present a choice when you transition a hand over ticket with the combined list of statuses from the original ticket or the handover ticket. It is messy and pretty much the same as #2, but less useful.
There are of course more solution to this, so if you have a good suggestion, please add it in the comments.
Communication must be taken seriously
Regardless how we look at support and what solution we prefer for escalating to other teams, we must remember that communication is key. No matter how good we are at solving problems it means nothing if we agitate the customers by not communicating while we solve their problems.
By breaking communication in any solution we have today, or forcing teams to be suboptimal by working in monolith projects we are limiting the potential of providing exceptional support to our customers.
I think we should take this seriously.
What do you think?
Jimi Wikman
Introduction
ReactJS Development Company is a software development firm specializing in the development of web applications using the ReactJS library. ReactJS is a popular JavaScript library for building user interfaces, and it is known for its improved performance, reusable components, ease of use, and strong community support. At ReactJS Development Company, our team of skilled developers has extensive experience in building complex and scalable web applications using ReactJS.
Our developers have a deep understanding of ReactJS and its capabilities, and they use this knowledge to build high-quality, user-friendly web applications that meet the needs of our clients. We work closely with our clients to understand their requirements and to create customized solutions that meet their unique needs. Our goal is to deliver web applications that are fast, responsive, and user-friendly, and that provide a positive experience for users.
At ReactJS Development Company, we are committed to using the latest technologies and best practices to deliver high-quality software solutions. Our development process is guided by Agile methodology, which allows us to rapidly iterate and make changes based on feedback from our clients. This ensures that our clients receive software that meets their needs and exceeds their expectations.
Whether you need a new web application or are looking to upgrade an existing one, ReactJS Development Company is here to help. Our team of experienced developers is ready to work with you to build a custom solution that meets your needs. Contact us today to learn more about how we can help you with your web development project.
Advantages of Utilizing ReactJS
ReactJS is one of the most popular JavaScript libraries for building user interfaces. It was developed by Facebook and has been widely adopted by the web development community since its release in 2013. ReactJS has a number of benefits that make it an excellent choice for web development projects, ranging from improved performance to ease of use.
Improved Performance
ReactJS uses a virtual DOM (Document Object Model) to update the user interface, which results in faster and smoother updates to the user interface. The virtual DOM is a lightweight in-memory representation of the actual DOM, and React uses this representation to make changes to the user interface without having to directly update the DOM, which can be slow and resource-intensive. By using the virtual DOM, ReactJS is able to update the user interface much more quickly, resulting in a better user experience.
Reusable Components
ReactJS allows developers to create reusable components that can be easily shared across multiple projects. This makes it easy to build complex user interfaces, as developers can break down the interface into smaller, reusable components that can be managed and maintained separately. This also leads to better code organization, as components can be organized into a structured hierarchy, making it easier to understand and maintain the codebase over time.
Ease of Use
ReactJS is a very easy-to-learn and use JavaScript library. It uses a syntax that is familiar to most web developers, and its component-based architecture makes it easy to build and manage complex user interfaces. Additionally, ReactJS has a large and active community, which means that there is a wealth of resources available to help developers learn the library and solve any problems they may encounter.
Server-Side Rendering
ReactJS supports server-side rendering, which can help improve the performance of web applications. Server-side rendering is a technique where the user interface is rendered on the server and sent to the client as a complete HTML document, rather than being generated on the client. This can result in faster initial load times, as the client does not have to wait for JavaScript to execute and render the user interface. Additionally, server-side rendering can improve the SEO of a web application, as search engines can crawl and index the HTML document more easily.
React Native
ReactJS has a sister library called React Native, which allows developers to build native mobile applications using the same components and concepts used in ReactJS. This means that developers can build cross-platform mobile applications using the same codebase, which can save time and resources compared to building separate native applications for each platform. Additionally, React Native uses native components, which provides a more native feel to the user interface compared to hybrid mobile applications.
Strong Community Support
ReactJS has a large and active community, which means that there are a wealth of resources available to help developers learn the library and solve any problems they may encounter. Additionally, ReactJS is maintained by Facebook, which ensures that the library is well-supported and updated on a regular basis. This provides a level of stability and reliability that is not always present in other JavaScript libraries.
Improved Productivity
Finally, ReactJS can help improve developer productivity, as it allows developers to build complex user interfaces quickly and efficiently. Additionally, its component-based architecture makes it easy to manage and maintain code, which can help reduce the time and resources required to build and maintain web applications over time.
Conclusion 
ReactJS is an excellent choice for web development projects due to its improved performance, reusable components, ease of use, server-side rendering, React Native compatibility, strong community support, and improved productivity.
 
selena emani