<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shodi Farhod</title>
    <description>The latest articles on DEV Community by Shodi Farhod (@shodif).</description>
    <link>https://dev.to/shodif</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1295041%2F4b2bb9b6-d89e-4bf7-98d7-7e38abd352a3.png</url>
      <title>DEV Community: Shodi Farhod</title>
      <link>https://dev.to/shodif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shodif"/>
    <language>en</language>
    <item>
      <title>Evolution of Quality Attributes in Agile Software Development</title>
      <dc:creator>Shodi Farhod</dc:creator>
      <pubDate>Sat, 13 Apr 2024 04:19:44 +0000</pubDate>
      <link>https://dev.to/shodif/evolution-of-quality-attributes-in-agile-software-development-1dh6</link>
      <guid>https://dev.to/shodif/evolution-of-quality-attributes-in-agile-software-development-1dh6</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Defining Key Terms&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;What is Agile Software Development?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt; Agile software development is an iterative and incremental approach to software development that emphasizes flexibility, collaboration, and customer satisfaction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Characteristics:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Iterative and Incremental Development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Flexibility and Adaptability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Collaborative Approach&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Customer-Centric Focus&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Emphasis on Continuous Improvement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Empirical Process Control&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;What are Quality Attributes?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Definition:&lt;/strong&gt; Quality attributes, also known as non-functional requirements or quality characteristics, are the characteristics or properties of a software system that describe its overall quality or behavior beyond its functional requirements. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Quality Attributes:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Reliability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintainability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Usability &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compatibility&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Availability&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testability&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Different Agile Methodologies&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Scrum vs Kanban&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scrum:&lt;/strong&gt; Scrum is an agile methodology emphasizing teamwork, accountability, and iterative progress towards specific goals. It organizes work into fixed-length sprints where cross-functional teams collaborate to complete tasks from the product backlog. Scrum defines roles such as Product Owner, Scrum Master, and Development Team, along with ceremonies like sprint planning, daily stand-ups, sprint review, and retrospective meetings. This framework fosters transparency, inspection, and adaptation, enabling teams to continuously enhance their processes and deliver value to customers with greater efficiency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kanban:&lt;/strong&gt; Kanban is a visual framework aimed at managing work in progress and streamlining workflow. It prioritizes the reduction of bottlenecks, shortening lead times, and maximizing productivity. Work items are visually represented on a Kanban board, typically organized into columns depicting different stages of the workflow. Kanban stresses the importance of limiting work in progress (WIP) to prevent system overload and maintain a consistent flow of work. Kanban promotes continuous improvement through regular reflection and adaptation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How do they address quality attributes?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scrum: &lt;br&gt;
