Software 
Engineering 101 
The basics you should hear about at least once
Engineering is all 
about 
constraints
Know your context
Know your resources 
How can you do this?
Know your goals 
What are you doing?
Know your reason 
Why are you doing this?
There is always 
“it depends” 
argument
Listen and ask to get the whole context 
Be proactive to find those limitations
Be passionate
Technologies 
do 
NOT 
matter
“ Is Ruby better than Python? ” 
No, it does not really matter
“But I like Python more!” 
Yeah, that’s a good argument
Good software is done 
by good software engineers
Project success has 
NO correlation 
with technologies used
Pick any technology pragmatically
Pragmatic arguments 
logically fit 
your context
Pragmatic: “Team is proficient with it“
Pragmatic: “People are excited by the 
technology”
Pragmatic: “Easy to find new people”
Pragmatic: “Helps do things right”
Hardest challenges
1. How do you communicate? 
Problems 
Context 
Focus
2. How do we manage complexity? 
Divide and Conquer 
Structure 
Conventions
3. How do I name this thing? 
Never trust names by default 
Look in the source code 
Read more
4. How to evolve this system? 
Manage complexity 
Communicate 
Measure 
React
Be pragmatic 
not religious 
about how you solve problems 
There are no silver bullets
Code is for humans!
It’s all about people
Use 
simple 
technologies 
Not easy 
! 
See this: 
http://www.infoq.com/presentations/Simple-Made-Easy
Always think about maintenance 
More time spent reading and debugging 
then actual writing code
Readability and simplicity 
is always better 
than no duplications 
and following best practices
Always code as if the guy who ends up 
maintaining your code will be 
a violent psychopath 
who knows where you live. 
! 
Code for readability. 
–John Woods
Know 
what 
you are doing
Never be lazy about 
knowing 
what's going on under the hood
Ask 
This is not really scary
Tell
Show
Keep on learning 
Be a sponge for information
Experiments
Always write code 
Do not only learn and analyse 
Get your hands dirty
Try new things
Failure is 
the only 
source of experience 
Success is a side-effect
Experience is 
the only 
source of intuition
Think 
Act 
Measure 
Decide 
Recipe may vary 
! 
See this: 
http://en.wikipedia.org/wiki/Cynefin
Be responsible
Good practices
Routine automation
OSS 
Open new issues 
Make contributions 
Do not let bugs live
Hotkeys 
Snippets 
Live templates
Pet projects
Give it 
5 minutes 
https://signalvnoise.com/posts/3124-give-it-five-minutes
Know your tools
Git 
rebase, add patch, bisect
Gitflow
IDE + Text editor 
Vim, Sublime, Nano
CI / CD / QA / Operations 
Know what others do 
and how you can help
Guerilla 
Refactoring
The only one 
working 
refactoring method
Refactoring 
has no 
direct business value
Refactoring 
should not 
be a part of backlog
Add time 
for refactoring 
in your estimates
Boy Scout rule: 
“Always leave the code behind 
in a better state 
than you found it” 
Uncle Bob
Task estimation
Include all phases in estimates
30% testing 
30% implementation 
10% logging and metrics 
30% refactoring
30% testing 
30% implementation 
10% logging and metrics 
30% refactoring 
This is what you REALLY can estimate
Real estimate = 3 * implementation estimate 
Multiplication Factor will vary based on experience
Project estimation
Create epics and stories
Divide stories in tasks
Make optimistic task estimation
Include all risks 
Illness 
Fuck ups 
Bus factors 
Holidays 
Design mistakes
Optimistic path with 
estimated risks included
Realistic path
Realistic path 
= 
3.14 * Optimistic path + 2 weeks
2 weeks is an 
emergency interval 
The time needed for senior engineer 
to make something working 
if everything else failed
Productivity
Productivity techniques 
Pomodoro 
GTD
White noise 
Scientifically proved 
http://focusatwill.com/
ABC 
Always Be Coding 
https://medium.com/@davidbyttow/abc-always-be-coding-d5f8051afce2
Keep mind sharp
Eat well
Sleep well
Exercise well
Make breaks
Meditate
Intentionally left blank
The Ultimate Goal
It’s not about coding
It’s not about design
It’s not about joy
It’s not about making money
It’s all about value 
All other things included!
When your coding skills will be smooth, 
you will start thinking about the value 
automatically
Takeaways 
http://martinfowler.com/bliki/OpportunisticRefactoring.html 
http://www.quora.com/Computer-Programming/What-insights-do-expert-hackers-have-for- 
novice-programmers 
http://www.quora.com/Computer-Programming/What-are-some-essays-all-programmers- 
should-read 
http://michaelochurch.wordpress.com/2012/01/26/the-trajectory-of-a-software-engineer- 
and-where-it-all-goes-wrong/ 
http://pomodorotechnique.com/ 
http://www.infoq.com/presentations/Simple-Made-Easy 
http://vlsicad.ucsd.edu/Research/Advice/star_engineer.pdf 
http://www.targetprocess.com/articles/speed-in-software-development.html 
http://simpleprogrammer.com/2014/02/17/secret-ridiculous-productivity-im-using-now/ 
https://signalvnoise.com/posts/3124-give-it-five-minutes 
https://medium.com/@davidbyttow/abc-always-be-coding-d5f8051afce2
Brought to you by Alex 
mr_mig_by

Software engineering 101 - The basics you should hear about at least once