FSD CIE-1 Notes
FSD CIE-1 Notes
FSD CIE-1 Notes
CIE-1 Notes
(Prepared by Naveenkumar)
IMPORTANT INSTRUCTIONS:
1. These notes are designed to help you understand the core concepts of the syllabus, it's essential to remember that
success in your exams requires more than just passive reading.
2. Prepare to apply your knowledge by practicing real-world examples and problem-solving scenarios to excel in
application-based exam questions
3. Be sure to practice the assignment questions provided at CosineTech to enhance your understanding and
problem-solving skills
TOPIC: ENTERPRISE
1.What is an Enterprise?
An enterprise is a term commonly used in the business world to refer to a large and complex organization, typically
involved in commercial, industrial, or professional activities.
OR
An enterprise is an entity with a certain level of scale, complexity, and organization, which operates with refined goals and
objectives, and often involves the collaboration of multiple individuals or departments to achieve success.
Depending on the context in which it is used we have Business Enterprise and Software Enterprise.
Business Enterprise: In the business context, an enterprise refers to a commercial organization or a company in various
economic activities with the primary objective of generating profits. It can be a small local business, a medium-sized
company, or a large multinational corporation.
Software Enterprise: In the field of software and Information technology, an enterprise is a large-scale organization with
complex computing needs. This type of enterprise often requires specialized software, and operations. Enterprise
software solutions are designed to handle the complexities of large organizations, such as Customer relationship
Management (CRM), Enterprise Resource Management (ERM), Human Resource Management (HRM), and Supply chain
Management (SCM) systems.
It refers to the systematic approach of structuring and managing various business processes within an enterprise to ensure
efficiency, productivity, and successful achievement of organizational goals. It involves the design documentation, and
optimization of workflows, tasks, and activities that take place within the organization.
The process of organizing an enterprise involves creating an efficient structure that enables smooth operations and
maximizes productivity. Enterprises often adopt a hierarchical structure, dividing responsibilities into different levels, such
as:
1.C-Level Executives: These are top-level executives, like Chief Executing Officers (CEOs), Chief Operations Officer
(COOs), and Chief Financial Officer (CFOs), who make strategic decisions and set the overall direction of the company.
2.Middle Management: This level includes department heads, managers, and supervisors who oversee specific areas or
teams within the enterprise.
3.Operational Staff: These are the employees who carry out day-to-day tasks and operations.
Understanding the different types of business activities in an enterprise is crucial for comprehending how organizations
function and achieve their goals. Business activities can be broadly categorized into three main types: primary activities,
support activities, and general management activities.
1.Primary Activities:
Primary activities are directly involved in the creation, production, and delivery of goods or services that the enterprise
offers to its customers. These activities are at the core of the enterprise's value chain and directly impact its revenue
generation. The primary activities include:
a. Inbound Logistics: This involves receiving, storing, and managing raw materials or inputs that are required for the
production process.
b. Operations/Production: The actual manufacturing or production process where the raw materials are transformed into
finished products or services.
c. Outbound Logistics: Once the products or services are ready, they need to be stored, distributed, and delivered to the
customers or end-users.
d. Marketing and Sales: Activities related to promoting the products or services, identifying potential customers, and
generating sales.
e. Customer Service: After-sales support, addressing customer inquiries, and ensuring customer satisfaction are
essential aspects of this activity.
2.Support Activities:
Support activities are not directly involved in the production process, but they provide essential support and resources for
the primary activities to function efficiently. These activities contribute to the smooth operation of the enterprise. The
support activities include:
a. Procurement: Involves sourcing and acquiring the necessary raw materials, goods, or services from suppliers to
support production.
b. Human Resources (HR): Responsible for recruitment, employee training, performance management, benefits
administration, and fostering a positive work environment.
c. Technology/Information Systems: Managing and maintaining the IT infrastructure, software applications, and data
necessary for the enterprise's operations.
d. Infrastructure/Facilities Management: Ensuring that the physical infrastructure, facilities, and utilities required for
operations are in good condition and well-maintained.
General management activities are essential for the overall functioning and strategic direction of the enterprise. These
activities oversee the entire organization and its interactions with external stakeholders. General management activities
include:
a. Strategic Planning: Defining the long-term objectives, vision, and mission of the enterprise and formulating strategies
to achieve them.
b. Financial Management: Managing the organization's finances, budgeting, financial reporting, and ensuring financial
stability.
c. Legal and Regulatory Compliance: Ensuring the enterprise adheres to relevant laws, regulations, and industry
standards.
d. Corporate Governance: Establishing the framework of rules and practices by which the enterprise is directed and
controlled.
Understanding these types of business activities allows enterprises to analyze and optimize their operations, identify
areas for improvement, and make informed decisions to stay competitive and achieve their business objectives. Efficient
coordination and integration of these activities play a crucial role in the success of an enterprise in the marketplace.
4. What is Business Process?
A business process is a series of interconnected tasks or activities that are performed to achieve a specific business goal.
These processes outline how work is done, who is responsible for each step, and what resources are required. Business
processes can be formal or informal, but organizations often strive to standardize and optimize them to improve efficiency
and quality.
Order Processing: From the initial customer order to product delivery and invoicing.
Employee Onboarding: The process of bringing new hires into the organization and providing them with necessary
training and resources.
Inventory Management: Tracking, ordering, and managing the inventory levels to ensure smooth operations.
Customer Support: Handling customer inquiries, complaints, and providing support services.
Goal-Oriented: Business processes are designed to achieve a particular objective or outcome. Whether it's delivering a
product to a customer, processing an order, handling customer inquiries, or managing finances, each process has a clear
purpose.
Structured and Sequential: Business processes follow a predefined sequence of steps. Each step usually depends on
the successful completion of the previous one, creating a structured and logical flow of activities.
Cross-Functional: Business processes often cut across different departments or functional areas within the enterprise.
For example, an order fulfillment process may involve coordination between sales, inventory management, and shipping
departments.
Documented and Standardized: To ensure consistency and efficiency, business processes are documented, and
standardized procedures are established. This documentation helps in training new employees and ensures that tasks are
performed consistently regardless of who is responsible for them.
Involving People, Systems, and Information: Business processes involve both human and automated tasks.
Employees perform manual activities, while systems and technology handle repetitive or rule-based tasks. Additionally,
business process data often requires information from various sources to support decision-making.
Measurable and Improvable: Business processes can be measured using key performance indicators (KPIs) to assess
their effectiveness and efficiency. This data-driven approach allows organizations to identify bottlenecks, inefficiencies,
and areas for improvement.
Automating business processes offers numerous benefits that can significantly improve an organization's efficiency,
productivity, and overall performance. Here are some compelling reasons why businesses choose to automate their
processes:
1.Increased Efficiency and Productivity: Automation streamlines repetitive and time-consuming tasks, allowing
employees to focus on higher-value activities. This leads to increased productivity and efficiency within the organization.
2.Reduced Human Errors: Automated processes follow predefined rules and algorithms, reducing the likelihood of
human errors that can occur during manual tasks. This enhances accuracy and consistency in operations.
3.Cost Savings: By automating tasks, businesses can save on labor costs and reduce the need for manual intervention,
leading to overall cost savings.
4.Faster Processing Times: Automated processes can work around the clock without breaks, leading to faster
processing times and quicker response rates to customer inquiries and demands.
5.Improved Customer Experience: Faster response times, reduced errors, and streamlined operations contribute to an
improved customer experience. Satisfied customers are more likely to remain loyal and recommend the business to
others.
6.Enhanced Data Accuracy and Reporting: Automation ensures that data is consistently captured and recorded
accurately. This leads to improved data quality and enables better reporting and decision-making.
7.Better Resource Allocation: Automating processes allows organizations to optimize resource allocation and prioritize
tasks more effectively.
8.Scalability and Flexibility: Automated processes can be easily scaled to accommodate changes in business volume
and demand. This flexibility is particularly valuable in rapidly growing or changing environments.
9.Compliance and Governance: Automation can help ensure that processes are consistently followed, adhering to
regulatory requirements and internal governance policies.
10.Innovation and Competitive Advantage: By automating routine tasks, organizations can free up resources for
innovation and creative problem-solving, providing a competitive advantage in the market.
11.Integration of Systems and Applications: Automation enables seamless integration between different systems and
applications, allowing data to flow efficiently between various parts of the organization.
12.Business Continuity and Disaster Recovery: Automation can be a critical component of business continuity and
disaster recovery plans, as automated processes can continue to function during unforeseen disruptions.
Here are some typical examples of business processes that are commonly automated:
● Employee Onboarding: Automating the onboarding process can streamline tasks such as form filling, document
verification, and setting up employee accounts and access permissions.
● Invoice Processing: Automating invoice processing involves scanning and extracting data from invoices,
validating details, and processing payments efficiently.
● Customer Support: Automated customer support systems can handle routine inquiries, provide self-service
options, and escalate complex issues to human agents when necessary.
● Expense Reimbursement: Automating expense management simplifies the submission, verification, and
reimbursement of employee expenses, reducing administrative burden.
● Recruitment and Candidate Screening: Automated applicant tracking systems (ATS) can filter, screen, and track
job applications, simplifying the recruitment process.
● IT Service Management (ITSM): Automation in ITSM can handle incident management, ticket routing, and system
updates, reducing response times and improving service levels
● Customer Relationship Management (CRM): Automating CRM processes, like lead scoring and customer
segmentation, enables targeted marketing and personalized communication.
Here are some of the key divisions and their interactions in a software company:
Product development: This division is responsible for the overall development of the software product, from ideation to
launch. It includes teams such as product management, engineering, design, and testing.
Marketing: This division is responsible for promoting the software product to potential customers. It includes teams such
as marketing communications, demand generation, and sales.
Sales: This division is responsible for closing deals with customers and generating revenue. It includes teams such as
sales development, account executives, and customer success.
Customer support: This division is responsible for providing support to customers after they have purchased the
software product. It includes teams such as technical support, customer service, and training.
Finance: This division is responsible for managing the financial aspects of the software company, such as budgeting,
accounting, and reporting.
Human resources: This division is responsible for hiring and managing the employees of the software company. It
includes teams such as recruiting, onboarding, and compensation.
TOPIC: DIGITAL TRANSFORMATION
Introduction:
● Digital transformation refers to the integration of digital technologies into all aspects of an Enterprise.
● One of the key drivers of digital transformation is the convergence of Information Technology (IT) and Operational
Technology (OT).
● IT encompasses traditional computing and network technologies, while OT refers to the hardware and software
systems used to monitor and control physical devices, processes, and assets.
I. IT (Information Technology): Involves computing resources, data storage, networking, software applications, and
cloud services.
communication.
Challenges:
● Technology Integration: Bridging the gap between IT and OT systems can be complex due to different
architectures and protocols.
● Security Risks: Converging IT and OT may expose critical infrastructure to cyber threats and attacks.
● Legacy Systems: Many industrial facilities still rely on outdated OT systems, making integration difficult.
● Cultural Differences: IT and OT teams often have distinct organizational cultures, leading to resistance to change.
Opportunities:
● Data-Driven Insights: Convergence allows businesses to collect and analyze data from both IT and OT systems,
leading to better decision-making.
● Operational Efficiency: Integrating IT and OT streamlines processes, reduces manual work, and enhances
productivity.
● Predictive Maintenance: Real-time data from OT devices combined with analytics from IT systems enables
predictive maintenance, minimizing downtime.
● Agility and Flexibility: Digital transformation through convergence enables rapid response to market changes and
customer demands.
1. Enabling Connectivity and Communication: Technology, especially the internet, has revolutionized
communication and connectivity. The digital age has given rise to global networks, enabling organizations to reach
customers across borders, collaborate with teams in distant locations, and expand their markets exponentially. This
interconnectedness has spurred the need for businesses to embrace digital transformation to remain relevant and
competitive.
2. Data Analytics and Business Intelligence: Advancements in data analytics and business intelligence tools have
been instrumental in driving digital transformation. Organizations can now harness vast amounts of data from
various sources, extract valuable insights, and make data-driven decisions. Data analytics allows businesses to
understand customer behavior, optimize processes, and identify new growth opportunities.
3. Cloud Computing and Scalability: Cloud computing has revolutionized how businesses store and manage data,
run applications, and scale their operations. The cloud's flexibility and scalability enable companies of all sizes to
access powerful computing resources without the need for significant infrastructure investments. This empowers
organizations to adapt swiftly to changing market conditions, a hallmark of successful digital transformation.
4. Internet of Things (IoT): The IoT has ushered in a new era of connectivity between physical objects and digital
systems. IoT devices and sensors gather real-time data from various sources, such as manufacturing equipment,
vehicles, and wearables. This data fuels predictive maintenance, smart automation, and enhanced customer
experiences, all essential elements of digital transformation.
5. Mobile and E-commerce Revolution: Mobile technology and e-commerce have transformed the way we shop,
bank, and interact with businesses. Mobile apps and responsive websites provide seamless user experiences,
promoting customer engagement and loyalty. E-commerce platforms have expanded markets and enabled
businesses to reach consumers beyond physical boundaries, catalyzing digital transformation in the retail sector.
6. Artificial Intelligence and Automation: The advent of Artificial Intelligence (AI) and automation technologies has
brought transformative changes to numerous industries. AI enables personalized experiences, chatbots, and virtual
assistants that enhance customer service and efficiency. Automation streamlines processes, reduces errors, and
optimizes resource allocation, essential components of digital transformation efforts.
7. Cybersecurity and Trust: As businesses digitize their operations and engage in more online interactions, the
importance of cybersecurity cannot be overstated. Technology has responded to this challenge with advanced
security solutions that protect data, transactions, and customer trust. A robust cybersecurity framework is
imperative for successful digital transformation in an era where data breaches can have severe consequences.
Introduction to Full stack development:
Full stack development is a combination of Both front-end and Back-end technologies used to build a web application or a
software system.
A full stack developer typically possesses skills in several programming languages, frameworks, and technologies related
to both front-end and back-end development.
2. Back-end development:
● Server-side programming languages: Such as Python, Ruby, PHP, Java, Node.js, etc., for handling server logic.
● Back-end frameworks: For example, Express.js, Django, Ruby on Rails, etc., to simplify back-end development
tasks.
● Database management: Knowledge of databases like MySQL, PostgreSQL, MongoDB, etc., to handle data
storage and retrieval.
● API (Application Programming Interface) design: Creating API that facilitate communication between the
front-end and back-end components of the application.
Full stack development within a firewall and on the cloud are two different approaches to building and deploying web
applications.
Full stack development within a firewall involves developing and deploying applications on an on-premises server that
is protected by a firewall. This approach gives you more control over the security of your application, but it can also be
more
Full stack development on the cloud involves developing and deploying applications on a cloud platform, such as
Amazon Web Services (AWS) or Microsoft Azure. This approach is more scalable and cost-effective than on-premises
development, but it also requires you to trust the security of the cloud provider.
The key differences between full stack development within a firewall and on the cloud:
Feature Full stack development within firewall Full stack development on cloud
Design thinking is a human-centered approach to problem-solving that can be used in full-stack development. It is a
non-linear process that involves understanding the user, brainstorming solutions, prototyping, and testing.
Improve the user experience: By understanding the user's needs and pain points, developers can create products that
are more user-friendly and enjoyable to use.
Solve complex problems: Design thinking can be used to solve complex problems that are not easily solved with
traditional methods.
Be more creative: Design thinking encourages creativity and innovation by encouraging developers to think outside the
box.
Be more agile: Design thinking is an iterative process, which means that developers can quickly iterate on their ideas and
improve them based on feedback.
● If you are a full-stack developer, you can use design thinking to improve the quality of your products and services.
By understanding the user, you can create products that are more user-friendly and enjoyable to use. You can also
use design thinking to solve complex problems and be more creative in your approach to development.
Here are some examples of how design thinking has been used in full-stack development:
Netflix: Netflix used design thinking to improve its user interface and make it easier for users to find the content they want
to watch.
Spotify: Spotify used design thinking to create a more personalized listening experience for its users.
Amazon: Amazon used design thinking to create a more efficient and user-friendly checkout process.
● A company wants to develop a new software application for customer service. They start by empathizing with their
users, by conducting interviews with customers and observing them using existing customer service software. They
learn that customers are frustrated with the long wait times and the lack of personalization in the current software.
● The company then defines the problem as "how to provide customers with a more efficient and personalized
customer service experience." They brainstorm a variety of solutions, such as a chatbot that can answer common
questions, a live chat feature, or a personalized email notification system.
● They build a prototype of their chatbot and test it out with a small group of customers. The customers provide
feedback that the chatbot is helpful, but it is not able to answer all of their questions. The company then iterates on
the chatbot and adds more features.
● After testing the chatbot with a larger group of customers, the company is confident that it is a viable solution to the
problem. They launch the chatbot and start collecting feedback from customers.
● The company continues to use design thinking to iterate on the chatbot and improve the customer service
experience.
Here are some additional tips for applying design thinking to software development:
Involve users early and often: Get feedback from users throughout the design process, not just at the end. This
will help you to ensure that you are creating a product that meets their needs.
Be creative and open-minded: Don't be afraid to experiment and try new things. The best solutions are often the
ones that are the most creative.
Iterate and improve: Don't expect to get it right the first time. Be willing to iterate on your designs and improve
them based on feedback.
Here is an example of how design thinking can be applied to automate business activities in a software
development company:
A software development company wants to automate the process of testing new software. They start by empathizing with
their users, by conducting interviews with testers and observing them testing software. They learn that testers are
frustrated with the manual testing process, which is time-consuming and error-prone.
The company then defines the problem as "how to automate the testing process so that it is faster and more accurate."
They brainstorm a variety of solutions, such as using a continuous integration and continuous delivery (CI/CD) pipeline, or
using a test automation tool.
They build a prototype of their CI/CD pipeline and test it out with a small group of testers. The testers provide feedback
that the pipeline is helpful, but it is not able to automate all of the testing tasks. The company then iterates on the pipeline
and adds more features.
After testing the pipeline with a larger group of testers, the company is confident that it is a viable solution to the problem.
They launch the pipeline and start collecting feedback from testers.
The company continues to use design thinking to iterate on the pipeline and improve the testing process.
In this example, the design thinking process helped the software development company to identify a problem, generate
creative solutions, and build a prototype that they could test and iterate on. By using design thinking, the company was
able to automate the testing process and improve the efficiency and accuracy of their testing.
In an industrial perspective, full stack development can be beneficial for businesses that need to develop and deploy
applications quickly and efficiently. This is because full stack developers have a deep understanding of both the front-end
and back-end of the development process, which can help to reduce the time and cost of development.
Project planning is a crucial stage that comes right after initiation in project management phases. Project constraints such
as time, scope, and costs are discussed in the project planning process, and mitigation plans are developed after the
identification of potential risks.
Our project has several stakeholders, and not all of them will be involved in every detail of the project.
Depending on the nature of the project, stakeholders may also include outside organizations or individual community
members that will be affected by the project.
Once we have identified our stakeholders, we need to determine the core project management skills and competencies
required for the project. When we have that list, we can define roles and assign responsibilities to individual stakeholders.
Typical roles include Project sponsor, Project manager, and Project team members. The different project team member
roles will vary depending on our project, but be sure to include a vendor relations role and a customer relations role.
The kick-off meeting is an effective way to bring stakeholders together to discuss the project. It is an effective way to
initiate the planning process. It can be used to start building trust among the team members and ensure that everyone’s
idea is taken into account. Kick-off meetings also demonstrate commitment from the sponsor for the project.
Some of the topics that will be included in a kick-off meeting are:
· Team building
· Team commitments
· Ground rules
2. Budget, and
Scope: Project scope tells us what are we going to do (and not do)?
Budget: It defines what the expected financial cost of the project is?
Timeline: The project timeline itemizes the phases of our project and the length of time we can reasonably expect them to
be completed.
Once our team understands the objectives of the project and we’ve identified the phases to meeting those objectives,
· break down the big picture objectives of our project into individual goals and
· put a system in place to ensure corrective actions when goals aren’t met on time.
A deliverable is “any unique and verifiable product, result, or capability to perform a service that is produced to complete a
process, phase, or project”. i.e., a deliverable could be, a product, result, or capability. Project deliverables are determined
by the project objectives and are an essential part of the project plan.
· Any other information critical to the team management. To create a project schedule,
· Further, divide the phases of our project into individual tasks and activities, determine dependencies,
A risk is a problem that may or may not arise over the course of our project. It’s important to identify risks in project
management and mitigate them at the project planning phase rather than be caught off guard later.
a) Project Scope
Once we’ve compiled our project plan, it should communicate it clearly to the team and all other stakeholders. We may
have created a project communication plan when we put together our project schedule. Establishing solid communications
channels and expectations for project communication is crucial. As a project manager, be sure to model the kind of
communication you expect from all stakeholders.
Creating a Product Backlog and User Stories is an essential part of Agile project management, particularly in
methodologies like Scrum.
Before you start creating the Product Backlog, ensure you have a clear understanding of the product's vision, goals, and
target audience. This will help you prioritize and structure the backlog effectively.
Gather all the potential features, functionalities, and requirements that need to be included in the product. These can
come from various sources such as stakeholders, users, market research, and your team.
Once you have a list of features and requirements, prioritize them based on factors such as business value, user impact,
technical feasibility, and market demand. You can use techniques like MoSCoW (Must have, Should have, Could have,
Won't have) or the Value vs. Effort matrix to prioritize effectively.
For each prioritized feature or requirement, break them down into smaller, manageable units called User Stories. A User
Story follows the format: "As a [user role], I want [goal] so that [benefit]." Keep the User Stories independent, negotiable,
valuable, estimable, small, and testable (INVEST criteria).
For each User Story, specify the acceptance criteria. These are the conditions that must be met for the User Story to be
considered complete. Acceptance criteria provide clarity to the development team on what is expected and help ensure
the quality of the deliverables.
Estimate the effort required for each User Story using techniques like story points, ideal days, or t-shirt sizing. This helps
in planning and prioritizing the work during sprint planning.
Arrange the User Stories in the Product Backlog based on their priority. Items at the top should be the highest priority and
items at the bottom should be lower priority.
Regularly review and refine the Product Backlog. This can be done during backlog refinement sessions, also known as
backlog grooming. During these sessions, the team can add, remove, or adjust User Stories based on new information,
feedback, or changing priorities.
Product Backlog creation is a collaborative process involving the product owner, development team, and other
stakeholders. It's important to involve everyone to ensure that the backlog items are well understood and that there is
alignment on priorities and expectations.
Agile practices emphasize continuous improvement. As the project progresses and new information becomes available,
the Product Backlog can be adjusted and refined to reflect the evolving needs of the project and the market.
Agile methodology is a software development process that emphasizes flexibility and collaboration. It is based on the idea
of breaking down the development process into smaller, more manageable chunks called iterations. Each iteration
typically lasts for a few weeks, and at the end of each iteration, a working version of the software is delivered to the
customer.
1. Define goal of product: The first step in any agile project is to define the goal of the product. This should be a
clear and concise statement that describes the purpose of the product and what it will do. The goal should be
aligned with the needs of the customer and the business.
2. Define epics: Once the goal of the product is defined, the next step is to define the epics. Epics are large pieces of
work that can be broken down into smaller user stories. User stories are descriptions of features or functionality
from the perspective of the user.
3. Create a roadmap for epics: The roadmap is a high-level plan that outlines the major epics and milestones for the
project. The roadmap should be updated as the project progresses to reflect changes in the scope or priorities.
4. Cost estimation: Cost estimation is the process of estimating the time and resources required to complete a
project. This is an important step in the agile methodology because it helps to ensure that the project stays on
track.
5. Risk management: Risk management is the process of identifying and mitigating risks to the project. This includes
risks such as changes in requirements, technical problems, and unexpected costs.
1. Planning:
In the planning stage, the initial groundwork for the project is laid out. This involves identifying the project's goals, scope,
requirements, and stakeholders. Key tasks include:
Defining Objectives: Understanding the purpose of the software and the problem it's meant to solve.
Identifying Requirements: Gathering functional and non-functional requirements from stakeholders.
Estimating Resources: Estimating the budget, time, and team needed for the project.
Creating a Project Plan: Outlining a roadmap for the development process, including milestones and deliverables.
2. Analyzing:
In the analysis phase, the gathered requirements are examined in detail to ensure a comprehensive understanding of the
project. This phase includes:
Requirement Validation: Reviewing and refining requirements to ensure they are clear, complete, and achievable.
System Architecture: Defining the high-level structure and components of the software.
Data Modeling: Designing how data will be organized and stored within the application.
3. Designing:
The design phase involves creating a blueprint for the software based on the requirements and analysis. This phase
includes:
System Design: Defining the software's overall structure, modules, and components.
User Interface Design: Creating the user interface, including layouts, navigation, and interactions.
Database Design: Designing the database schema and relationships to store and retrieve data efficiently.
Algorithm Design: Creating algorithms and logic that drive the software's functionality.
4. Creating (Implementation):
In the creation phase, the actual code for the software is written based on the design specifications. This phase includes:
Coding: Writing code in programming languages that implement the defined functionality.
Unit Testing: Writing and executing tests for individual components (units) of code.
Integration: Combining individual components into a cohesive, functioning system.
5. Testing:
The testing phase is crucial to ensure the software meets its requirements and functions as intended. This phase
includes:
Functional Testing: Testing the software against the specified requirements to ensure its functionality.
Performance Testing: Assessing the software's speed, scalability, and responsiveness.
Security Testing: Identifying and addressing potential security vulnerabilities.
User Acceptance Testing (UAT): Involving end-users to validate the software's usability and functionality.
6. Deployment:
The deployment phase involves making the software available for end-users to access and use. This phase includes
several key activities:
Preparation: Ensuring that all necessary components, resources, and documentation are ready for deployment.
Configuration: Configuring the software and its environment for production use.
Installation: Deploying the software on servers or devices where users can access it.
Data Migration: If applicable, transferring data from existing systems to the new software.
Testing in Production: Conducting final tests in the production environment to ensure everything works as expected.
Rollout: Gradually releasing the software to users, either in phases or all at once
7. Maintaining:
Software maintenance is an ongoing process that continues after the software is deployed. This phase includes:
Bug Fixes and Updates: Addressing issues and releasing updates to improve the software.
Feature Enhancements: Adding new features or functionalities based on user feedback and changing requirements.
Performance Optimization: Continuously optimizing the software's performance and efficiency.
Security Updates: Applying patches and updates to address security vulnerabilities.
Design principles in software development for availability, performance, consistency, scalability, manageability,
and cost:
Availability refers to the ability of a software system to be up and running when users need it. This is important for any
software system, but it is especially critical for systems that are used in mission-critical applications. There are a number
of design principles that can be used to improve the availability of a software system, such as:
● Designing for fault tolerance: This means that the system should be able to continue to operate even if some of
its components fail.
● Designing for redundancy: This means that the system should have multiple copies of its critical components, so
that if one copy fails, the others can take over.
● Designing for graceful degradation: This means that the system should continue to operate even if it is not fully
functional.
Performance refers to how quickly a software system can respond to requests. This is important for any software system,
but it is especially critical for systems that are used to process large amounts of data or that need to respond to real-time
events. There are a number of design principles that can be used to improve the performance of a software system, such
as:
● Using efficient algorithms: This means using algorithms that are designed to minimize the amount of time and
resources required to complete a task.
● Optimizing the code: This means removing unnecessary code and making sure that the code is well-written and
efficient.
● Using caching: This means storing frequently accessed data in memory, so that it does not have to be loaded
from disk every time it is needed.
Consistency refers to the ability of a software system to produce the same results for the same input. This is important
for any software system, but it is especially critical for systems that are used to store and process sensitive data. There
are a number of design principles that can be used to improve the consistency of a software system, such as:
● Using rigorous testing: This means testing the system thoroughly to ensure that it produces the correct results.
● Using version control: This means keeping track of changes to the system, so that it is possible to roll back to a
previous version if necessary.
● Using data validation: This means checking the input data to ensure that it is valid before it is processed.
Scalability refers to the ability of a software system to handle increasing loads. This is important for any software system
that is expected to grow in popularity or usage. There are a number of design principles that can be used to improve the
scalability of a software system, such as:
● Using a distributed architecture: This means dividing the system into multiple components that can be scaled
independently.
● Using caching: This means storing frequently accessed data in memory, so that it does not have to be loaded from
disk every time it is needed.
● Using load balancing: This means distributing the load across multiple servers, so that no single server is
overloaded.
Manageability refers to the ability to easily maintain and update a software system. This is important for any software
system that is expected to be in use for a long period of time. There are a number of design principles that can be used to
improve the manageability of a software system, such as:
● Using a well-defined architecture: This means making sure that the system is easy to understand and modify.
● Using modular code: This means breaking the system down into smaller, self-contained modules.
● Using documentation: This means providing clear documentation that describes how the system works.
Cost refers to the amount of money that is required to develop and maintain a software system. This is important for any
software system, but it is especially critical for systems that are developed on a tight budget. There are a number of
design principles that can be used to reduce the cost of a software system, such as:
● Using open-source software: This means using software that is freely available, so that there is no need to pay for
licenses.
● Using cloud computing: This means running the system on cloud servers, so that there is no need to purchase and
maintain hardware.
● Using agile development: This means using a development process that is iterative and incremental, so that the
system can be developed and released quickly.
Architectural Patterns
1. Monolithic architecture is a software architecture style in which all of the components of a software system are
tightly coupled and packaged together into a single unit. This type of architecture is simple to design and develop,
but it can be difficult to maintain and update as the system grows in size and complexity.
2. Layered architecture is a software architecture style in which the components of a software system are organized
into layers. Each layer is responsible for a specific set of functionalities, and the layers are loosely coupled,
meaning that they can be easily modified or replaced without affecting the other layers. This type of architecture is
more complex to design and develop than monolithic architecture, but it is easier to maintain and update as the
system grows in size and complexity.
3. Service-oriented architecture (SOA) is a software architecture style in which the components of a software
system are implemented as services. Services are self-contained, loosely coupled units of functionality that can be
easily reused and orchestrated. SOA is a good choice for systems that need to be scalable, flexible, and
interoperable.
4. Microservice architecture is a software architecture style in which the components of a software system are
implemented as small, independent microservices. Microservices are loosely coupled, meaning that they can be
easily developed, deployed, and scaled independently. This type of architecture is a good choice for systems that
need to be highly scalable, flexible, and resilient.
Monolithic architecture Simple to design and develop Difficult to maintain and update
Layered architecture More complex to design and develop More complex to maintain and update
than monolithic architecture, but
easier maintain and update
Service-oriented Scalable, flexible, and interoperable More complex to design and develop
architecture (SOA)
Microservice Highly scalable, flexible and resilient More complex to design and develop monolithic,
architecture layered or SOA
1. Application security:
· Threat modeling: This is the process of identifying and analyzing potential security threats to an
application. This helps to identify the most critical security risks and to prioritize security controls.
· Secure coding: This is the practice of writing code that is secure by design. This includes following
secure coding practices, such as using strong passwords, input validation, and output encoding.
· Static analysis: This is the process of analyzing code for security vulnerabilities without actually
executing it. This can be used to find vulnerabilities that are difficult to find with dynamic analysis.
· Dynamic analysis: This is the process of executing code and analyzing it for security vulnerabilities.
This can be used to find vulnerabilities that are only triggered when code is executed.
2. Authentication and authorization methods:
Token-based authentication: This is a method of authentication where a token is used to represent the user's
identity. Tokens can be issued by the server or by a third-party provider.
Cookie-based authentication: This is a method of authentication where a cookie is used to store the user's
identity. Cookies are stored on the user's browser and are sent with each request to the server.
OpenID: This is an open standard for authentication that allows users to sign in to different websites using a single
identity.
Third-party access: This is a method of allowing users to access an application using their credentials from a
third-party provider, such as Google or Facebook.
SAML(Security Assertion Markup Language): This is a standard for exchanging authentication and authorization
information between different systems.
Multi-factor authentication: This is a method of authentication that requires more than one factor to be
authenticated, such as a username, password, and a security code.
3. Encryption:
Data encryption: This is the process of converting data into a form that is unreadable without a key. This can be
used to protect sensitive data, such as passwords and credit card numbers.
Transport layer security (TLS): This is a protocol that encrypts data in transit between a client and a server. TLS
is used by most websites to secure their connections.
Disk encryption: This is the process of encrypting data on a disk drive. This can be used to protect data from
unauthorized access, even if the disk drive is stolen.
1. Structured data is data that is organized in a fixed format, such as a table. This type of data is well-suited for
relational databases, which store data in tables with rows and columns. Relational databases are efficient for
storing and querying structured data, and they offer a wide range of features for data modeling, security, and
performance.
2. Semi-structured data is data that has a loose or flexible schema. This type of
data is often used to store documents, such as HTML pages, XML files, and
datastores, including:
Document databases: Document databases are a good option for storing semi-structured data. Document databases
store data in documents, which are self-describing data structures that can be easily queried.
Key-value stores: Key-value stores can also be used to store semi-structured data. Key-value stores store data in
key-value pairs, which are simple and efficient data structures.
Graph databases: Graph databases can be used to store semi-structured data that has relationships between different
entities. Graph databases are a good option for applications that need to perform complex queries on relationships
between data.
2. Unstructured data is data that does not have a fixed format. This type of
data is often used to store images, audio, video, and other types of media.
Unstructured data can be stored in a variety of datastores, including:
File systems: File systems are a simple and efficient way to store unstructured data. File systems can be used to store
files of any size and format.
Object storage: Object storage is a good option for storing large amounts of unstructured data. Object storage stores
data in objects, which are self-describing data structures that can be easily queried.
NoSQL databases: NoSQL databases can also be used to store unstructured data. NoSQL databases offer a variety of
data models, which can be used to store different types of unstructured data.
UI/UX design is the process of designing user interfaces and user experiences for websites, software applications, and
other digital products. The goal of UI/UX design is to create products that are easy to use, efficient, and enjoyable for
users.
User interface (UI) refers to the visual elements of a product or service, such as the buttons, icons, and menus that
users interact with.
User experience (UX) refers to the overall experience of using a product or service, including how easy it is to use, how
efficient it is, and how enjoyable it is to use.
One of the most popular frameworks used for UI/UX design is React. React is a free and open source front-end javascript
library used to build user interfaces.
1. Consistency:
Elements and interactions across different screens and sections of a digital product are cohesive and
predictable. This provides users with a sense of familiarity, making it easier for them to navigate and
understand the interface.
2. Accessibility:
Ensures that anyone can use your product, including those with disabilities. For example, accessibility
options on mobile devices include increasing font size, increasing contrast, and providing audio
descriptions.
3. Hierarchy:
Controls the order in which information is consumed and processed. A design with clear hierarchy helps
users easily scan for the information they need
4. Clarity:
An interface should be recognizable, predictable, and have an obvious purpose.
Sketch, Axure, Adobe XD, Figma, Origami Studio, Maze, Craft, Wireframe.cc.
UX design tools focus on the user and how they'll experience the content. UI design tools help designers design accurate
wireframes, mockups, and prototypes.
MERN stack JavaScript, MongoDB, CI/CD, DevOps, Public cloud, Private APM, Log monitoring,
Express.js, React.js, Microservices cloud, Hybrid cloud Security monitoring
architecture,
Node.js Containerization
LAMP stack Linux, Apache, MySQL, CI/CD, DevOps Public cloud, Private APM, Log monitoring,
PHP cloud, Hybrid cloud Security monitoring
Ruby on Rails Ruby, Rails CI/CD, DevOps Public cloud, Private APM, Log monitoring,
(RoR) cloud, Hybrid cloud Security monitoring
Django Python, Django CI/CD, DevOps Public cloud, Private APM, Log monitoring,
cloud, Hybrid cloud Security monitoring
Java full stack Java, Spring Boot, CI/CD, DevOps Public cloud, Private APM, Log monitoring,
React.js, MySQL cloud, Hybrid cloud Security monitoring
.NET Core C#, ASP.NET Core, CI/CD, DevOps Public cloud, Private APM, Log monitoring,
Angular cloud, Hybrid cloud Security monitoring
React Native JavaScript, React.js CI/CD, DevOps Public cloud, Private APM, Log monitoring,
cloud, Hybrid cloud Security monitoring
Flutter Dart, Flutter CI/CD, DevOps Public cloud, Private APM, Log monitoring,
cloud, Hybrid cloud Security monitoring
Serverless AWS Lambda, Azure CI/CD, DevOps Public cloud APM, Log monitoring,
Functions, Google Cloud Security monitoring
Functions
Security architecture is a framework for designing and implementing security controls to protect an organization's IT
infrastructure. It involves identifying potential risks and vulnerabilities and developing a strategy to mitigate those risks.
Configuration Management
A version control system (VCS) is a software tool that helps you track changes to your code over time
Fundamentals of Git
Git is a distributed version control system (DVCS) that helps you track changes to your code over time. It is a popular
choice for software development because it is very versatile and efficient.
1. Repository: A repository is a collection of files that are tracked by Git. It can be stored locally on your computer or
on a remote server.
2. Commit: A commit is a snapshot of the state of your repository at a particular point in time. It consists of a set of
changes to the files in your repository, along with a commit message that describes the changes
3. Branch: A branch is a lightweight pointer to a commit. It allows you to work on different versions of your code without
affecting the main branch.
4. Merge: A merge is the process of combining changes from one branch into another branch.
5. Pull request: A pull request is a request to merge changes from one branch into another branch.
6. Remote: A remote is a repository that is stored on a remote server. You can use remotes to collaborate with others on
the same project.
1. Creating a Repository:
To create a new Git repository, you can use the git init command. This will create a git directory in the current
directory. The git directory contains all of the metadata for your repository, such as the commit history, the branch
names, and the file status.
2. Cloning a repository:
To clone an existing Git repository, you can use the git clone command. This will create a copy of the repository
in the current directory. The cloned repository will have all of the same files and history as the original repository.
3. Making and recording changes
To make changes to a file in a Git repository, you can edit the file as you normally would. Once you have made
your changes, you need to add the file to the staging area. You can do this with the git add command. The git
add command will add the file to the staging area, but it will not commit the changes to the repository.
To commit the changes to the repository, you can use the git commit command. The git commit command
will create a new commit that includes all of the files that have been added to the staging area.
Creating and switching to new branches: To create a new branch, you can use the git branch command.
The git branch command takes the name of the new branch as an argument. For example, to create a new branch
called feature, you would use the following command:
Switching to a new branch: To switch to a different branch, you can use the git checkout command.
The git checkout command takes the name of the branch as an argument. For example, to switch to the feature
branch, you would use the following command:
Switching between branches:To switch between branches, you can use the git checkout command. The git
checkout command takes the name of the branch as an argument. For example, to switch back to the master branch,
you would use the following command:
To merge two local branches together, you can use the git merge command. The git merge command takes the
name of the branch that you want to merge into the current branch as an argument. For example, to merge the feature
branch into the master branch, you would use the following command:
If there are no conflicts between the two branches, the merge will be performed automatically. However, if there are
conflicts, you will need to resolve them before the merge can be completed.
What is GitHub?
GitHub is a web-based platform for version control and collaborative software development. It allows developers to store,
manage, and share their code with others, making it easier to work on projects as a team and track changes over time.
Continuous Integration:
(refer https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions)
Cloud Basics
Appoint a team for hardware and software maintenance No experts required for hardware and software
maintenance
Data can not be accessed remotely Data can be accessed and shared
Public Cloud : The cloud infrastructure is made available to the general public over the internet and is owned by a cloud
provider.
Example : AWS,Microsoft’s Azure,GCP, IBM’s blue cloud and sun cloud
Private Cloud : The cloud infrastructure is exclusively operated by a single organization.It can be managed by the
organization or a third party and may exist on-premise or off-premise.
Example : AWS, Vmware
Hybrid cloud: It consists the functionalities of both public and private cloud,
For example : Federal agencies opt for private cloud when sensitive information is involved, Also they use public cloud to
share datasets with the general public or other management agencies.
Iaas: If your business needs a virtual machine and you have all the expertise to install software on top of it and make it
work opt for Infrastructure as a Service.
It is a cloud service That provides basic computing infrastructure.
Services available on pay-for-what-you-use-model
Iaas providers are : AWS, Microsoft’s Azure, Google Computing engine.
Paas : If you only want a platform or an interface to program or interface to upload a program and make it run then pick
platform as a service.
It provides a platform and runtime environments for developing, testing and managing applications.
It allows software developers to deploy applications without all the related infrastructure.
Users : Software developers
Saas: If your business does not want to maintain maintain any IT equipment, then choose Software as a service
It provides host and manages the software applications on a pay-as-you-go model.
All software and hardwares are provided and managed by vendors so you don't have to maintain anything.
Users : End customers.
Life Cycle of a Cloud Computing Solution
1) Define Purpose : Understand the requirement of business and determine what type of application to run on cloud.
2) Define the hardware: Choose a compute service that will provide the right support where you resize the compute
capacity in the cloud to run the application programs.
For ex :EC2 (Elastic computing) if you look for Iaas
ECS if you look for Containerized service
3) Define Storage: Choose a storage device where you can backup your and archive your data over the internet.
For example 1. Amazon S3 (Amazon Simple Storage Service) is an object storage system that can store large
numbers of user files and backups
2.Glacier is for Archival. Glacier, also known as Amazon Simple Storage Service (S3) Glacier, is a low-cost cloud
storage service for data with longer retrieval times. Glacier provides storage for data archiving and backup of cold
data
3.EFS (Amazon Elastic File System) provides scalable network file storage for Amazon EC2 cloud computing
service users
4) Define Network:
Define a network that securely delivers data,videos,applications etc with low latency and high transfer speed.
For example
1. VPC is for Network
2. Route 53 is for DNS
3. Direct connect is for private p2p line from office to aws data
5) Define Security : Setup a security service which enables services for user authentication or limiting access to a
certain set of users on your aws resources.
For example1. IAM ( Identity and Access Management ) if for Authentication and authorization
2. KMS (Key Management Service) is for data ENcryption at rest
6) Define Management process and tools:
You can have complete control on your cloud environment by defining management tools which monitor AWS
resources and consumer applications running on the AWS platform.
For example CloudWatch : if for monitoring
AutoScaling is for being elastic
Cloud formation is for deployment
7) Testing the process : Verify the process using AWS developer tools where you can build, test and deploy your code
quickly.
For example 1. CodeStar is a cloud-based service that provides a unified user interface for managing software
development projects.
2. CodePipeline is a fully-managed continuous integration service that helps you build, package, and deploy your
application.
3.CodeBuild is a service that helps you build, test, and deploy your code.
8) Analytics : Analyze and visualize data by using analytics services where you can start querying data instantly and
get results.
For example : Antena id for visualization
EMR (Elastic Mapreduce) and Cloud search for Analytics.