Flexibility:&lt;/strong&gt; Provides flexibility by allowing teams to adapt quickly to changing requirements through its iterative and incremental approach.&lt;br&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Scrum is inherently scalable, as it can be applied at various levels within an organization.&lt;br&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; Scrum emphasizes delivering a potentially shippable product increment at the end of each sprint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kanban: &lt;br&gt;
Flexibility:&lt;/strong&gt; Provides flexibility by visualizing the workflow and allowing teams to continuously prioritize and adjust their work based. &lt;br&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Kanban is highly scalable, it does not prescribe specific roles or ceremonies. &lt;br&gt;
&lt;strong&gt;Maintainability:&lt;/strong&gt; Kanban promotes a focus on continuous improvement and minimizing work in progress (WIP).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Examples of Agile Methodologies in Use&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Many companies use the agile method in their software, some popular examples include the following.&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Google&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Cisco&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sony&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Adobe&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Spotify&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Evolution of QA in Agile Lifecycle&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Early Stages (Inception and Planning)&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; Strong focus on defining the project vision, goals, and requirements. Encourage flexibility during this stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; May not be prominent in the early stages, especially for smaller projects or teams. Agile methodologies provide frameworks and practices that can scale to larger projects. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintainability:&lt;/strong&gt; Agile teams prioritize practices such as continuous integration, automated testing, and refactoring. Codebase remains manageable and adaptable. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Development and Iterations&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; Iterative and incremental development allows for regular inspection and adaptation. Enabling teams to respond to changing requirements and customer feedback quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; As the project progresses, scalability becomes increasingly important, especially for larger teams or projects. Agile frameworks like Scrum provide guidelines for scaling up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintainability:&lt;/strong&gt; Agile teams prioritize clean code practices, code reviews, and continuous integration.&lt;br&gt;
Codebase remains maintainable and easy to evolve over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Testing and Quality Assurance&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; Emphasize the importance of continuous testing and quality assurance throughout the development lifecycle. Testing is integrated into each iteration, allowing for early detection and resolution of defects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Adopt practices such as test automation, behavior-driven development (BDD), and continuous delivery. &lt;br&gt;
Ensure that testing efforts can keep pace with the evolving product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintainability:&lt;/strong&gt; Agile teams focus on building a comprehensive suite of automated tests, including unit tests, integration tests, and acceptance tests. To catch regressions and ensure that new features do not introduce defects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Deployment and Operations&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexibility:&lt;/strong&gt; Continuous deployment practices enable teams to release new features and updates to production quickly and safely. Responding to user feedback and market demands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Scalability considerations become more prominent during deployment and operations. Adopt DevOps practices to automate deployment pipelines and scale infrastructure as needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintainability:&lt;/strong&gt; Maintaining the product in production requires ongoing attention to ensure reliability, performance, and security.Prioritize monitoring, logging, and continuous improvement to address issues proactively.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Stakeholder Feedback&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Let's take a look at trends in stakeholder feedback on the impact of agile practices. These are the most common reviews and feedback given.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Communication and Collaboration:&lt;/strong&gt;&lt;br&gt;
Highlight the positive impact of agile practices on collaboration and communication within teams. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Increased Flexibility and Adaptability:&lt;/strong&gt;&lt;br&gt;
Stakeholders appreciate the flexibility and adaptability offered by agile practices, allowing teams to respond quickly to changing requirements and priorities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enhanced Focus on Customer Value:&lt;/strong&gt;&lt;br&gt;
Agile practices emphasize delivering value to customers early and frequently, which stakeholders often perceive as beneficial for ensuring that quality attributes align with customer needs and expectations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improved Product Quality and Reliability:&lt;/strong&gt;&lt;br&gt;
Stakeholders frequently report improvements in product quality and reliability as a result of adopting agile practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges with Technical Debt and Maintainability:&lt;/strong&gt;&lt;br&gt;
Some stakeholders may express concerns about challenges related to technical debt and maintainability, particularly in fast-paced agile environments. Balancing the need for rapid delivery with the long-term maintainability of the codebase can be a recurring challenge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Need for Continuous Improvement:&lt;/strong&gt;&lt;br&gt;
While stakeholders generally recognize the benefits of agile practices, they may also emphasize the importance of continuous improvement and refinement. Agile methodologies promote a culture of learning and adaptation. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion and Recommendations&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Recommendations For Using Agile Methodologies&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prioritize Quality Attribute Goals Early:&lt;/strong&gt;&lt;br&gt;
Prioritize quality attribute goals early in the project lifecycle, aligning them with project objectives and customer needs. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Establish Continuous Feedback Loops:&lt;/strong&gt;&lt;br&gt;
Agile teams should establish continuous feedback loops with stakeholders and end-users to validate and adjust quality attribute goals throughout the project. Regular review meetings, demos, and retrospectives provide opportunities to gather feedback and make informed decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace Cross-Functional Collaboration:&lt;/strong&gt;&lt;br&gt;
Agile teams should leverage the diverse skills and perspectives of team members to address quality goals collaboratively, ensuring that all aspects of quality are considered and prioritized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrate Quality Assurance Practices:&lt;/strong&gt;&lt;br&gt;
Quality assurance practices should be integrated throughout the development lifecycle, with a focus on continuous testing, automation, and validation. Agile teams should adopt techniques such as test-driven development (TDD) and behavior-driven development (BDD) to ensure that quality attributes are validated continuously &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on Delivering Value to Customers:&lt;/strong&gt;&lt;br&gt;
Agile teams should prioritize delivering value to customers early and frequently, ensuring that quality attributes contribute to overall user satisfaction and business value. By soliciting feedback from customers and delivering working software incrementally, teams can validate whether quality attribute goals are being achieved effectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Conclusion&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
In agile software development, quality attributes evolve throughout the project lifecycle in response to changing requirements, feedback, and project constraints. The key findings regarding this evolution include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Early Emphasis on Flexibility and Adaptability: Agile methodologies prioritize flexibility and adaptability from the inception of a project.&lt;/li&gt;
&lt;li&gt;Continuous Improvement of Scalability: Agile practices facilitate the scalability of software projects by providing frameworks and techniques for scaling development efforts.&lt;/li&gt;
&lt;li&gt;Ongoing Focus on Maintainability: Maintainability is a continuous concern throughout the agile development process. Agile teams prioritize practices such as continuous integration, automated testing, and refactoring to ensure that the codebase remains manageable and adaptable over time.&lt;/li&gt;
&lt;li&gt;Integration of Quality Assurance Throughout the Lifecycle: Agile methodologies integrate quality assurance activities throughout the development lifecycle, emphasizing continuous testing, feedback, and collaboration.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Usability Evaluation of Mobile Application Interfaces in Ride-Hailing Services</title>
      <dc:creator>Shodi Farhod</dc:creator>
      <pubDate>Tue, 19 Mar 2024 11:05:54 +0000</pubDate>
      <link>https://dev.to/shodif/usability-evaluation-of-mobile-application-interfaces-in-ride-hailing-services-3fgl</link>
      <guid>https://dev.to/shodif/usability-evaluation-of-mobile-application-interfaces-in-ride-hailing-services-3fgl</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;CRITERIA DEFINITION&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The following tasks will serve as the criteria used to evaluate the usability of mobile applications interfaces with ride hailing features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 1:&lt;/strong&gt; Setting the Destination&lt;br&gt;
