What and How Will You Learn?

Learn about the contents of this course and how you can get the most out of it!

What will you learn?

Continuing with the spirit of covering some gaps personally observed in the industry, we will:

  • Learn how to write code that does not become our problem shortly after authoring it.

    How can the code that was written by ourselves bite us back? There must be something wrong with what we do. Don’t you agree?

  • Learn how to write code that expresses valuable domain knowledge and ramps up technical learners of the problem space.

We are humans in the first place, so we should write code for humans. Computers will understand code no matter how we write it. So writing a program for them is a piece of cake. Try to write code that humans can understand; now that’s a challenge!

Learn to talk with code
  • Learn how to write software that serves both developers and non-developers equally. It is time to start helping businesses instead of complicating their lives.
Learn to help businesses as a developer

Engineers “interpret” expectation by using technical concepts, patterns, and frameworks, and use their terminology and tools for implementation. Because of this disconnect, the resulting solution is too technical and often has little or no relevance to how the business works. Instead, it adds inconvenience and complexity for business SMEssmall or medium-sized enterprise.

  • Know how to avoid defects, and allow ourselves to focus on a new feature development instead.

It is a terrible feeling when you cannot focus on something and can’t finish it without interruptions. It is like being tired in an airplane while trying to sleep, but a narrow seat and limited leg room do not let you relax completely. In those moments, you dream about a simple, comfortable bed. Although many consider bug-free software impossible, we will learn how to reach this objective in real life.

  • Learn how to build software that works in a production environment without a dedicated production support team by distilling ways to develop better programs and maintain them in production with minimal to no cost.

    A system that is not written by you, the intricacies of which are foreign to you as a consequence, can be a nightmare to run and troubleshoot. Regardless of having a handbook full of troubleshooting steps for various types of symptoms that the application could produce, sometimes you still need to bug an actual development team with questions when a new kind of issue is discovered. This can be a troublesome process. The root cause of this would be the developers unaware of production support’s pain points and lacking the necessary skills for producing better software that would be easier to maintain. Would the outcome be different if developers had to run and support their solutions in a production environment instead of somebody else doing it for them?

  • Learn about development and architecture techniques for building better software systems that are easier to develop and change.

    Developing a new feature can sometimes be rocket science; the codebase is so complex that an implementation process is merely a trial and error activity. When software development becomes a discovery process for implementing every task, this hints at many problems in how an application is structured.

  • Study techniques to accelerate software development processes instead of slowing them down.

  • Learn how to build software that scales out horizontally by adding more instances of the application when the number of users increases.

Sometimes adding more servers to cater to increasing demand for an application worsens the situation instead of improving it. This calls for the team to re-architect the application for better scalability, which can then expose other bottlenecks, complicating the goal of reaching more users. When such circumstances happen, you need to admit that your application is not scalable.

Scale-out

The route to adopt throughout the course

First and foremost, you need to look at this course as a guide to implementing Effective Software. With each chapter, the course aims to fulfill specific expectations that comprise it. Some sections will target just one issue, while others will target several of them.

You will notice two types of chapters primarily:

  1. A section that lays out a problem definition and a solution to it, focusing on one or more of the ideal pillars of Effective Software.
  2. A textbook-style chapter that covers a complex or commonly misunderstood subject, which I consider to be a prerequisite for building Effective Software.

A higher-level structure of the course will follow a flow of the software development process in some way. We will cover cross-cutting concerns as well as all typical stages of the software development life cycle.

The topic of cross-cutting concerns will precede the rest of the subjects. This order is essential because most cross-cutting solutions do not fit into any of the typical stages but still require attention beforehand to agree on fundamental assumptions. Afterward, diving into each step of software development will uncover and address various concerns within those areas.

Let’s do this!