Software Engineering 101

Odessa 2016

Hello, I am Alex

Self-taught

FullStack Engineer

 

Web Frontend Expert

 

Mentor

TopTal

Upwork Pro

Freelance

Freelance

Freelance

Startup

Startup

Pet project

Pet project

Pet project

Pet project

Pet project

Learning

Stay curious

Ask questions

Tell things

Knowledge

vs 

skills

Knowledge

  • Won't feed you today
  • Opportunities
  • More influence

Strategic Value

Skills

  • Immediate value and benefits
  • Get Stuff Done
  • More freedom

Tactical Value

How-To

How-To

  • Analyse breadth-first
  • Grasp the basics
  • Go deeper when you are in the context

Hacks

Hacks

Spaced Repetitions

Hype

Hype

Tech Spiral

Learn from History

Hype

Follow the trends only if you are an expert in the niche

Hype

Only bet on strategical investments

Yes, I am sure I will do this in 5 years and pursue this goal whatever it costs

Hype

Ignore “moving train”

and “become pro in 21 days!”

Say NO

Failures

Do not be afraid

2 steps

Step #1

Learn first how to cope with failures yourself

  • How do you feel about it?

  • How do you learn from it?

  • How do you fix the consequences?

Step #2

Learn from other people failures 

  • Networking!

  • Conferences, Meetups, Chat rooms

  • Case Studies

  • Share Failures!

Failure is the source of experience

Experience is the source of intuition

Success is a side effect

You cannot escape it

Failures and Edge Cases 

are essential to our craft

Be responsible!

Respond to failures

Safety Nets / Plan B

Design for Failure

vs

Happy Path

Technologies

Technologies

does not matter!

...as much as we want them to

Good software

is done by good

software engineering teams

Project success has

no correlation

 with used technologies

Pick any technology

pragmatically

Pragmatic arguments

logically fit

 your context

Pragmatic arguments

 are based on practical

rather than theoretical

considerations

My team is proficient with it

People are excited by this technology

Easy to find and add new people

Helps to do things right

Refactoring

Has no direct

business value

Should not be

a part of the backlog

Opportunistic Refactoring

The only one working method

Rule #0:

never talk about refactoring

Rule #1: 

Refactoring is an essential part of a task

Rule #2: 

Boy Scout Rule

Boy Scout Rule

Always leave the code behind
in a better state
than you found it

Learn

how to work with

Legacy Software

Communications

Max info in Min time

Rule #0:

Do not explain the answer 

before

answering the question

 

Rule #1:

Start with

the single most important

fact

Talk to hear, 

not to be

understood

Prove to

understand

Not to "be right"

Not to "be better"

Constructive criticism

Close the loop: offer some options

Constructive: help them become better

Stop your judgement

the ultimate relationship destroyer

the ultimate happiness killer

Give it 5 minutes

Be the last one to provide a summary

Active Listening

Active Listening

Eye contact

Relaxed Attention

Imagine things

No interruptions and suggestions

Body language

Feedback

Train your expressiveness

Blogging

Chats

Talk to people

Processes

Agile and XP

Software Craftsmanship

Well-Crafted Software >  working software 

Steadily adding Value > responding to change

A Community of Professionals > individuals and interactions

Productive  Partnerships >  customer collaborations

Project Management

... is still a mess

Scrum vs Kanban

Scrum

"Agency - Customer" model

Warzone methodology

Expert-Driven micromanagement

Kanban

Pull-based model

Involves everyone

Quotas

Eliminating Waste

Build your own processes

We are still "not there"

Optimise for 

 Sustainable and reliable progress

Getting things out of your head

Fighting complexity

Changeability

Estimations

Task vs Project

Task Estimation

No more than 2 weeks!

Include all phases

Task Estimation Phases

Implementation

Testing

Logging / Metrics

Design / Refactoring

Implementation is what
can be estimated
and only optimistically

Task Estimation

30%     Implementation

30%     Testing

10%      Logging / Metrics

30%     Design / Refactoring

Realistic estimate = 3 * implementation time

Multiplication Factor
will vary
based on experience

Project Estimation

Divide & Conquer:
Epics, Stories, Tasks

Make optimistic task estimates

Add time boxed investigations

Include risks

4 weeks per story max, otherwise investigate!

Project Estimation

Realistic path =

3.14 * Optimistic path + 2 weeks

Risks

Bus Factor

Illness

Fuck ups

Vacations

Holidays

Design Mistakes

Thanks!

Take Aways