What developers
can learn from
Soviet space failures
Andrey Sitnik, Evil Martians
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5096923/14318613567134.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2369968/gett.png)
product development consultancy
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6965915/upload-5ea9af60-7add-11e8-9304-a7ced6737faa.png)
The creator of
Autoprefixer
PostCSS
Browserslist
@sitnikcode
Wikipedia and space are my passions
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4624356/IMG_20160706_151203__1_.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5096977/IMG_20170801_160438__1_.jpg)
@sitnikcode
Space industry sometimes looks like IT
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630129/p54.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097052/apollo.jpg)
@sitnikcode
Every country makes mistakes
@sitnikcode
Story 1
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097516/0253f600eed2782b45f8a1152b6220b8.jpg)
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630185/1101681206_400.jpg)
1968
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630213/YvVuyn7.jpg)
New Soviet spaceship, Soyuz
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630213/YvVuyn7.jpg)
Like
DHTML
jQuery
React
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6965918/Soyuz_TMA-15M.jpg)
56 year of maintaince. The real legacy project.
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6966259/3226a.jpg)
1967
2023
1967
@sitnikcode
To the Moon: direct vs. two ships
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097615/Image-of-Lunar-Landers.gif)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097642/s69-34071.jpg)
@sitnikcode
Two ships flight requires docking
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097634/2010-06-11_CSM_LM.jpg)
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630383/130116_Stykovka_600.jpg)
Soyuz 2 & Soyuz 3 docking test
@sitnikcode
Pilots
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097660/404d1d20e449035b07b5eae83463c314_0.jpg)
Soviet Robot (Soyuz 2)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4054198/article_robot.jpg)
Georgy Beregovoy (Soyuz 3)
@sitnikcode
Docking
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630397/50-4.jpg)
Error
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630397/50-4.jpg)
ERROR
@sitnikcode
Next try
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630397/50-4.jpg)
@sitnikcode
Error again
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630397/50-4.jpg)
ERROR
@sitnikcode
Landing without success
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097679/soyuz-9_recovery_2.jpg)
Why?
@sitnikcode
The spaceship was upside down
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630422/usb.gif)
@sitnikcode
What did they do with him?
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097828/information_items_3634.jpg)
@sitnikcode
Changed docking instructions
- Only perform docking on the sunny side of the orbit
- Give pilots time to adjust in orbit
@sitnikcode
Lesson 1
There are no stupid users—only bad UX
PostCSS has special checks for popular mistakes
} else if ( typeof i === 'object' && (i.parse || i.stringify) ) {
throw new Error('PostCSS syntaxes cannot be used as plugins. ' +
'Instead, please use one of the ' +
'syntax/parser/stringifier options as ' +
'outlined in your PostCSS ' +
'runner documentation.');
if ( e.name === 'CssSyntaxError' && opts && opts.from ) {
if ( /\.scss$/i.test(opts.from) ) {
e.message += '\nYou tried to parse SCSS with ' +
'the standard CSS parser; ' +
'try again with the postcss-scss parser';
@sitnikcode
Story 2
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097848/DTpIihCXkAA7-gF.jpg)
@sitnikcode
1969
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630219/image.jpeg)
@sitnikcode
Start in Soyuz 4, land in Soyuz 5
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097898/81e3eaec20a7e33b927c1798bf1cd07c.jpg)
Boris Volynov
@sitnikcode
Boris Volynov should land alone
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630220/975.jpg)
Boris Volynov
@sitnikcode
Soyuz spaceship
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097920/GmW0i.jpg)
@sitnikcode
Separation before landing
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630229/08asokolovrazdelenie-korablya-soyuz-na-otseki.jpg)
@sitnikcode
Soyuz 5 separation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097980/soyuz-spacecraft-diagram-f7ZBYKQ.jpg)
Thermal shield
@sitnikcode
Hatch was in the front during re-entry
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630232/204046_original.jpg)
@sitnikcode
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5098002/61c4e6c9a1cafc37f620fa3e147245f4.png)
What will you do?
Blame USSR
Blame engineers
Pray to God
@sitnikcode
He recorded every detail of separation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5103265/0_aeb11_716d1db2_orig.jpeg)
@sitnikcode
Luckily, tank explosion separated modules
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5097980/soyuz-spacecraft-diagram-f7ZBYKQ.jpg)
@sitnikcode
He landed successfully
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5098045/18930.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5098046/volynov.jpg)
@sitnikcode
Lesson 2
Always report about issues.
Even if it was a documentation issue.
My favorite type of PRs to PostCSS
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5099980/vVNBvpO.png)
@sitnikcode
Story 3
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100012/1334187471_8d2b.jpg)
@sitnikcode
1997
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630636/DCJTgZ_UIAAwFnw.jpg)
Mir space station
@sitnikcode
Mir was the first modular space station
@sitnikcode
Every module is an independent spaceship
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100939/1024px-Kvant_2_module_drawing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100940/Mir_base_block_drawing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100943/1024px-Kristall_module_drawing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100945/Spektr_module_drawing.png)
@sitnikcode
Modules could even change the position
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100967/987px-Mir_1990_configuration_drawing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100970/1059px-Mir_June_2_1995_configuration_drawing.png)
1990
1995
@sitnikcode
Like multicellular organism
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5103042/mitosis-of-living-cells.jpg)
@sitnikcode
Modules and ships dock automatically
@sitnikcode
Mir crew
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101306/105fa45067a3410c88b8338ff1cbe072.jpg)
Vasili Tsibliyev
Aleksandr Lazutkin
Michael Foale
@sitnikcode
Remote control to replace auto-docking system
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101171/lF6cp.png)
Commands
Video
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101301/1481144248_lazutkin.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630641/regnum_picture_1455914014207881_normal.jpg)
Like
@sitnikcode
The result
@sitnikcode
The result
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630661/1024px-Spektr_-_cropped.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101259/Damaged_Spektr_radiator.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101260/640px-Damaged_Spektr_solar_array.jpg)
Decompression
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5100945/Spektr_module_drawing.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101273/wind.png)
@sitnikcode
Cut cables, close hatch
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101284/Mir_node_interior_STS-84__2_0.jpg)
@sitnikcode
They lost power
40 % of solar panels
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/4630661/1024px-Spektr_-_cropped.jpg)
@sitnikcode
Not the best day
@sitnikcode
Like
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101334/dQdR1VM.png)
@sitnikcode
Module was decompressed until Mir deorbit
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/5101485/06-36c9698008f2f8b027a5fa327525ede025.jpg)
@sitnikcode
Lesson 3
People make mistakes.
Prefer automatic tools.
ESLint: the most popular robot
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2873877/Pikachu.png)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2873882/42uDcM0siVA.jpg)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/2873886/pichu.png)
JSLint
JSHint
ESLint
→
→
@sitnikcode
.foo {
margin-top: 20px;
width: 100px;
height: 100px;
margin: 0 auto;
}
Stylelint: this overrides the longhand property before it app.css:5:3
Stylelint: robot to checks CSS
@sitnikcode
stylelint-order: robot to keep order in CSS
.wrapper {
top: 20px;
margin-left: 20px;
display: flex;
position: absolute;
height: 100%;
margin-bottom: 20px;
border-radius: 5px;
color: red;
justify-content: center;
margin-left: 2px;
left: 0px;
width: 100%;
border: 1px solid red;
}
.wrapper{
position: absolute;
top: 20px;
left: 0;
display: flex;
justify-content: center;
width: 100%;
height: 100%;
margin-bottom: 20px;
margin-left: 20px;
margin-left: 2px;
color: red;
border: 1px solid red;
border-radius: 5px;
}
@sitnikcode
Size Limit: robot to check JS library size
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/6967837/example.png)
@sitnikcode
Contacts
![](https://s3.amazonaws.com/media-p.slid.es/uploads/467124/images/10032507/01_Evil-Martians_Logo_v2.1_RGB_on-White.png)