# πΊ Topic Overview
# πΊ Intro
To get started by way of an extended channel introduction - lets dive into some of the topics that we will be trying to cover. Topics have been grouped by specialism - in this video / article I'll go through each of the specialisms planned out on the Topics page and give some more context to the topics available. If you're interested in a specific specialism; feel free to skip ahead to that section. If there are specific topics you'd like to hear more about for future please let me know via feedback in the comments.
If you've not already watched or read the channel introduction, that's a great place to learn about goals of the channel, and find out how subscribe.
So with that out the way, lets dive in to the first specialism in alphabetic order; Agile Delivery Practices.
# π Agile Delivery Practices
Agile Delivery Practices as a specialism covers ways of working - in other words - processess and practices that would be considered agile, as well as how the delivery function supports product people, business analysts, programmers, testers, and other roles in a large organisation.
The key topics in this field include:
- General frameworks such as Scrum, Kanban, and Lean
- Techniques such as Prioritisation, Estimation, and Retrospectives
- (and) Advanced techniques such as Cumulative Flow Diagrams, Cost of Delay, and Communication
These are all topics that I think can benefit engineers by enabling individuals to make confident decisions about how they organise work, identify value, and make decisions on delivering the most valuable work first.
# π Architecture
Architecture as a specialism covers some basics around Communication and the different ways we can model reality. We can then use these models as use as a tool to describe and design small and large software systems.
The key topics in this field include:
- basics skills such as Architecture for Programmers, Drawing Diagrams, and Whiteboarding
- standards such as RFCs, Architectural Decision Records, and Design Documents
- (and) specific patterns such as Event based systems, Data lakes, and Authentication and Authorization.
These are all topics that I think engineers can use to appreciate the breadth and scale of the software systems they are building when they're programming at the lowest level.
# βοΈ Cloud Based Infrastructure
Cloud Based Infrastructure as a specialism covers the major providers such as Amazon Web Services (AWS), Google Cloud (GCloud), and Microsoft Azure (Azure) - but what I really want to talk about is Infrastructure as Code, Going Serverless, and all the benefits of programmable network architectures.
The key topics in this field include Instance Compute, Lambdas, setting up DNS Records, Remote Source Control, Load Balancers, Cloud Storage, and Cloud Databases.
# π₯οΈ Computer Science
Computer Science as a specialism looks at fundementals of a computer system, from the hardware level up to abstract symbol manipulation. I want to explore the fundemental processes of what makes a computer tick, so that when we're writing code, or designing large scale systems, we have an explicit understanding of the low-level mechanisms powering the systems we work with.
The key topics in this field include:
- Algorithms, Data Structures, and CPU Threads
- program structure, such as Byte Code, Memory, and Simple Data vs Pointers,
- (and) storage formats such as JSON, XML, and Databases
There are many more topics I could explore over time. Computer Science, even without a focus on Software Engineering is a huge field that touches everything. Almost every topic I will talk about sits upon these core concepts.
# π Monitoring and Alerts
Monitors and Alerts are put in place around a software system to ensure it operates correctly.
The key topics in this field include:
- Questions such as: Why monitor?, Why setup alerts?
- Creating good alerts, the process of Triaging issues, and setting up Monitoring Tools
- Creating graphs and charts, Inspecting Data over Time, and Good Dashboards
- and conversations around Using your log data wiseley, to Measure what matters
There's a full time role for Data Scientists to take a long view on the data produced by a service, but as a Software Engineer its imperative that you have this data at your finger tips to debug and diagnose issues within the software systems you're charged with maintaining.
# π‘ Organisational Structures
Organizations structure themselves in different ways to get the most out of their employees; here we'll talk about different org structures and reflect on how to use that knowledge in your day to day life.
The key topics in this field include:
- The Org Chart, Line of Reporting, and Matrix Organisations,
- The Role of Management in Developing Talent,
- (and) Teams vs Specialists
Even if you're not working in a team, organising your self and your workflow so that work can be progressed by multiple roles, may be a strategy to help you setup for success in the long run.
# β¨οΈ Programming
Programming is a vast field of approaches which explores how we interact with computers through code; everything from abstract symbol manipulation, data structures, APIs, algorithms, linting, and code quality.
Disparate from the specialism of Programming Languages, Programming as an approach, looks at key topics such as:
- Program structure, Code architecture
- Object Orientated Programming (OOP), Functional Programming,
- Non-functional side effects, and Coupling and Cohesion
There will be some overlap here between Computer Science as a specialism, but Programming should be more practical - and less theoretical - than the concepts presented elsewhere.
# π£ Programming Languages
Programming Languages are all different ways of providing instructions to computers. In this specialism I want to look at named programming languages; for example how to get started, what the prerequisites are, what integrated development environments (IDEs) are available, and matching test frameworks to use.
I'll try to cover languages I am most familiar with, but am happy to explore new programming languages to compare and contrast.
Topics to explore include:
- .NET, Bash, C++,
- Java, JavaScript, Java !== JavaScript,
- Python, and Regular Expressions.
# ποΈ Software Delivery Lifecycle
The Software Delivery Lifecycle is the process of releasing value - from code to working software.
The full process involves integrating real world user feedback, and improving the value proposition of a code base while managing technical debt.
While I'm not a fan of the monica, this field gives me an opportunity to cover a modern approach to software maintenance.
Key topics include:
- There is an Infinite Amount of Value to be Created,
- Continuous Integration, Build Pipelines, Source Control,
- Your code as a crime scene, Pull requests, Code Reviews,
- Code as a product, Long term maintenance, Load testing,
- and Non-functional requirements.
# π± Software Testing
In the Software Testing specialism I want to explore the large and complex field of validating software.
In principle - the more time you spend testing, the more issues you can find - and while automation is important - so is test strategy, and resource allocation.
Topics to explore include:
- Why test?, When to manually test?, and When to Automate Testing?;
- Unit Testing, Integration testing, Schema tests,
- Contract testing, API testing, Smoke Tests
- Test Driven Development, Behaviour Driven Development, and 5 minute commits.
# π§ͺ Service Design
Service Design as a specialism is an opportunity to talk about next level software development - services are what really matter; products are built and sold, but services are timely and ongoing.
We need to ask the question: How does service based design influence how we approach software engineering?
Key topics include:
- Product vs Services, Good Services, Supporting services with software,
- Separating software tools from the services they provide,
- Service Catalogues, and Measuring the success of a service.
# π§ Team Building
In the Team Building specialism I want to explore how individuals negotiate with others to form a common goal. What brings people together? What inspires them to action? What gets people out of bed in the morning? What distractions do people face? Team building is an important aspect of supporting and maintaining large software systems.
Key topics include:
- Vision and Goals, Quaterly Objectives and key results (OKRs),
- Strategy vs Tactics, Camaraderie / Comradery,
- Team Branding, Psychological Safety,
- Fun things, Team Health, and Roles and responsibilities (RACIF).
# πΉ What next?
Thanks for watching / reading this far!
- Like and Subscribe on Youtube: Software Engineering at Home (opens new window)
- Follow on Twitter: @SoftwareAtHome (opens new window)
- Support at Patreon: SoftwareEngineeringAtHome (opens new window)
- Email questions to: software@mkv25.net
If you've not already, check out the channel introduction for a brief hello from me. You've finished the topic overview for 2021, so you're probably ready to dig into a specialism that interests you. I'll be trying to make content for each specialism in order - so follow the Software Engineering at Home channel on YouTube, follow @SoftwareAtHome on Twitter, and you can also support the channel by subscribing on our Patreon for early access to content - where you can ask questions to get answers.
Finally, please let me know in the comments which topics you're most interested in - and that will help me prioritise content.
I hope you keep an open mind, and be kind to each other.
# πΊοΈ Where next?
You probably want to go back to the π Topic Index !