In my 15 years as a developer, I've discovered that false beliefs about human nature are the main enemies of good decomposition . Knowing about them and striving not to fall into their trap, over time, you can formulate tips for creating a quality decomposition . This happened to me, and I hasten to share this knowledge.
For over 5 years I have been working as a backend developer at FunBox. At the company, we believe that good products are the result of a strong engineering culture, and we strive to practice this principle in developing solutions for mobile operators. It has its own features of the stack and processes, but there are also universal aspects applicable in any subject area. One of them is the decomposition approach . Thanks to the product-based nature of the work and the engineering culture, I was able to gain experience and insights that I cannot help but share.
Navigation through the article:
- False Beliefs About Human Nature
- Parkinson's Law
- A continuum of decomposition styles
- Human decomposition
- Decomposition strategies
- From precedent to job description
- Sources
False Beliefs About Human Nature
:
- , .
- , , .
- , ().
- ( ).
- , ().
- ().
, , . , .
. , . , .
« »
4 :
, .
« », 1955 . , . , .
« . » , , . , , .
:
- , ;
- #NoEstimates, .
« » , . :
, , , , . 1840- 1960- . , . , , . , . .
, . ( Thinking Fast And Slow). . . , , , . .
, , . , , . , , , .
, . , . , , , , , .
NoEstimates
AgileDays'14. , , :
- .
- , - . (CI) .
- , , .
, , :
- , , .
- .
- , , .
, , , .
#NoEstimates . , . , , .
, , #NoEstimates, , .
#NoEstimates .
, , , , . .
:
- . , .
- 3—5 . , .
Loose Coupling / High Cohesion ( / ), :
- Loose Coupling: .
- High Cohesion: , .
, , API . , , , , .
. API decomposition smell ( code smell), .
, . .
:
- ?
- - , ?
- ? - , ?
:
- , , , ?
- ( 3—5 )?
- ?
, . . . . .
3—5 — . , , . Ruby on Rails.
, - , , .
, c « ». , :
- , , .
- , , , ( № 3) , .
, . , , . . , , , , , . - , , . , , .
. , , — . , , , . , , . , - . , .
, , , , - .
. , . .
.
,
, ( Ruby on Rails) CRUD .
, .
— . , , . - , . , , , .
Ruby on Rails «--». has_and_belongs_to_many
HABTM- .
, , HABTM- .
, . , , HABTM-, , . . , UI, . « », .
, UI, , , , , — , .
, , , .
, , . . — , — , . , .
:
- .
- , .
- .
- , , .
- , .
- .
, 5 , , . , , «»: .
. , . API , , . API , . , .
. , , , . , .
, 10% , : , .
. , , , . , , . . API , , .
, .
, .
1.
«» , , .
, , .
3—5 , , , , . , .
2.
, . , , , . № 5, . , , , .
, — , . , , . № 6, - . , , , .
— , . « » .
, .
, . , — .
, . .
, . , , . .
, , , .
, , , , . . . , , , . 6 .
3.
, — . , - . , — - - .
. , .
: . , .
, . , , . , , .
4. ,
, . .
, , , , . , , , .
, , . — W.I.P. (work in progress). , .
5.
, , .
, , . , - , - .
. , , .
. .
6.
- .
, -, .
15 «» «- (DDD). ». (Generic Subdomains) (Cohesive Mechanisms), (Core Domain), .
, , , .
-, . , , . .
« -».
, .
, , (accidental complexity) - . , .
, - , . . omakase-, Ruby On Rails .
, . . , , . . , , .
, .
, , . , . .
7.
. , . . , .
« », , 1:3. , . — .
, , .
— , .
, . , . , . , .
, , .
, . — .
- , , . . . , , .
11 « » , :
— .
, . .
. , : , . -. . , . , . .
FunBox .
, , , .
:
- « . ».
- « -».
- «- (DDD). ».
- « . ».
- « . ».
:
- .
- « . » « . ».
- « . ».
- Thinking Fast And Slow.
- « », , . .
:
- « ». AgileDays'14, , , #NoEstimates. .
- « ». . , , , , , .