<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Monorepo | Kate Gable</title>
	<atom:link href="https://www.katesky.com/category/monorepo/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.katesky.com</link>
	<description>sharing knowledge, encouraging to learn, promoting passion for coding, supporting mothers who code</description>
	<lastBuildDate>Mon, 09 Dec 2024 19:58:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
<site xmlns="com-wordpress:feed-additions:1">193364748</site>	<item>
		<title>Streamlining Application Development: Nx Monorepo’s Transformative Impact for Angular Developers.</title>
		<link>https://www.katesky.com/2023/10/11/streamlining-application-development-nx-monorepos-transformative-impact-for-angular-developers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=streamlining-application-development-nx-monorepos-transformative-impact-for-angular-developers</link>
		
		<dc:creator><![CDATA[Katerina Gable]]></dc:creator>
		<pubDate>Wed, 11 Oct 2023 16:57:58 +0000</pubDate>
				<category><![CDATA[angular]]></category>
		<category><![CDATA[Monorepo]]></category>
		<guid isPermaLink="false">https://www.katesky.com/?p=277</guid>

					<description><![CDATA[<p>Streamlining Application Development: Nx Monorepo’s Transformative Impact for Angular Developers. In the fast-paced world of enterprise software development, I discovered Nx Monorepo as an Angular developer when I worked on a team converting AngularJs project to Angular, the latest version 14. That <br /><a href="https://www.katesky.com/2023/10/11/streamlining-application-development-nx-monorepos-transformative-impact-for-angular-developers/" class="more-link">Read More</a></p>
The post <a href="https://www.katesky.com/2023/10/11/streamlining-application-development-nx-monorepos-transformative-impact-for-angular-developers/">Streamlining Application Development: Nx Monorepo’s Transformative Impact for Angular Developers.</a> first appeared on <a href="https://www.katesky.com">Kate Gable</a>.]]></description>
										<content:encoded><![CDATA[<body>
<p>Streamlining Application Development: Nx Monorepo’s Transformative Impact for Angular Developers.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p>In the fast-paced world of enterprise software development, I discovered Nx Monorepo as an Angular developer when I worked on a team converting AngularJs project to Angular, the latest version 14. That was my first time working with nx on a production code, and I was so excited because I learned it in my free time and was eager to see all the benefits it would provide. This tool became a game-changer in streamlining the project, ensuring code quality, consistency, and developer satisfaction. It’s a transformative step that streamlines development, unites teams, and enhances efficiency. Do you want to be the hero on your team? Keep reading, and you will have all the tools to get your team to be on top of their development game.</p>



<p>In this article, we’ll explore how Nx Monorepo facilitates Angular development and provides practical steps for you to get started. But that’s not all. We’ll also delve into the challenges I faced when introducing Nx to my team, offering insights into how to move your team toward its adoption. Additionally, we’ll discuss the advantages of having this skill set, not just for your projects but also for your career growth. Join me on this journey to revolutionize your approach to building software solutions and empower your team for the future.</p>



<p>Let me begin by introducing myself. I’m Kate, and I’ve been involved in enterprise software development for the past 25 years. My time consulting at HeroDevs has been a highlight of my career, and I take pride in being a part of the team here. I specialize in web development using the Angular framework, although I am a full-stack developer.</p>



<p><strong>New Team</strong></p>



<p>When I joined my current project, it was already well into the advanced stages of development, with the beta version on the horizon. The team handed me a set of urgent user stories, and the deadline was rapidly approaching. In our current setup, each team operates within its own dedicated repository, with some teams already successfully utilizing Nx.</p>



<p>We’re currently immersed in a micro-frontend architecture project, creating a web component using the <a href="http://twitter.com/angular" rel="noreferrer noopener" target="_blank">@angular</a>-elements library. In the initial stages, we encountered a significant challenge: our unit-test coverage was alarmingly low. We found ourselves heavily dependent on the QA group, which isn’t an ideal situation. Our primary objective was to boost our unit test coverage to an ambitious 80%. However, given that a substantial portion of our code remained untested at a mere 30%, we had no choice but to allocate an entire sprint solely to the task of writing unit tests. Despite our dedicated efforts during that sprint, we still fell short of reaching the 80% target.</p>



<p><strong>Let us get started with Nx</strong></p>



<p>After our second production release, a significant challenge emerged: the integration of a substantial new feature. I was tasked with enhancing our approach to state management and component architecture. Simultaneously, we needed to plan a strategy for facilitating bi-directional communication in our micro-frontend setup.</p>



<p>One of my favorite features of Nx is the caching of tasks. Executing commands like build and test can be resource-intensive when working with a large codebase. However, Nx employs a computational cache, ensuring it doesn’t unnecessarily rebuild the same code. With a limited number of sprints available before our upcoming release, I began advocating for the adoption of Nx within our team.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p><strong>Making the team believe it’s the right thing</strong></p>



<p>The initial step involved asking them if they were prepared to learn about the benefits of integrating Nx into our repository.<br>I created a task with the benefits of using nx. My primary goal is to ensure that other team members feel comfortable integrating this new and complex technology, thus minimizing potential adverse effects.</p>



<p>**1. Standardized Libraries and Applications:** <br> Using a mono repo approach, you can ensure that all repository applications use the <em>same versions</em> of libraries like Angular and, RxJS, NgRx. This helps maintain consistency and reduces the chances of compatibility issues arising when different projects use different library versions. With the new feature’s introduction, we plan to incorporate additional libraries. This strategic move allows us to run independent unit tests on the freshly added code, thus reaching the goal of 80% coverage, seamlessly integrating NgRx for state management, and introducing reusable code components essential for integration purposes. Moreover, we’ll extend our project by including a new app designed for micro frontend integration within our workspace, thus laying the foundation for enhanced code reuse and collaboration.</p>



<p>**2. Computational Cache for Building Artifacts:** <br> Nx provides caching mechanisms that can significantly speed up the build process. Cached artifacts can be reused during local builds and within the PR/main processes, reducing build times and improving developer productivity.</p>



<p>**3. Dependency Graph and Management:** <br> Nx provides tools to visualize the dependency graph between different projects, making it easier to understand how different components are interconnected. This visibility helps in making informed decisions about code changes and minimizes unintended side effects.</p>



<p>**4. Better Developer Experience:** <br> Nx workspace tools offer features like code generation, code linting, testing, and more, all integrated within the mono repo setup. This comprehensive tooling enhances the overall developer experience and makes it easier to manage and develop different parts of the project.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p><strong>Let the work begin</strong> </p>



<p>I was thrilled to kickstart our Nx journey. One of my initial tasks was to set up the workspace, which, fortunately, didn’t pose too many challenges. The only missing piece in our project was ESLint, which did require some time and effort to address. However, I welcomed the challenge, and by the end of the day, we had made significant progress.</p>



<p>As we continue our journey of adopting Nx, local caching remains my favorite feature.</p>



<p> I hope this article has been helpful, especially for those of you dealing with complex architectures, particularly when developing web components and creating multiple bundles for integration. Nx proves to be a valuable solution.</p>



<p>So far, we’ve developed two applications and five libraries, achieving a remarkable 85% to 100% unit test coverage for all new code. We’re still exploring the full range of possibilities that Nx offers, and I’ll be delighted to provide updates as we make progress.</p>



<hr class="wp-block-separator has-alpha-channel-opacity">



<p><strong>Conclusion</strong> </p>



<p>I’d like to emphasize that Nx isn’t limited to Angular; it’s also prominent in the React world. While it’s particularly popular in multi-team environments, my experience showcases another compelling use case. </p>



<p>Having this versatile tool in your toolbox can significantly boost your career prospects. Consider diving deeper into Nx, and advocate for its use in your workplace or project, and you’ll discover that it could be the key to unlocking your next career advancement. Thank you for joining me on this Nx journey, and here’s to the exciting opportunities it brings!</p>



<hr class="wp-block-separator has-alpha-channel-opacity">
</body>The post <a href="https://www.katesky.com/2023/10/11/streamlining-application-development-nx-monorepos-transformative-impact-for-angular-developers/">Streamlining Application Development: Nx Monorepo’s Transformative Impact for Angular Developers.</a> first appeared on <a href="https://www.katesky.com">Kate Gable</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">277</post-id>	</item>
		<item>
		<title>Enterprise Application Journey</title>
		<link>https://www.katesky.com/2020/04/21/enterprise-application-journey/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=enterprise-application-journey</link>
		
		<dc:creator><![CDATA[Katerina Gable]]></dc:creator>
		<pubDate>Tue, 21 Apr 2020 20:42:59 +0000</pubDate>
				<category><![CDATA[angular]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[Monorepo]]></category>
		<category><![CDATA[Enterprise Application]]></category>
		<category><![CDATA[full-stack]]></category>
		<category><![CDATA[kate sky]]></category>
		<category><![CDATA[ngrx]]></category>
		<category><![CDATA[state management]]></category>
		<guid isPermaLink="false">https://www.katesky.com/?p=137</guid>

					<description><![CDATA[<p>Angular: front-end from start to MVP by Kate Sky I am making this post as the first step in documenting my journey of building an Enterprise application for my side project. The application is in the process of going towards an MVP. This <br /><a href="https://www.katesky.com/2020/04/21/enterprise-application-journey/" class="more-link">Read More</a></p>
The post <a href="https://www.katesky.com/2020/04/21/enterprise-application-journey/">Enterprise Application Journey</a> first appeared on <a href="https://www.katesky.com">Kate Gable</a>.]]></description>
										<content:encoded><![CDATA[<body>
<h3 class="wp-block-heading">Angular: front-end from start to MVP</h3>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>by Kate Sky</p></blockquote>



<p>I am making this post as the first step in documenting my journey of building an Enterprise application for my side project.</p>



<p>The application is in the process of going towards an MVP.</p>



<p>This application is an “Uber for home services.” </p>



<p>The reason I had started this project: is to provide a value-based service while practicing and teaching others skills I had acquired over the years.</p>



<p>The objective of this post is to establish a timeline of the application going live from its infancy.</p>



<hr class="wp-block-separator">



<p>Following is the list of topics that we are going to discuss in this article:</p>



<ol class="wp-block-list"><li>Application Stack</li><li>Architectural decisions<ol style="user-select: auto;"><li>Monorepo with Nx</li><li>Domain-Driven Design with Angular</li><li>State management with NGRX </li><li>Logging with LogRocket</li><li>Authentication with Auth0</li></ol></li><li>Conclusion</li><li>Links</li></ol>



<hr class="wp-block-separator">



<h4 class="wp-block-heading">1. Application Stack</h4>



<p>WEB- Angular<br>API – .Net Core<br>DB – SQL server</p>



<hr class="wp-block-separator">



<h4 class="wp-block-heading">2. Architectural decisions</h4>



<p>For web client, I am using Angular framework.</p>



<p>My goal – to be able to scale the development of this application by having the ability to go from one team to many teams building multiple frontend and backend applications all in the same workspace. </p>



<p>I chose <a target="_blank" href="https://nx.dev/angular" rel="noreferrer noopener">NX</a>, so developers have a holistic dev experience powered by an advanced CLI (with editor plugins), capabilities for controlled code sharing, and consistent code generation.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="446" height="664" src="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/1.png?resize=446%2C664&#038;ssl=1" alt="" class="wp-image-139" loading="lazy" srcset="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/1.png?w=446&amp;ssl=1 446w, https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/1.png?resize=202%2C300&amp;ssl=1 202w" sizes="auto, (max-width: 446px) 100vw, 446px" /></figure></div>



<hr class="wp-block-separator">



<p>Monorepos allow huge enterprise applications to be subdivided into small and maintainable libraries. I followed the best practice from the creators of NX and have added a <a rel="noreferrer noopener" style="user-select: auto;" target="_blank" href="https://www.npmjs.com/package/@angular-architects/ddd">domain-driven</a> design approach to creating the features. One of the features is the search capability for the providers that are displayed. I added a domain ‘Providers’ it contains the feature store for state management and the infrastructure where service is implemented to call the API.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>We need to first define criteria for slicing our application into individual parts and we must establish rules for communication between them.</p><cite>referenced: <a href="https://www.angulararchitects.io/aktuelles/sustainable-angular-architectures-1/">https://www.angulararchitects.io/aktuelles/sustainable-angular-architectures-1/</a></cite></blockquote>



<p></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="463" height="379" src="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/2.png?resize=463%2C379&#038;ssl=1" alt="" class="wp-image-140" loading="lazy" srcset="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/2.png?w=463&amp;ssl=1 463w, https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/2.png?resize=300%2C246&amp;ssl=1 300w" sizes="auto, (max-width: 463px) 100vw, 463px" /></figure></div>



<hr class="wp-block-separator">



<p>I have added <a rel="noreferrer noopener" style="user-select: auto;" target="_blank" href="https://ngrx.io/">NGRX </a>from the very beginning because I would like to have an ability to replay the user’s trip through the application, and I will be adding <a rel="noreferrer noopener" style="user-select: auto;" target="_blank" href="https://logrocket.com/">LogRocket </a>to view that path. NGRX will also help me write clean reactive components with async pipes. Root store has its own module and is at the root of the application. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Stop guessing why bugs happen. LogRocket lets you replay what users do on your site, helping you reproduce bugs and fix issues faster.</p><cite><a href="https://logrocket.com/">https://logrocket.com/</a></cite></blockquote>



<div class="wp-block-image"><figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="467" height="482" src="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/3-2.png?resize=467%2C482&#038;ssl=1" alt="" class="wp-image-143" loading="lazy" srcset="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/3-2.png?w=467&amp;ssl=1 467w, https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/3-2.png?resize=291%2C300&amp;ssl=1 291w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure></div>



<hr class="wp-block-separator">



<p>Since we have 2 features now, we can see that NGRX stores for each feature are located near the domain for each feature’s library. There is separate module for each store to be able to import each feature module lazily.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="498" height="575" src="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/4.png?resize=498%2C575&#038;ssl=1" alt="" class="wp-image-144" loading="lazy" srcset="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/4.png?w=498&amp;ssl=1 498w, https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/4.png?resize=260%2C300&amp;ssl=1 260w" sizes="auto, (max-width: 498px) 100vw, 498px" /></figure></div>



<hr class="wp-block-separator">



<p>Users have to register, and for authentication, I picked <a rel="noreferrer noopener" style="user-select: auto;" target="_blank" href="https://auth0.com/">Auth0</a>. Right now, you can see that authentication is on the root store. I have a login and logout actions that are calling the service to execute the correct code. I am using the service I download from the example provided by auth0. It still needs to be cleaned up. </p>



<p>I added a component for the callback path need for the login of the authentication. There is a CanActivate guard that is used for components that need an authorized user.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img data-recalc-dims="1" decoding="async" width="506" height="454" src="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/5.png?resize=506%2C454&#038;ssl=1" alt="" class="wp-image-145" loading="lazy" srcset="https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/5.png?w=506&amp;ssl=1 506w, https://i0.wp.com/www.katesky.com/wp-content/uploads/2020/04/5.png?resize=300%2C269&amp;ssl=1 300w" sizes="auto, (max-width: 506px) 100vw, 506px" /></figure></div>



<hr class="wp-block-separator">



<h4 class="wp-block-heading">3 . Conclusion</h4>



<p>In conclusion, we will go through whats next.</p>



<p>I wanted to get the frontend started first and have a clear user experience throughout the application.</p>



<p>I will add the .net Core API to store the data to the database next. </p>



<p>I deployed code to GitHub pages to be able to get user feedback at the very early stages of this application.</p>



<hr class="wp-block-separator">



<h4 class="wp-block-heading">4. Links</h4>



<p>Code: <a style="user-select: auto;" href="https://github.com/katesky/saraphan-radio">https://github.com/katesky/saraphan-radio</a></p>



<p>Dev version: <a href="https://katesky.github.io/saraphan-radio/">https://katesky.github.io/saraphan-radio/</a></p>



<p>Domain: <a href="http://sarafanradio.com/">http://saraphanradio.com</a></p>



<p></p>



<p></p>
</body>The post <a href="https://www.katesky.com/2020/04/21/enterprise-application-journey/">Enterprise Application Journey</a> first appeared on <a href="https://www.katesky.com">Kate Gable</a>.]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">137</post-id>	</item>
	</channel>
</rss>
