Week 1 - Introduction, Business Case

Introduction

This week is an introduction to the course. We will review the first step in any software engineering project - the business case.

Videos

Software Engineering: The Difference Between A Software Engineer And A Software Developer
Software Engineering: Crash Course Computer Science
The Business Case: How to Write a Business Plan - Entrepreneurship 101
Tips To Build A Business As A Software Engineer

Workshop(s)

Lab 1: The Digital Audio Workstation

Assignment(s)

Assignment 1: Analog Circuit Simulator

Lecture Material

Developing Business Acumen

While being a software architect requires in-depth technical knowledge, to be successful in the role also requires a thorough understanding of your organization's business. In order to design an appropriate architecture, you need to have knowledge of the business problems you are trying to solve and the business opportunities your organization is seeking to exploit.

When designing a software architecture, in order to ensure that the solution is an appropriate one, you must consider the goals of the business, the users, and the software system:
Business, Users, Software

Familiarity with Business Topics

Software architects need to interact with a variety of stakeholders, and understanding the language of business will ensure that you have a common understanding with them.

Business decisions will be made based on things like return on investment (ROI) calculations for the software project and cost-effectiveness analysis of different approaches. Return on investment, or ROI, is a mathematical formula that investors can use to evaluate their investments and judge how well a particular investment has performed compared to others. There are multiple methods for calculating ROI. The most common is net income divided by the total cost of the investment, or
ROI = 100% x Net income / Cost of investment

Another possible method to calculate ROI is investment gain divided by investment base, or
ROI = 100% x Investment gain / Investment base

For more information, see ROI (return on investment).

QUESTION: When calculating return on investment, should time be taken into consideration?
Of course. Our equation will become:
ROI = 100% x Investment gain projected to the present/Investment base

Recall from SED200 that the present value of money equals the future value of money taking inflation into consideration:
P=F ÷ (1+i)n

Understanding your Organization's Business

Once you have some general business knowledge, you will want to gain a good understanding of your organization's business. A good starting point is to gain an understanding of your organization's products and services, and the value they provide to their customers. You should learn about the market that your organization operates in and its trends. It is prudent to become familiar with your organization's competitors. You should seek out answers to questions such as:

Domain-Driven Design

Understanding the domain of your software application is part of what is necessary to discover the appropriate architecture for any solutions you need to develop. The domain is the subject and body of knowledge on which the software will be applied. DDD is an approach to developing software that aims to make the software better by focusing on the domain. DDD is particularly useful for large software applications that have complex and sizable models. DDD helps you to solve complex problems.

Ubiquitous Language

One of the benefits of DDD is the fact that it encourages and improves communication. Communication among all team members is encouraged. In particular, DDD stresses the importance of interacting with domain experts. A domain expert, or subject matter expert (SME), is someone who possesses expertise about, and is an authority in, a particular area. Understanding the domain of your software application is highly beneficial and domain experts will help the entire team gain this understanding.

The development team may not have a strong understanding of the domain, and may not be familiar with terms and concepts used by stakeholders, including the domain experts. They may use their own language when discussing the functionality and discuss the domain in terms of their technical design. The stakeholders, including the domain experts, will use their own jargon when discussing their domain, and may not have a good understanding of technical terms. Because different people may use different language to describe the same concepts in a particular domain, it can take longer to communicate ideas, and it can lead to misunderstandings. In order to mitigate these types of risks, ubiquitous language is a common language among all team members and stakeholders based on the domain model:
Ubiquitous Language

Although it takes effort, once you have a ubiquitous language, it simplifies communication and leads to a greater understanding among everyone involved with the project. The ubiquitous language should be used during discussions and in all of the project artifacts such as documentation, diagrams, code, and tests.
QUESTION: You have received a generous birthday gift from a wealthy relative and you are going to the bank to invest it. Your financial advisor starts using terms such as deposit advance loan, accelerated depreciation, accretion, weighted-average coupon... How does this make you feel? Confused.

Bounded Contexts

Bounded contexts are a pattern in DDD that represent partitions in the domain model. Bounded contexts are partitions in the domain model. Creating partitions and boundaries reduces the overall complexity.

For example, if we were creating a software system for a business that sells clothing online, we might allow customers to sign up for a newsletter that contains deals and discounts. Another part of the application would allow customers to place orders and provide payment information. With these two pieces of functionality, some concepts are shared, while some are not. If different development teams, or different developers on a single team, are working on these two sets of functionality, it is not clear what overlap, if any, exists. In this example, we could create one bounded context for marketing (Marketing Context), and one for order processing (Order Processing Context). Each bounded context may have entities that are unique to itself. For example, the Order Processing Context has the concept of an order line item, whereas the Contact Management Context does not. However, both bounded contexts have the concept of a Customer.
Bounded Context

In the context of marketing, all that may be required for a Customer entity is an identity (unique identifier), first name, last name, and email address. However, in the context of placing an order, the Customer entity would require additional information, such as a shipping address and payment information.

