Thursday, March 13, 2025

Be Proactive

Those of us who are proactive are much more successful than those of us who are reactive.

Follow some of these guidelines to be more proactive:

Principles

  1. See the big picture. Take intelligent risks.
  2. Situational awareness.  Be aware of your immediate surroundings and don't just operate on autopilot.
  3. Future focus.  While keeping an eye on current events, look forward to what's coming up in the next quarter, year, or five years for your business or career.
  4. Strategic foresight.  Looking at how we can get from where we are to where we want to go.  It's "seeing around corners".
  5. Intentional action.  Have a bias towards action.  Not waiting for others to give orders before taking initiative.
  6. Self-evaluation.  Understanding if we're staying ahead of things or if we're getting caught off guard.  By being self aware we can improve on the first five.

Tips

  • Always be asking yourself "what's next" and answer those questions before they're asked.

Wednesday, March 12, 2025

Architecture Fundamentals

 A list of tips and practices that are fundamental to good software architecture:

  • Start with the customer and work towards implementation, not the other way around.
  • The best software architects need experience working as engineers building software.

Architecture Approaches

Waterfall Approach to Architecture

Traditional architecture operated in a waterfall approach that was top down with all decisions being up front by a high level architect that then hands down the requirements to low level programmers.  This approach is bad for several reasons:
  • the design gets outdated
  • a centralized architect slows down the development process as a bottleneck
  • increases the risk of building the wrong thing

Agile Approach to Architecture

The system is built incrementally, delivering a solution little by little, receiving feedback frequently that's integrated into the next iteration.
  • changes are delivered frequently
  • architecture is everyone's responsibility
  • an Architect is a servant leader that helps to support others who are also able to make architectural decisions
  • Architect don't give solutions but provide options to help inform the decisions of the engineers

Daily Tasks

Some tools and techniques that help to facilitate team decisions
  • facilitate working sessions
  • dot voting on options
  • event storming
Mentoring
  • helping engineers to bring ideas to the group
  • guild meetings to facilitate consensus and learning amongst a variety of members
Artifacts
  • System architecture

Conway's Law

Mel Conway: "Any organization that designs a system...will inevitably produce a design whose structure is a copy of the organization's communication structure."

If teams are silo'd then the systems will also be silo'd.  The result is an N-tiered system where the tiers reflect the communication patterns of the teams that built them.  Collaboration is tedious and software development is slow.

An alternative is to approach work as thin slices.  Each slice includes parts of each layer.  Because the layers are all tackled together delivery is much faster.   This type of development is implemented using cross-functional teams.

Agile-friendly architectures include architectures like microservices.

Agile Architectural Approach
  • Systems are architected incrementally.
  • Utilizes Domain Driven Design (DDD) developed by Eric Evans
    • the structure of the code matches the structure of the domain
    • differs from traditional architecture that's oriented around the technology
    • a bounded context separates different contexts from each other
      • bounded contexts map directly on to modules of systems/components
    • communication between contexts is much more restricted than communication within a context
  • Often a single team/group is responsible for a particular domain.

Process

The process involves several steps that can be performed linearly or in parallel.
  1. Write a Problem Statement
    1. several sentences that define the problem
  2. Write a User Story
    1. should be short
    2. can fit on a single sticky note
    3. does NOT say how
  3. Refine the user story into narrow "slices" that can be delivered in quick increments, each adding value.
    1. This can be accomplished by "narrowing" stories by finding the most direct paths through the activity path.

Event Storming

A great process for figuring out agents in a system, which might be entities or services.

Steps

  1. Sticky out the events (one color sticky)
    1. map them out in time sequence from left to right
  2. Sticky out the actions/work (different color)
    1. what happens when the events happen
  3. Now map the agents
    1. agents do the actual work
    2. every agent operates within a bounded context 

Keys Concepts

  • Business people must drive
  • The domain gives a context to the architecture
  • As a result, there's an implementable system
  • Definitions
    • Events
    • Actions
    • Agents/Entities

System Architecture Versus Enterprise Architecture

Enterprise Architecture

Enterprise Architecture: "The organizing logic for business processes and IT infrastructure reflecting the integration and standardization requirements of the company's operating model." -- MIT

What it is:
  • describes the structure of the business
  • describes how things get done (processes)
Where it goes wrong:
  • sometimes creates single monolithic company systems that represent particular domains
  • often requires standardization across the entire enterprise
    • results in complexity and slowness

Broad Architectural Patterns

  • Monoliths
    • Homogenous structure
    • Downsides
      • Long to test and deploy
      • Notoriously hard to deal with
      • Dependencies are everywhere
        • small changes are avoided b/c implications aren't known
      • BBM - big ball of mud
    • Monoliths are generally costly and should be replaced
  • MicroKernel
    • also known as a plug-in architecture
    • the kernel handles the core capabilities like memory and files
    • other components plug into the kernel
    • older kinds of MicroKernal are operating systems
    • newer examples are Azure Service Fabric or AWS
    • Pros
      • plug-ins are independent and can be update without impacting other plug-ins
    • Downsides
      • changes to the kernel APIs can potentially impact or break many plug-ins
  • Message-based
    • can link independent systems that aren't naturally linked
    • systems can be fitted with adapters that link to the messaging system
    • types
      • pub-sub architecture
    • strengths
      • systems can be decoupled
    • weaknesses
      • slower
      • can grow very complex
  • Microservices
    • a larger system is broken into smaller microservices 
    • each microservice
      • is small
      • independently deployable
      • is fully autonomous
      • hides its implementation details
      • generally supports an unreliable network so must address failures
      • highly observable
      • is built around a business context
    • upsides
      • changes can be quick
    • downsides
      • common HTTP approach is real-time
      • design and runtime complexity
      • slower compared to other architectures

  • Reactive & choreographed
    • upstream processor doesn't have any idea about downstream processors
    • the upstream processor publishes an event that downstream processes respond to
    • strengths
      • decoupled
      • easier to maintain
      • downstream processors can operate in parallel