&lt;strong&gt;Task 2:&lt;/strong&gt; Modifying Personal Information&lt;br&gt;
&lt;strong&gt;Task 3:&lt;/strong&gt; Setting Payment Methods&lt;br&gt;
&lt;strong&gt;Task 4:&lt;/strong&gt; Finding Past Ride Records&lt;br&gt;
&lt;strong&gt;Task 5:&lt;/strong&gt; Adjusting Setting Parameters&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which applications will we analyze?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Provides ride-hailing services, courier services, food delivery, and freight transport.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; Offers ride-hailing, vehicles for hire, motorized scooters, a bicycle-sharing system, rental cars, and food delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; Indonesian on-demand multi-service platform and digital payment technology group based in Jakarta.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;USABILITY&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Task 1: Setting Payment Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Enter the destination in the search bar on the main window.(First Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; Search for destinations in the main pages search window.(First Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; Search for destination on main page through tab bar.(First Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 2: Modifying Personal Info&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Click account option on the bottom right of the main page.(Second Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; Open Function Tab, select personal data area, click view profile then choose edit.(Fourth Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; Click personal avatar on the main page and then click pen to begin editing.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 3: Setting Payment Methods&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Select wallet icon on personal account page.(Second Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; On main page, open function symbol, then select payment.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; From Main Page go to profile page. From there select payment.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 4: Finding Past Ride Records&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Click Activity Icon on the bottom right of the main page.(Second Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; On main page, open function symbol, then select ride history.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; From Main Page select “Orders” Icon to view history.(Second Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Task 5: Adjusting Setting Parameters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber:&lt;/strong&gt; Click personal information on main page, select settings icon.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lyft:&lt;/strong&gt; On main page, open function symbol, then select settings.(Third Layer)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gojek:&lt;/strong&gt; From Main Page select Personal Profile and then select manage account. Settings will be available. (Third Layer)&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Feedback Analysis&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here are the key takeaways from user feedback on the three different applications. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Uber&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;UI is clean and well designed&lt;/li&gt;
&lt;li&gt;Functional Classification is Precise&lt;/li&gt;
&lt;li&gt;Provides options for setting destination settings&lt;/li&gt;
&lt;li&gt;Popular with young and middle aged people&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Information of Payment settings is not precise&lt;/li&gt;
&lt;li&gt;Automatically install food delivery option which distracts from the main feature of ride hailing. &lt;/li&gt;
&lt;li&gt;Navigating pages is not intuitive&lt;/li&gt;
&lt;li&gt;The display is more than an average phone’s display range&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Lyft&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Page is simple&lt;/li&gt;
&lt;li&gt;Operation is intuitive&lt;/li&gt;
&lt;li&gt;Addition of functions toolbar is user friendly&lt;/li&gt;
&lt;li&gt;Car calling function is on main page and is easy to access&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modifying personal data could be better designed&lt;/li&gt;
&lt;li&gt;The settings page was not intuitive&lt;/li&gt;
&lt;li&gt;Separate text and image areas were not distinguished enough and caused confusion&lt;/li&gt;
&lt;li&gt;Needed to access fourth layer to adjust personal data&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Gojek&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Easily accessible chat function to talk with driver&lt;/li&gt;
&lt;li&gt;Provides various features for users&lt;/li&gt;
&lt;li&gt;Payment methods are easy to access and easy to use&lt;/li&gt;
&lt;li&gt;Provides many methods for payments&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Provides too much info on main screen, up to six services. &lt;/li&gt;
&lt;li&gt;There is too much to explore for new users&lt;/li&gt;
&lt;li&gt;Not enough language options, thus making it less accessible&lt;/li&gt;
&lt;li&gt;The design felt cluttered and messy&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Evaluation and Discussion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Usability Optimization Tips for Ride Hailing Services&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Add Signifiers: Have some type of icon of images to help users understand what is being displayed to them. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Separate Features: Different functionalities should be in separate areas. Do not clutter everything onto a single display. For example, how Lyft was able to use a navigation tab. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Main Page-Main Features: Place the most frequently used features on the main page for easy access. The user should be able to immediately select what they want to do. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;KEEP IT SIMPLE: LESS IS MORE. Don’t overwhelm users with an over designed UI and many redundant features. The best app should be easily learned and used. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Monolithic vs. Microservices vs. Serverless Architecture</title>
      <dc:creator>Shodi Farhod</dc:creator>
      <pubDate>Sat, 02 Mar 2024 09:45:44 +0000</pubDate>
      <link>https://dev.to/shodif/monolithic-vs-microservices-vs-serverless-architecture-2nop</link>
      <guid>https://dev.to/shodif/monolithic-vs-microservices-vs-serverless-architecture-2nop</guid>
      <description>&lt;p&gt;When it comes to architectural styles, developers have no shortage of options. There are numerous viable choices and today we will discuss three popular architectural styles. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Monolithic Architecture?
&lt;/h2&gt;

&lt;p&gt;Monolithic means:  All components of an application are tightly integrated into a single codebase and deployed and deployed as a single unit. Examples of popular companies that have used this include Netflix, Uber, Spotify. &lt;/p&gt;

&lt;p&gt;Remember &lt;strong&gt;MONO&lt;/strong&gt;lithic. "MONO" means one. So you can think of Monolithic architecture as &lt;strong&gt;ONE UNIT&lt;/strong&gt;. In simple terms, monolithic means having your entire project as a single unit. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the key characteristics of Monolithic Architecture?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Single Codebase:&lt;/em&gt; Everything is coded and developed together&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Tight Coupling:&lt;/em&gt; Everything is tightly integrated with each other&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Centralized Deployment:&lt;/em&gt; The entire application is deployed as a single unit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How does Monolithic Architecture Perform?&lt;/strong&gt;&lt;br&gt;
Let's try and look at some important aspects of performance as it relates to Monolithic Architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Response Times:&lt;/em&gt; Monolithic has poor response times, especially for more complex problems. This is because all the code goes through one application. For smaller applications it works better however as your program becomes more complex and larger it can induce latency problems. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Scalability:&lt;/em&gt; Monolithic also isn’t able to be scaled well. Because all of the code is closely integrated if one part is changed the rest must also be adjusted to compensate for it. Good to scale vertically, bad to scale horizontally. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Resource Utilization:&lt;/em&gt; In a Monolithic structure all components share the same resources, such as CPU and memory. It is difficult to efficiently manage resources because of this. The Monolithic style is not very flexible which further hinders it. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall Monolithic Architecture performs better when implementing simple projects or prototypes. However as complexity increases performance decreases. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developing and Deploying Monolithic Architecture&lt;/strong&gt;&lt;br&gt;
Another important factor to discuss is how we can develop and deploy a project built using Monolithic Architecture. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Development:&lt;/em&gt; Easy to develop. Monolith has simple patterns, like for example MVC structure. There is only a single codebase to keep track of and work with. However this also makes this structure less flexible for developers. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Deployment&lt;/em&gt;: Easy and fast to deploy thanks to the entire application working as a single unit. However for bigger applications it may become more complex and time consuming to deploy. Monolithic is best for simpler and more basic applications. Something like prototypes. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We can conclude that Monolithic Architecture is best suited for the development and deployment of simpler projects. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operational Considerations for Monolithic Architecture&lt;/strong&gt;&lt;br&gt;
Let's analyze some operational considerations which must be taken into account when using Monolithic Architecture. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Monitoring:&lt;/em&gt; Monitoring an application built with Monolithic architecture requires tracking the overall system performance, resource usage and application help. Tools like Datadog, Prometheus or New Relic can be used to keep track of CPU and memory usage, database performance, and response times. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Logging:&lt;/em&gt; In Monolithic Architecture centralized logging mechanisms are needed in order to accumulate logs from various parts of the application. Tools like ELK stack or Splunk can be used for this. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Fault Tolerance:&lt;/em&gt; In Monolithic Architecture Fault Tolerance involves redundancy. For example having multiple servers, implementing retry mechanisms and handling errors centrally. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Updating/Maintenance:&lt;/em&gt; This requires downtime or a maintenance period. Because the app works as a single unit for any part of it to be updated, the entire application must go down for some time.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We should keep this in mind when deciding what type of Architecture Style to use. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros and Cons of Monolithic Architecture&lt;/strong&gt;&lt;br&gt;
Now we will take a look at the advantages and disadvantages of Monolithic Architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Pros:&lt;/em&gt; Simplicity: Of the three style, Monolithic is the simplest to comprehend. Performance: Can have lower latency and faster response times for low complexity apps. Ease of Development: Developers have a single unit to develop and maintain. Easier to debug. Ease of Deployment: Entire application is deployed as one unit, making it simpler than Serverless and Microservices&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cons:&lt;/em&gt; Scalability: Challenging to scale as the entire app must be changed to handle new additions. Maintainability: As they grow, Monolithic apps become more complex and difficult to manage. Changes in one part of the code impact the entire system. Fault Isolation: A fault in one service of the application can bring down the entire system. Resource Utilization: All components share the same environment and resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is Microservices Architecture?
&lt;/h2&gt;

&lt;p&gt;Microservices means: The application is built as a collection of services. These services are all independently deployed and loosely integrated. Examples of popular companies that implement this include Amazon, eBay, SoundCloud. &lt;/p&gt;

&lt;p&gt;Micro &lt;strong&gt;SERVICES&lt;/strong&gt;. Services as in plural. Keep in mind that Microservices revolves around working with multiple services. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the key characteristics of Microservices Architecture?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Decomposition:&lt;/em&gt; Application broken down to smaller parts&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Independence:&lt;/em&gt; Each service is developed and deployed on its own&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Loose Coupling:&lt;/em&gt; Microservices are not closely integrated&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How does Microservices Architecture Perform?&lt;/strong&gt;&lt;br&gt;
Let's try and look at some important aspects of performance as it relates to Mircoservices Architecture.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Response Times:&lt;/em&gt; Microservices response time depends on the number of services provided. Microservices can induce additional latency because requests need to be routed through various services. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Scalability&lt;/em&gt;: Microservices architecture can be scaled both horizontally and vertically making it the very flexible. Each microservice can be scaled without impacting other parts of the system because services are developed and deployed independently. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Resource Utilization:&lt;/em&gt; Because individual sources can be scaled (granular scaling) resources can be efficiently allocated. However, the communication overhead between services and imbalanced workloads can harm its resource utilization. Having services be developed separately allows Microservices to efficiently manage and distribute resources. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Developing and Deploying Microservice Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Development:&lt;/em&gt; Microservices are not fast to be developed. It has less code on average than monolithics architecture but its complexity increases. Microservices require multiple services to be developed. This makes it more complex but also makes it more flexible, meaning different resources can be used by different teams and developers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;em&gt;Deployment:&lt;/em&gt; Each service needs to be deployed and managed independently making it more complex. Deploying Microservices means deploying, packaging, and managing multiple services/functions. Because of this microservices deployment is more difficult than monolithic and serverless. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Operational Considerations for Microservices Architecture&lt;/strong&gt;&lt;br&gt;
Let's analyze some operational considerations which must be taken into account when using Microservices Architecture. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Monitoring:&lt;/em&gt; Unlike Monolithic Architecture, in Microservices monitoring means tracking the performance of individual services as well as their interactions. Distributed tracing tools like Jaeger or Zipkin help trace requests as they move through multiple services.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Logging&lt;/em&gt;: Each microservice generates its own log. These can then be accumulated using centralized logging solutions. Tools like ELK stack can be used to analyze and collect these logs. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Fault Tolerance:&lt;/em&gt; The benefit of Microservices is that it promotes fault isolation. Failures can be contained to their respective services so the rest of the application is unaffected. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Updating/Maintenance:&lt;/em&gt; Microservices makes updates and maintenance more manageable by providing independent deployment of services. However it is still important to manage dependencies between services and also ensure compatibility with other parts of the system. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pros and Cons of Microservices Architecture Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Pros:&lt;/em&gt; Scalability: Each component can be scaled independently from the rest of the system.  Resource Utilization/Flexibility: Resources can be directed to where they are needed.  Fault Isolation: A fault in one service won’t impact the rest of the system. Easy to isolate faults in code Flexibility: Different teams working on different services can use different tools and frameworks for each service. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cons:&lt;/em&gt; Complexity: Have to manage multiple services. Development and deployment is needed for each service. Operational Overhead:  Managing a large number of services needs a robust infrastructure. Deployment pipelines, monitoring and logging all add to operational overhead. Coordination: Coordinating changes across multiple services, ensuring backwards compatibility, and managing dependencies is very difficult.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What is Serverless Architecture?
&lt;/h2&gt;

&lt;p&gt;Serverless Architecture means: A cloud provider manages the infrastructure needed to run code. Developers focus entirely on writing and deploying functions. Popular examples include Codepen, Figma, AWS.&lt;/p&gt;

&lt;p&gt;It is easy to remember how to distinguish Serverless Architecture. As the name suggests, the developer does not need to concern themselves with servers.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the key characteristics of Serverless Architecture?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Event Driven:&lt;/em&gt; Functions execute in response to events&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;No Server Management:&lt;/em&gt; Infrastructure is handled by the cloud provider&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Pay-Per-Use:&lt;/em&gt; Serverless platforms only charge users based on the number of executions. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How does Serverless Architecture Perform?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Response Times:&lt;/em&gt; Serverless architecture offers fast response times. In this style it is not needed to manage servers which helps speed up the process. Unlike Monolithic, Serverless is not developed and deployed as a bulk unit so it can support more complex programs. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Scalability:&lt;/em&gt; Serverless Architecture offers automatic scaling. The scaling is handled by the cloud platform being used. It is highly scalable but may have limitations when it comes to execution and memory. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Resource Utilization:&lt;/em&gt; Resources are provisioned based on need. They are allocated depending on the actual demand and execution requirements of specific functions. Also has pay per use pricing model making it cost efficient. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Developing and Deploying Monolithic Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Development:&lt;/em&gt;  Serverless architecture has the least code on average of the three however the less the code the greater the complexity. This makes Serverless the most complex of the three. Additionally debugging and testing is more difficult with Serverless Architecture. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Deployment:&lt;/em&gt; Can deploy individual functions/services without needing to worry about managing the infrastructure. Cloud providers handle scaling, monitoring and maintenance which simplifies the process. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Operational Considerations for Serverless Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Monitoring:&lt;/em&gt; The benefit of Serverless Architecture is that they provide built in monitoring services. Cloud providers like AWS, Google Cloud and Azure provide their own services for monitoring serverless functions. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Logging:&lt;/em&gt; Similarly cloud providers also offer their own services for logging serverless functions. Logs are generated automatically by these providers. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Fault Tolerance:&lt;/em&gt; Serverless Architecture similar to Microservices inherently provides fault tolerance. This is because it also has its functions executed in separate environments. Cloud providers automatically handle underlying infrastructure and fault recovery. &lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Updating/Maintenance:&lt;/em&gt; Updating and maintaining Serverless Architecture is easier than Monolithic Architecture. Developer’s can update and maintain individual functions without impacting the entire application. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pros and Cons of Serverless Architecture&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Pros:&lt;/em&gt; Scalability: Serverless architecture scales automatically based on demand. Makes for efficient resource utilization. Cost: Pay-per-use protocol means you only pay for resources used during execution. Leads to cost savings. Simplicity: Developers can focus on writing code without worrying about managing infrastructure. Fault Tolerance: Serverless architecture means cloud providers handle infrastructure management, including fault tolerance and scaling.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Cons:&lt;/em&gt; Less Control: Lose control of server hardware, execution, environments and updates. Vendor-Lock-In: Each provider provides its own unique features so it is difficult to switch between them. Debugging and Testing: Hard to replicate the production environment and run successful tests.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  So when should each of these be used?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Monolithic Architecture:&lt;/em&gt; This style is best suited for small to medium sized projects. Monolithic is perfect for projects where development time, expertise, and budget are low. This style is good when an application has low complexity and there is not a need for a lot of flexibility and scalability. It is popular when it comes to prototyping.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Microservices Architecture:&lt;/em&gt; This style is best suited to large-complex projects. This style is best for when projects have multiple teams, tech stacks, evolving requirements, and where scalability is essential. Microservices are useful when continuous development and deployment is needed. If a team has high expertise then they should consider Microservices.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Serverless Architecture:&lt;/em&gt; This style is best suited for event-driven and unpredictable workloads. Such applications can benefit from Serverless Architecture because it scales automatically based on demand. Team expertise should be high if considering Serverless Architecture. Additionally this style is good for stateless applications or functions that can be executed without relying on shared or persistent connections. &lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
  </channel>
</rss>
