SlideShare a Scribd company logo
Frontend development
approaches that reduce the risks
of project failure
Viktor Turskyi
JavaScript fwdays’24
● 20 years in IT
● 13 years in software business
● Delivered more than 80 projects of
different scale
● Did 15 projects for 5 companies from
Fortune 500 list
● 3 years at Google
● youtube.com/@AboutProgramming
Is High Quality Software Worth
the Cost?
JavaScript fwdays’24
Do we need architecture for
frontend?
JavaScript fwdays’24
"Impact of front-end architecture on development cost", Viktor Turskyi
“If you think good architecture is
expensive, try bad architecture.”
—Brian Foote and Joseph Yoder
JavaScript fwdays’24
What is most popular
architecture today?
JavaScript fwdays’24
Big Ball of Mud
http://www.laputan.org/mud/mud.html#BigBallOfMud
JavaScript fwdays’24
JavaScript fwdays’24
Source: https://martinfowler.com/articles/is-quality-worth-cost.html
JavaScript fwdays’24
Source: https://martinfowler.com/articles/is-quality-worth-cost.html
What is the best architectural
decision?
JavaScript fwdays’24
Robert Martin
“The job of architect is not to make decision, the
job of the architect is to defer decisions as long
as possible”
“Good architecture maximizes number of
decisions not made”
https://www.youtube.com/watch?v=o_TH-Y78tt4
JavaScript fwdays’24
How can we make better
architectural decisions?
JavaScript fwdays’24
Solution is in technical domain
but problem statement in
business/product domain.
JavaScript fwdays’24
Understand business/product
domain. Focus on business
problems
JavaScript fwdays’24
Why to understand domain?
● Problems you solve comes from domain. Otherwise you will solve wrong problems.
● Requirements (including non functional) comes from domain.
● Creating good Domain Model requires understanding the domain
● Simplifies communication with stakeholders (you talk to them using their
language)
● Simplifies adding new changes
● Psychological comfort. Engineers prefer to write products that they understand.
JavaScript fwdays’24
Conduct business/product
trainings
JavaScript fwdays’24
Universal approach for better decisions
1. Always ask yourself “What problem do we want to solve?”
2. Find several potential solutions (not all possible, two can be enough)
3. Select the best solution for your problem
Let’s discuss problem microservices case again.
JavaScript fwdays’24
How to make “better” design?
● Understand business/product domain
● Understand technologies deeply
● Optimize for change
● Assemble first
● Think about abstractions
JavaScript fwdays’24
Why to understand technologies deeply?
● You cannot choose right technologies without knowing their properties
● You cannot know their properties without knowing implementation details
What will happen to DB if you will increase amount of data 10 times? Can you answer
that without knowing how indexes work?
Docker vs VMs? What are the properties? (Why docker is slow on OSX?)
Is MongoID secure as a token for password recovery?
React Native is native or not native?
JavaScript fwdays’24
Optimize for
change
One of Agile Manifesto principles:
Welcome changing requirements, even late in
development. Agile processes harness change
for the customer's competitive advantage.
https://agilemanifesto.org/principles.html
JavaScript fwdays’24
How to optimize for change?
● Do not write code which support everything. In this case, the result will be
opposite.
● Expect changes! Evaluate risks
● Simplify (simplicity and easiness is not the same, “Simple made easy”)!
● Good abstraction but without overengineering. Reduce coupling, increase
cohesion.
● Stay in touch with product managers (while you developing A they are already
thinking about B)
JavaScript fwdays’24
Can we predict future?
JavaScript fwdays’24
Talk to product managers - they
live in future
JavaScript fwdays’24
Assemble first principle
JavaScript fwdays’24
https://webbylab.com/cases/mercedes/
JavaScript fwdays’24
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
How to organize work on this?
JavaScript fwdays’24
What does it mean to assemble first?
● Create abstractions
● Think about data which goes through your system
● Implement behaviour just with simple boxes
● Iteratively add details to each box
JavaScript fwdays’24
Why to assemble first?
● You will have abstractions of components that really fit each other
● You will have end-to-end working functionality early to and will get early feedback
● Feature owners can test their own pieces in fully working environment
● You can discover risks as earlier
● Early integration becomes possible
● Much easier to parallelize the work
● Not having time to deliver 100% will allow you to compromise on some visuals
than on end-to-end experience for case when you assemble at the very end
JavaScript fwdays’24
https://blog.udemy.com/how-to-draw-a-realistic-cat-step-by-step/
JavaScript fwdays’24
https://blog.udemy.com/how-to-draw-a-realistic-cat-step-by-step/
JavaScript fwdays’24
Does it guarantee success? No!
JavaScript fwdays’24
Priorities/Commitment
P0 - must
P1 - should
P2 - might
JavaScript fwdays’24
https://blog.udemy.com/how-to-draw-a-realistic-cat-step-by-step/
P0, P1, P2 P0, P1
P0
JavaScript fwdays’24
Abstractions
JavaScript fwdays’24
What are good abstractions
● They are usable. Think how they will be used while designing them
● You can understand them. You should be able to predict system behaviour
● You should know where to put specific code
● Tests are just statistical proofs that something is working
● They are not dependent on context
● Low coupling
● High cohesion
JavaScript fwdays’24
Developes are afraid of new abstractions
● Story about Test factory and assertDate method
● Story about Controllers/Mediators/Managers in UI
● Story about Extra behaviour in slides engine
● Story about Builders for UI components
● etc
JavaScript fwdays’24
Level editors concept
JavaScript fwdays’24
Universal toolkits
JavaScript fwdays’24
Builders
JavaScript fwdays’24
Type of builders
● Form Builder
● Dialog Builder
● Grid Builder
● Page Builder
JavaScript fwdays’24
Form builder schema
{
api: { load: (id) => {} , save: (data) => {}},
inputs: [
{field: ‘name’, type: ‘text’, label: ‘Name’}
],
}
JavaScript fwdays’24
Form builder
function UserEditForm({id}) {
const schema = {...}
return <FormBuilder schema={schema} />
}
JavaScript fwdays’24
Dialog builder
function UserEditDialog({id}) {
const schema = {
title: ‘Edit dialog’,
formSchema: {}
}
return <DialogBuilder schema={schema} />
}
JavaScript fwdays’24
Grid builder schema
source: { list: Promise.resolve(data)},
columns: [
{field: ‘id’, type: ‘id’, label: ‘Id’},
{field: ‘name’, type: ‘url’, label: ‘Name’, urlFormatter: (user) => `/users/${user.id}`}
],
rowActions: [
{icon: <DeleteIcon />, label: ‘Delete’, confirm: true },
{icon: <EditIcon />, label: ‘Edit’, action: (row) => {
dialogService.open(UserEditDialog, {id: row.id})
}],
JavaScript fwdays’24
Grid builder
function UsersGrid() {
const schema = {...}
return <GridBulder schema={schema} />
}
JavaScript fwdays’24
Page builder
{
title: ‘users’,
layout: {component: MainLayout, props: {selected: ‘users’} },
gridSchema: {...},
}
JavaScript fwdays’24
Builders pros
● You have consistent behaviour across your UI
● Increases development speed a lot
● Can be iteratively updated each time you have a new requirement
● Easier to design
● Minimum extra time for development as the features should be done in any case
JavaScript fwdays’24
Is technical debt a bad thing?
JavaScript fwdays’24
Some thoughts on technical debt
● Doing things the quick and dirty way sets us up with a “technical debt”, which is
similar to a financial debt.
● Another metaphor is “Pollution”. Pollutants gradually affect people and as time
passes by, makes it exponentially harder and costly to fix it.
● You can't cook food without dirtying the dishes. Clean the kitchen after cooking
● You introduce technical debt even if all you do is just write similar code.
JavaScript fwdays’24
Some thoughts on patterns and best
practices
Pattern is just a common solution (not a secret solution) which works for a common
problem.
Ask yourself why such pattern or best practice does exist and be ready to not follow it if
this “why” is not related to your case.
JavaScript fwdays’24
Chat example
Let’s design together
JavaScript fwdays’24
@turskyi
Viktor
Turskyi
Thank you

More Related Content

PDF
Making tech-simple-for-users-wp
PPTX
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
PDF
Software is not a Building - Designing Technical Architecture for Change
KEY
corporateJavascript
PPSX
Enhancing clean architecture: 2 n-dimensional layers
PDF
The Lean Tech Stack
PDF
L02 What is Software Architecture?
PPT
Why do complex software application projects drag?
Making tech-simple-for-users-wp
ITARC15 Workshop - Architecting a Large Software Project - Lessons Learned
Software is not a Building - Designing Technical Architecture for Change
corporateJavascript
Enhancing clean architecture: 2 n-dimensional layers
The Lean Tech Stack
L02 What is Software Architecture?
Why do complex software application projects drag?

Similar to "Impact of front-end architecture on development cost", Viktor Turskyi (20)

PDF
Multi View Constructed Right
PDF
Architecting a Large Software Project - Lessons Learned
PPTX
Professionalizing the Front-end
PPT
The Architect's Two Hats
PDF
Ten Advices for Architects
PPTX
New life inside monolithic application
PDF
Professional JavaScript: AntiPatterns
PDF
10 Hinweise für Architekten
PDF
Viktor Turskyi "Effective NodeJS Application Development"
PPTX
Grygoriy gavaleshko cross-framework communication on frontent
PPTX
L23 Summary and Conclusions
PPTX
Shut Up And Eat Your Veg
PPTX
Craftsmanship
PPTX
Rapid Application Development with MEAN Stack
PDF
Biz Product Learnings
PDF
UX Fluency for a better Front End
PDF
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
PDF
Performance - a challenging craft
PDF
Picking the right architecture and sticking to it
PDF
JavaScript Design Patterns Hugo Di Francesco
Multi View Constructed Right
Architecting a Large Software Project - Lessons Learned
Professionalizing the Front-end
The Architect's Two Hats
Ten Advices for Architects
New life inside monolithic application
Professional JavaScript: AntiPatterns
10 Hinweise für Architekten
Viktor Turskyi "Effective NodeJS Application Development"
Grygoriy gavaleshko cross-framework communication on frontent
L23 Summary and Conclusions
Shut Up And Eat Your Veg
Craftsmanship
Rapid Application Development with MEAN Stack
Biz Product Learnings
UX Fluency for a better Front End
'Effective node.js development' by Viktor Turskyi at OdessaJS'2020
Performance - a challenging craft
Picking the right architecture and sticking to it
JavaScript Design Patterns Hugo Di Francesco
Ad

More from Fwdays (20)

PDF
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
PDF
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
PPTX
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
"Mastering UI Complexity: State Machines and Reactive Patterns at Grammarly",...
"Effect, Fiber & Schema: tactical and technical characteristics of Effect.ts"...
"Computer Use Agents: From SFT to Classic RL", Maksym Shamrai
"Як ми переписали Сільпо на Angular", Євген Русаков
"AI Transformation: Directions and Challenges", Pavlo Shaternik
"Validation and Observability of AI Agents", Oleksandr Denisyuk
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
"AI is already here. What will happen to your team (and your role) tomorrow?"...
"Is it worth investing in AI in 2025?", Alexander Sharko
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
"Scaling in space and time with Temporal", Andriy Lupa.pdf
"Database isolation: how we deal with hundreds of direct connections to the d...
"Scaling in space and time with Temporal", Andriy Lupa .pdf
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Ad

Recently uploaded (20)

PDF
Getting Started with Data Integration: FME Form 101
PDF
Approach and Philosophy of On baking technology
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Heart disease approach using modified random forest and particle swarm optimi...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Web App vs Mobile App What Should You Build First.pdf
PPTX
Chapter 5: Probability Theory and Statistics
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
DP Operators-handbook-extract for the Mautical Institute
PPTX
OMC Textile Division Presentation 2021.pptx
PPTX
A Presentation on Touch Screen Technology
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
Getting Started with Data Integration: FME Form 101
Approach and Philosophy of On baking technology
Univ-Connecticut-ChatGPT-Presentaion.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Unlocking AI with Model Context Protocol (MCP)
Encapsulation_ Review paper, used for researhc scholars
Heart disease approach using modified random forest and particle swarm optimi...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
cloud_computing_Infrastucture_as_cloud_p
Web App vs Mobile App What Should You Build First.pdf
Chapter 5: Probability Theory and Statistics
Zenith AI: Advanced Artificial Intelligence
Building Integrated photovoltaic BIPV_UPV.pdf
DP Operators-handbook-extract for the Mautical Institute
OMC Textile Division Presentation 2021.pptx
A Presentation on Touch Screen Technology
SOPHOS-XG Firewall Administrator PPT.pptx
NewMind AI Weekly Chronicles - August'25-Week II
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
A comparative analysis of optical character recognition models for extracting...

"Impact of front-end architecture on development cost", Viktor Turskyi

  • 1. Frontend development approaches that reduce the risks of project failure Viktor Turskyi
  • 2. JavaScript fwdays’24 ● 20 years in IT ● 13 years in software business ● Delivered more than 80 projects of different scale ● Did 15 projects for 5 companies from Fortune 500 list ● 3 years at Google ● youtube.com/@AboutProgramming
  • 3. Is High Quality Software Worth the Cost? JavaScript fwdays’24
  • 4. Do we need architecture for frontend? JavaScript fwdays’24
  • 6. “If you think good architecture is expensive, try bad architecture.” —Brian Foote and Joseph Yoder JavaScript fwdays’24
  • 7. What is most popular architecture today? JavaScript fwdays’24
  • 8. Big Ball of Mud http://www.laputan.org/mud/mud.html#BigBallOfMud JavaScript fwdays’24
  • 11. What is the best architectural decision? JavaScript fwdays’24
  • 12. Robert Martin “The job of architect is not to make decision, the job of the architect is to defer decisions as long as possible” “Good architecture maximizes number of decisions not made” https://www.youtube.com/watch?v=o_TH-Y78tt4 JavaScript fwdays’24
  • 13. How can we make better architectural decisions? JavaScript fwdays’24
  • 14. Solution is in technical domain but problem statement in business/product domain. JavaScript fwdays’24
  • 15. Understand business/product domain. Focus on business problems JavaScript fwdays’24
  • 16. Why to understand domain? ● Problems you solve comes from domain. Otherwise you will solve wrong problems. ● Requirements (including non functional) comes from domain. ● Creating good Domain Model requires understanding the domain ● Simplifies communication with stakeholders (you talk to them using their language) ● Simplifies adding new changes ● Psychological comfort. Engineers prefer to write products that they understand. JavaScript fwdays’24
  • 18. Universal approach for better decisions 1. Always ask yourself “What problem do we want to solve?” 2. Find several potential solutions (not all possible, two can be enough) 3. Select the best solution for your problem Let’s discuss problem microservices case again. JavaScript fwdays’24
  • 19. How to make “better” design? ● Understand business/product domain ● Understand technologies deeply ● Optimize for change ● Assemble first ● Think about abstractions JavaScript fwdays’24
  • 20. Why to understand technologies deeply? ● You cannot choose right technologies without knowing their properties ● You cannot know their properties without knowing implementation details What will happen to DB if you will increase amount of data 10 times? Can you answer that without knowing how indexes work? Docker vs VMs? What are the properties? (Why docker is slow on OSX?) Is MongoID secure as a token for password recovery? React Native is native or not native? JavaScript fwdays’24
  • 21. Optimize for change One of Agile Manifesto principles: Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. https://agilemanifesto.org/principles.html JavaScript fwdays’24
  • 22. How to optimize for change? ● Do not write code which support everything. In this case, the result will be opposite. ● Expect changes! Evaluate risks ● Simplify (simplicity and easiness is not the same, “Simple made easy”)! ● Good abstraction but without overengineering. Reduce coupling, increase cohesion. ● Stay in touch with product managers (while you developing A they are already thinking about B) JavaScript fwdays’24
  • 23. Can we predict future? JavaScript fwdays’24
  • 24. Talk to product managers - they live in future JavaScript fwdays’24
  • 30. How to organize work on this? JavaScript fwdays’24
  • 31. What does it mean to assemble first? ● Create abstractions ● Think about data which goes through your system ● Implement behaviour just with simple boxes ● Iteratively add details to each box JavaScript fwdays’24
  • 32. Why to assemble first? ● You will have abstractions of components that really fit each other ● You will have end-to-end working functionality early to and will get early feedback ● Feature owners can test their own pieces in fully working environment ● You can discover risks as earlier ● Early integration becomes possible ● Much easier to parallelize the work ● Not having time to deliver 100% will allow you to compromise on some visuals than on end-to-end experience for case when you assemble at the very end JavaScript fwdays’24
  • 35. Does it guarantee success? No! JavaScript fwdays’24
  • 36. Priorities/Commitment P0 - must P1 - should P2 - might JavaScript fwdays’24
  • 39. What are good abstractions ● They are usable. Think how they will be used while designing them ● You can understand them. You should be able to predict system behaviour ● You should know where to put specific code ● Tests are just statistical proofs that something is working ● They are not dependent on context ● Low coupling ● High cohesion JavaScript fwdays’24
  • 40. Developes are afraid of new abstractions ● Story about Test factory and assertDate method ● Story about Controllers/Mediators/Managers in UI ● Story about Extra behaviour in slides engine ● Story about Builders for UI components ● etc JavaScript fwdays’24
  • 44. Type of builders ● Form Builder ● Dialog Builder ● Grid Builder ● Page Builder JavaScript fwdays’24
  • 45. Form builder schema { api: { load: (id) => {} , save: (data) => {}}, inputs: [ {field: ‘name’, type: ‘text’, label: ‘Name’} ], } JavaScript fwdays’24
  • 46. Form builder function UserEditForm({id}) { const schema = {...} return <FormBuilder schema={schema} /> } JavaScript fwdays’24
  • 47. Dialog builder function UserEditDialog({id}) { const schema = { title: ‘Edit dialog’, formSchema: {} } return <DialogBuilder schema={schema} /> } JavaScript fwdays’24
  • 48. Grid builder schema source: { list: Promise.resolve(data)}, columns: [ {field: ‘id’, type: ‘id’, label: ‘Id’}, {field: ‘name’, type: ‘url’, label: ‘Name’, urlFormatter: (user) => `/users/${user.id}`} ], rowActions: [ {icon: <DeleteIcon />, label: ‘Delete’, confirm: true }, {icon: <EditIcon />, label: ‘Edit’, action: (row) => { dialogService.open(UserEditDialog, {id: row.id}) }], JavaScript fwdays’24
  • 49. Grid builder function UsersGrid() { const schema = {...} return <GridBulder schema={schema} /> } JavaScript fwdays’24
  • 50. Page builder { title: ‘users’, layout: {component: MainLayout, props: {selected: ‘users’} }, gridSchema: {...}, } JavaScript fwdays’24
  • 51. Builders pros ● You have consistent behaviour across your UI ● Increases development speed a lot ● Can be iteratively updated each time you have a new requirement ● Easier to design ● Minimum extra time for development as the features should be done in any case JavaScript fwdays’24
  • 52. Is technical debt a bad thing? JavaScript fwdays’24
  • 53. Some thoughts on technical debt ● Doing things the quick and dirty way sets us up with a “technical debt”, which is similar to a financial debt. ● Another metaphor is “Pollution”. Pollutants gradually affect people and as time passes by, makes it exponentially harder and costly to fix it. ● You can't cook food without dirtying the dishes. Clean the kitchen after cooking ● You introduce technical debt even if all you do is just write similar code. JavaScript fwdays’24
  • 54. Some thoughts on patterns and best practices Pattern is just a common solution (not a secret solution) which works for a common problem. Ask yourself why such pattern or best practice does exist and be ready to not follow it if this “why” is not related to your case. JavaScript fwdays’24
  • 55. Chat example Let’s design together JavaScript fwdays’24