The context for each model should be clearly defined and there should be an explicit boundary between bounded contexts. They are created so that everyone on the team, or across multiple teams, can have the same understanding of what belongs in each context. While the example used is a simplistic one, a large domain model will have many entities and contexts, and it usually isn't immediately clear what is unique or common across different contexts, and how each context should interact with each other.



Common Traits of Successful Software Companies

The following list is taken from

  • 12 Common Traits of the Tech Industry's Most Successful Companies
  • 7 things that successful tech companies have in common
  • 1. They Start Small

    Successful companies start by doing one thing better than everyone else. No one can expect you to do everything, so why should you? Starting with a singular and specific focus not only helps you develop your business, but it also makes you stand out.

    2. They Take Care of Their Employees

    The most successful tech companies take care of their employees. They have organizational systems implemented that help employees stay accountable and also empower them to take ownership of their work. One trend you'll find across many successful businesses is employee stock ownership plans or ESOPs. An ESOP helps companies in several ways, from funding to employee benefits. With an ESOP, employees own shares in their company. This plan encourages hard work and innovation because when the business does well, the employees will do well too.

    3. They Gather Customer Feedback

    Successful tech companies all tend to spend a lot of time gathering feedback from their customers. This process is pivotal to their success because it helps them learn more about the goals and pain points of their audience. The best tech companies focus on the user above all else. Instead of finding customers who want a product or service, they make a product or service that customers want. Better yet, they produce something you didn't know you wanted.

    4. They Provide Stellar Customer Service

    Although tech companies are constantly working to improve their software, it's important that there are real people for customers to give their feedback to. Customers will remember the service they received, so customer service reputation can make or break your company.

    5. They Have a Customer-Centric Approach

    Most successful companies adopt a customer-centric approach. For them, business is all about keeping their customers happy, so they do their best to make that happen. This approach can be in terms of offering quality products and services, providing top-notch customer support, or anything else that makes their customers happy.

    6. They Make a Platform, Not Just a Product

    The internet has changed the way many businesses operate. In the online age, the most successful companies are those that make a platform, not just a product. When you think about tech giants like Amazon, Facebook and Google, you think of their platform, not the goods available on that platform. What is a platform exactly? It's a business model that connects users — both producers and consumers — in a single space where they can communicate. By creating a connected community, you allow your users to increase the value of your company.

    7. Their Values Resonate With Users

    An important feature of great tech companies is that they resonate with their users' core values. Think of Apple and its focus on innovation and being different. The company has a passionate customer base that responds to those values and consequently advocates for it and is ready to pick up every new product that launches.

    8. Authenticity/ Branding

    Tech giants all have distinct personalities that seep into every aspect of their business. Every company has a different character, but they are all consistent in that character. Branding is crucial, and perhaps the most critical part of branding is authenticity. The greatest companies are true to themselves. You can pick them out in a crowd because they're not trying to be like everyone else. They're focused on being themselves. Google is fun and colorful, while Apple is clean-cut and futuristic. These companies have a deep understanding of their essence, and they show it in every part of their brand. A consistent image promotes authenticity, which makes you stand out and attract customers.

    9. They Lead, Not Follow

    Successful tech companies take the lead in their industry and don't wait for trends to blow up before diving into them. They do their research so that they stay ahead of their competitors and can take advantage of newfound interests from customers as they arise. You may think that tech companies gain success by jumping onto trends quickly, but that's not entirely true. Early trend adoption can be helpful, but the most successful brands are those that start trends instead of following them. They look at their competition not to see how they can mimic them, but for how they can do something better.

    10. They Keep Up With the Latest Tech

    Although this may sound obvious, it may be more difficult in practice. One can stay on the cutting edge by reading the latest research reports, such as Thoughtworks Technology Radar. Each team member can be assigned an area of technology to study and share at weekly meetings.

    11. They Are Adaptable

    Tech companies are usually flexible and know how to adapt because that's what technology is all about. It changes with time, and all these companies have to do is listen and adapt to the change, making sure that their service or products are all beneficial to their customers no matter the circumstance. You've probably noticed that Facebook today doesn't look anything like Facebook did 10 years ago. Advancements happen on an exponential scale. Things change and improve at a faster rate now than they have for all of human history. Companies that don't adapt to change will fall behind.

    12. They Have Good Internal Communication

    Good internal communication is a difficult thing to accomplish that successful tech companies manage to do well. There is always a healthy conflict between the marketing team (who is talking to users) and the product team (who is building the technology). Having a liaison who can go between these departments is critical. Marketing rarely understands developer timelines, and developers rarely understand marketing priorities.

    13. They Provide Simple Solutions

    Successful tech companies help customers achieve their goals in the simplest way possible. If you run a tech company, assume that your audience has minimal skills when it comes to working with a certain tool or technology. Find ways to reduce the steps people take or create ways to automate their work. People will prefer products that make their lives easier.