Design Patterns

Provide standard solutions to common problems.  Provide a common vocabulary.

Examples

  • Singleton



Tuesday, March 11, 2025

Time Management Tips

Time Management Tips

If I had 10 extra hours per week, I would.....

For me, this would involve more time with family and investing in myself.

Time management is a balance between Focus and Chaos.  Some are expert in focus and some are experts in chaos. Most of us are somewhere in the middle.

These notes came from watching Time Management Fundamentals with Dave Crenshaw on LinkedIn Learning.

Productivity is about Principles not Technology.

The biggest obstacle to productivity is Multitasking.  Multitasking is comprised of back-tasking and switch-tasking.  Back-tasking involves doing something in the background while we do something else.  However, most of us are actually switch-tasking which involves switching between two tasks at once, which is very inefficient.

  • The average worker switches apps over 500 times per day.
  • Switch-tasking increases stress.
  • Switch-tasking increases mistakes.
  • Switch-tasking dramatically reduces productivity.
Three aspects of improving productivity includes:
  • Space
  • Mind
  • Time - consciously using our time for what's most important to us. MVA - most valuable activities

Space - Gathering Points

Gathering points are places where incomplete tasks can accumulate.  The more gathering points that you have the more switch-tasking you'll need to do and the less productive you'll be.
  • The goal should be to have 6 or less gathering points.
  • Ideally, the following gathering points work well:
    • a physical gathering box
    • a portable inbox like a pocket in your briefcase or backpack
    • a notepad
    • a single email inbox
    • your primary messaging app
    • a wild card option that you can choose based on your way of working

Inbox

This inbox should be a box or something else that's smaller or larger.  This is the place to let things accumulate in one place rather than all over the place.

Portable Inbox

Should be carried with you.  It's a holder for items that you can later dump in your physical inbox.

Notepad

Can be physical or digital.  Can have both, but the less the better.

Single Email Inbox

Sometimes it's not possible to consolidate personal and work.  The goal is to get to the minimum.

Messaging App

Whatever your work generally prefers or requires.

Mind - Clearing Mind Events

When new tasks come into your mind, clear the task by moving it to an approved gathering point.

Mind Clearing Exercise

Move through a list of topics or triggers, for each trigger think of associated tasks and move those tasks to an approved gathering point.  Ideally this exercise should be repeated every couple of months.  This exercise will keep your mind clear and focused.

Time - Scheduling

Use a calendar, either digital or physical.  Digital is preferred
Tips
  • Think of the calendar as a bank account with only so much time to allocate
  • Don't book back to back meetings or overlapping meetings.
  • Schedule buffer time so that you can be prepped for your meetings.
  • Don't think short term, schedule in the future
  • Protect your time
    • Get good at saying No to others AND to yourself
    • Use a Perhaps list that captures all potential ideas/tasks without committing.  Review the list every several months.
    • Saying No to some tasks means you have more time to work on those things you say Yes to.
  • Don't accept all invites immediately; if asked to meet, ask for the request via email in order to know whether the time will work and if the other person is committed to scheduling the time.

Processing

  • Processed items have a clearly defined what, when, and where.  Unprocessed items are missing a what, when, and where.
  • Your workspace should have homes for particular things like pens or devices or anything else.  Anything that Doesn't belong in a particular home MUST get moved to a gathering point.
  • Unprocessed items don't need to get processed, they just need to go into an approved gathering point.  To process an item, figure out the whatwhen, and where.

Processing System

The processing system is a systematic way of working with unprocessed items.
  1. First figure out what is the next step.  Don't just skip this if it's hard.
    1. delegate
    2. disengage from the obligation
  2. Next figure out the when you will do it.
    1. If it takes 5 minutes or less, just do it now.
    2. Calendar anything that will take more than 15 minutes
      1. Anything that has a deadline MUST be scheduled.
    3. Anything b/w 5 and 15 minutes can use task reminders so they can get done at flexible times.
    4. The more valuable something is, the sooner it should get done.
  3. Last figure out where the task's home is.
    1. When in doubt with digital items, keep it.
    2. When in doubt with physical items, throw them out.
    3. Separate personal and work items
    4. Separate files into categories
      1. Then create subfolders under each category
    5. In each subfolder create an OLD folder for older non-current files
    6. Save files with the date in the name.
    7. Find a way to do offline backups so they can be retrieved if lost
  4. Schedule processing time each week
    1. Processing should get each gathering point to zero at least once a week
    2. Start with 5 hours of processing time per week, then adjust after a few weeks
  5. Email processing
    1. Emails should be archived into a special folder for emails that have been processed.
    2. If the email isn't wanted, unsubscribe if possible then delete.
    3. Setup FILTERs that automatically move emails to archived folders.

Finding a Boundary

It's critical to find a boundary between work and personal time.
  1. First, figure out how many hours you want / need to work each week.  Then subtract this time from 168 hours, which is the number of hours in a week.
  2. Then figure out what the MOST important tasks that you perform.  The top 2 are the Most Valuable Activities (MVA).  Most people spend their time on less valuable activities (LVA)s.
  3. To get paid more and be more productive, spend your time on your MVAs rather than your LVAs.

Be Proactive

Those of us who are proactive are much more successful than those of us who are reactive. Follow some of these guidelines to be more proacti...