SlideShare a Scribd company logo
1 of 72
Download to read offline
Thomas Aglassinger 2023-07-25
Expanding skill sets - Broaden
your perspective on design
pyGRAZ meets UX Graz
Goals
• Bringing developers and UX folks
together
• Creating a broader view of what
design can mean for software
application development
• Mix of talk and open discussion
Picture by KawaiiArt1980: https://www.pexels.com/de-de/foto/jungen-und-madchen-sitzen-auf-bank-spielzeug-1767434/
Agenda
• About design
• Example application
• Problem description
• Early design phase
• Data model rework
• Low e
ff
ort UI
• "minimum viable everything"
• Continuous discussion
• What might be applicable in your situation?
• What would you have done di
ff
erently in my situation?
• What can we learn from each other?
Not-Agenda
• Product presentation
• Discussion of the solution of the
problem space
• Success story → still going on
About me
Thomas Aglassinger
• "Software developer" in a general sense
• I enjoy coding
• I also look past the plain coding
• 20+ years IT industry experience in various sectors
and companies
• Sole proprietor since April 2023
• Developing my own product
• Casual freelancer: https://aglassinger.at/
• Social links
• Homepage: https://roskakori.at/
• LinkedIn: https://www.linkedin.com/in/
thomas-aglassinger/
• GitHub: https://github.com/roskakori
• Mastodon: https://graz.social/@roskakori
Developers and designers
What is design?
Di
ff
erent perspectives
• Developers: Data model, business logic,
algorithms, ...
Photo by Christina Morillo: https://www.pexels.com/de-de/foto/frauenprogrammierung-auf-einem-notizbuch-1181359/
What is design?
Di
ff
erent perspectives
• Developers: Data model, business logic,
algorithms, ...
• UX folks: touch points, channels, dialogs,
work
fl
ows, ...
Picture by Alvaro Reyes https://unsplash.com/de/fotos/qWwpHwip31M
What is design?
Di
ff
erent perspectives
• Developers: Data model, business logic,
algorithms, ...
• UX folks: touch points, channels, dialogs,
work
fl
ows, ...
• Wikipedia: "A design is a concept of either an
object, a process, or a system that is speci
fi
c and,
in most cases, detailed. Design refers to
something that is or has been intentionally created
by a thinking agent, though it is sometimes used
to refer to the nature of something."
Photo by cottonbro studio: https://www.pexels.com/de-de/foto/mann-der-schmeckt-was-er-kocht-3338536/
The problem: Project estimation
The problem
A potential customer has a contract and opens call for bids
Estimate effort 🤔
The problem
A potential customer has a contract and opens call for bids
Estimate effort 🤔 Submit offer 😨
The problem
A potential customer has a contract and opens call for bids
Estimate effort 🤔 Submit offer 😨
Too high → no contract 😭
The problem
A potential customer has a contract and opens call for bids
Estimate effort 🤔 Submit offer 😨
Too high → no contract 😭
Too low → contract but no pro
fi
t 😔
The problem
A potential customer has a contract and opens call for bids
Estimate effort 🤔 Submit offer 😨
Too high → no contract 😭
Just right → contract with pro
fi
t 🎉
Too low → contract but no pro
fi
t 😔
What to do about it?
Improve your estimations!
What to do about it?
Improve your estimations!
What to do about it?
Improve your estimations!
What to do about it?
Improve your estimations!
What to do about it?
Improve your estimations!
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
Get task and
time tracker💡
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
Get task and
time tracker💡
One combined solution
to compare and
rule them all 👊
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
Get task and
time tracker💡
One combined solution
to compare and
rule them all 👊
Marketing: 😡
"WTF Wiki syntax?"
Developer: 😡
"WTF no repo link?"
Accounting: 😡
"WTF no import?"
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
Get task and
time tracker💡
One combined solution
to compare and
rule them all 👊
Develop and maintain
complex in-house application
for comparison (€10-100k) 🤑
Marketing: 😡
"WTF Wiki syntax?"
Developer: 😡
"WTF no repo link?"
Accounting: 😡
"WTF no import?"
The problem
How to track and compare e
ff
ort?
How to track and
compare effort? 🤔
Get task and
time tracker💡
One combined solution
to compare and
rule them all 👊
Develop and maintain
complex in-house application
for comparison (€10-100k) 🤑
Develop and maintain crappy scripts
and macros for comparison 🤪
Marketing: 😡
"WTF Wiki syntax?"
Developer: 😡
"WTF no repo link?"
Accounting: 😡
"WTF no import?"
The problem
Sales vs developer estimation
Sales estimates
100K 💼
The problem
Sales vs developer estimation
Sales estimates
100K 💼
Customer takes
offer 🎉
The problem
Sales vs developer estimation
Sales estimates
100K 💼
Customer takes
offer 🎉
CEO: "Sales rock!" 🏅
The problem
Sales vs developer estimation
Sales estimates
100K 💼
Customer takes
offer 🎉
Developers
estimate 200K 🛠
CEO: "Sales rock!" 🏅
The problem
Sales vs developer estimation
Sales estimates
100K 💼
Customer takes
offer 🎉
Developers
estimate 200K 🛠
CEO: "Sales rock!" 🏅
Projects costs
180K💰
The problem
Sales vs developer estimation
Sales estimates
100K 💼
Customer takes
offer 🎉
Developers
estimate 200K 🛠
CEO: "Sales rock!" 🏅
Projects costs
180K💰
CEO: "Devs suck!
Should have been
100K!" 💩
The problem
Agile development: "Embrace change!"
Developers
estimate 200K 🛠
The problem
Agile development: "Embrace change!"
Developers
estimate 200K 🛠
Customer takes
offer 🎉
The problem
Agile development: "Embrace change!"
Developers
estimate 200K 🛠
Customer takes
offer 🎉
Features get added
and changed 🌪
The problem
Agile development: "Embrace change!"
Developers
estimate 200K 🛠
Customer takes
offer 🎉
Project costs
300K💰
Features get added
and changed 🌪
The problem
Agile development: "Embrace change!"
Developers
estimate 200K 🛠
Customer takes
offer 🎉
Project costs
300K💰
Features get added
and changed 🌪
Customer:
"WTF budget?"😱
Early design process
Early design phase
Pre-evaluation
• Leave old company due to con
fl
ict of values
• Decide to become self employed for a
change
• A couple of product ideas in mind
• Roughly evaluate them by talking to people
in close vicinity (friends, relatives, former
colleagues, gamer mates, ...)
• Pick the one that triggers people to tell their
own stories and has most emotional
reactions → project estimation
Picture by Miriam Espacio: https://www.pexels.com/de-de/foto/person-die-in-der-nahe-von-baumen-steht-3354135/
Pitch phase
Con
fi
rmation
• Compile a set of slides that pitches the entire
thing somewhat coherently.
• Run it on a couple of acquaintances.
• Integrate feedback.
• De
fi
ne target audience and possible revenue
streams.
• Re
fi
ne and con
fi
rm features for minimum
viable product.
Execution phase
Let's go!
• Find a couple of people to periodically interact with.
• Draw a few sketches.
• Start coding.
• (Out of scope: Found a sole proprietor company
(German: Einzelpersonenunternehmen)
• Pitch and recruit initial test customers.
• ...This is the story so far
Picture from Kelly : https://www.pexels.com/de-de/foto/foto-des-mannes-der-steht-wahrend-er-spitzhacke-halt-2382665/
Data model rework
Minimum viable product
Connect task, estimation and actual effort
Minimum viable product
Connect task, estimation and actual effort
Initial data model
Task
Work
Relationship between them
Initial data model
• Worked reasonably well for GitHub and clocko:do
• Matches work to task using the task code in the description
• Turned out to be ugly for GitLab
• Tracks both tasks and work
• Matches work to task using internal references
Analysis of variants
Design of API transfer layer structure
Improved data model
Task
Work
Relationship between them
About data model changes
Data model changes
E
ff
ort depends on kind
Simple
• Add
fi
eld
• Rename
fi
eld
• Changed
fi
eld parameters like length or
valid range
• Remove unused
fi
eld
• Add default to
fi
eld
• ...
Complex
• Split
fi
elds
• Add new
fi
eld that must hold a
meaningful value from the start
• Major moving and renaming of
entire model hierarchies
• Change relations and dependencies
Visualization of change impact
Gource movie about the source code repository
• Link: https://youtu.be/kmBJf_dQodQ
• Interesting points in time line:
• 0:00 Quickly establish basic structures
• 1:00 Start of a period of iterative improvement
• 4:20 Start of major data model rework
• 5:20 Continue iterative improvement with reword data model
Visualization of change impact
Comparison of initial and reworked data model
Visualization of change impact
Do it yourself
• Gource, a software version control vizualization tool: https://gource.io/
• Command used (change --title and output
fi
le at end, if needed):
gource --auto-skip-seconds 1 --
fi
le-idle-time 0 --hide dirnames,
fi
lenames,usernames --seconds-per-day 1
--title "Siisurit" -1280x720 --output-ppm-stream - .| ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -vcodec
libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 /tmp/gource-movie.mp4
Low effort CRUD* UI
(with Python and Django)
* CRUD = create, read, update, delete
From data model to user interface
Example: Project
• Organization: reference
• Code: text
• Name: text
• "Demo Inc."
• 23-0074-s
• "Cooking App"
From data model to user interface
Example: Project
• Organization: reference
• Code: text
• Name: text
• created_at: date and time
• modi
fi
ed_at: date and time
Code for data model
class Project(SiiModel):
organization: Organization = models.ForeignKey(
Organization,
on_delete=models.PROTECT,
related_name="project",
verbose_name=_("organization")
)
code: str = models.CharField(
max_length=MAX_CODE_LENGTH,
validators=[validate_code],
verbose_name=_("code"),
)
created_at: datetime = models.DateTimeField(
auto_now_add=True, verbose_name=_("created at")
)
modi
fi
ed_at: datetime = models.DateTimeField(
auto_now=True, verbose_name=_("modi
fi
ed at")
)
name: str = models.CharField(
max_length=MAX_NAME_LENGTH,
verbose_name=_("name"),
)
Code for data model and user interface
class Project(models.Model):
organization: Organization = models.ForeignKey(
Organization,
on_delete=models.PROTECT,
related_name="project",
verbose_name=_("organization")
)
code: str = models.CharField(
max_length=MAX_CODE_LENGTH,
validators=[validate_code],
verbose_name=_("code"),
)
created_at: datetime = models.DateTimeField(
auto_now_add=True, verbose_name=_("created at")
)
modi
fi
ed_at: datetime = models.DateTimeField(
auto_now=True, verbose_name=_("modi
fi
ed at")
)
name: str = models.CharField(
max_length=MAX_NAME_LENGTH,
verbose_name=_("name"),
)
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
fi
eldsets = (
(
None,
{
"
fi
elds": (
"organization",
"code",
"name",
)
},
),
(_("administration"), {"
fi
elds": ("created_at", "modi
fi
ed_at")}),
)
readonly_
fi
elds = ("created_at", "modi
fi
ed_at")
)
Code for data model and user interface
Summary
class Project(models.Model):
organization: Organization = models.ForeignKey(
Organization,
on_delete=models.PROTECT,
related_name="project",
verbose_name=_("organization")
)
code: str = models.CharField(
max_length=MAX_CODE_LENGTH,
validators=[validate_code],
verbose_name=_("code"),
)
created_at: datetime = models.DateTimeField(
auto_now_add=True, verbose_name=_("created at")
)
modi
fi
ed_at: datetime = models.DateTimeField(
auto_now=True, verbose_name=_("modi
fi
ed at")
)
name: str = models.CharField(
max_length=MAX_NAME_LENGTH,
verbose_name=_("name"),
)
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
fi
eldsets = (
(
None,
{
"
fi
elds": (
"organization",
"code",
"name",
)
},
),
(_("administration"), {"
fi
elds": ("created_at",
"modi
fi
ed_at")}),
)
readonly_
fi
elds = ("created_at", "modi
fi
ed_at")
)
• Organization: reference
• Code: text
• Name: text
• created_at: date and time
• modi
fi
ed_at: date and time
Low effort UI for nested data
Edit project and everything related
The problem
• Project model itself is simple
• But many things related to it:
• Task trackers
• Work trackers
• Users
• Estimation
• ....
• Encompasses large parts of the entire data model
• Complexity will grow as features are added
Photo by Linh Ha https://unsplash.com/de/fotos/KN8W0Q8H3gI
Edit project and everything related
Solution 1:
• Spend n+1 person days with Figma et al.
• Spend m+1 person days coding away
• Wait for requirements to change
• Repeat
Edit project and everything related
Solution 1:
• Spend n+1 person days with Figma et al.
• Spend m+1 person days coding away
• Wait for requirements to change
• Repeat
Edit project and everything related
Solution 1:
• Spend n+1 person days with Figma et al.
• Spend m+1 person days coding away
• Wait for requirements to change
• Repeat
Edit project and everything related
Solution 2
• Con
fi
gure project in YAML
fi
le
• When changed, upload via form
Edit project and everything related
Solution 2
• Con
fi
gure project in YAML
fi
le
• When changed, upload via form
organization:
name: Demo Inc.
timezone: Europe/Vienna
projects:
- code: siisurit
name: Siisurit
trackers:
- name: siisurit-demo
api_kind: gitlab
api_location: https://gitlab.com/xxxx/siisurit-demo
api_token: ...
Edit project and everything related
Solution 2
• Con
fi
gure project in YAML
fi
le
• When changed, upload via form
Summary
Summary
• Example of explorative design and major data model rework
• Cheap vs expensive data model changes
• Python+Django keep you nimble
Conclusion
• Design user experience early
• Design user interface late. Meanwhile:
• Use generated user interfaces for simple interaction
• Use descriptive text
fi
les and uploads for complex structures and
relationships
• Helpful: Developers and designers that understand each others needs
Discussion
• Homepage: https://roskakori.at/
• Casual freelancer: https://aglassinger.at/
• LinkedIn: https://www.linkedin.com/in/
thomas-aglassinger/
• GitHub: https://github.com/roskakori
• Mastodon: https://graz.social/@roskakori

More Related Content

Similar to Expanding skill sets - Broaden your perspective on design

From customer need to Umbraco setup
From customer need to Umbraco setupFrom customer need to Umbraco setup
From customer need to Umbraco setupSkybrud.dk
 
50500113 spiral-model
50500113 spiral-model50500113 spiral-model
50500113 spiral-modelasidharath
 
Functional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateFunctional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateAmye Scavarda
 
Radical Requirements: Tips For Delivering What They Want
Radical Requirements: Tips For Delivering What They WantRadical Requirements: Tips For Delivering What They Want
Radical Requirements: Tips For Delivering What They WantRob Bogue
 
Emperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakkEmperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakkkevinjohngallagher
 
Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012kevinjohngallagher
 
How to Outsource Development Work
How to Outsource Development WorkHow to Outsource Development Work
How to Outsource Development WorkDrew Gorham
 
A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013Kevin Sharon
 
Optimising your design process for a short timeframe
Optimising your design process for a short timeframeOptimising your design process for a short timeframe
Optimising your design process for a short timeframeTiffany Teng
 
Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Fwdays
 
Driving App Success Part II
Driving App Success Part IIDriving App Success Part II
Driving App Success Part IINathan Mellor
 
Requirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint DevelopersRequirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint DevelopersRob Bogue
 
Prototyping to the North Star
Prototyping to the North StarPrototyping to the North Star
Prototyping to the North StarUXDXConf
 
High Quality, Low Budget: How to not go broke while making great content
High Quality,  Low Budget: How to not go broke while making great contentHigh Quality,  Low Budget: How to not go broke while making great content
High Quality, Low Budget: How to not go broke while making great contentRichard Harrington
 
Mike long-portfolio-presentation
Mike long-portfolio-presentationMike long-portfolio-presentation
Mike long-portfolio-presentationMike Long
 
Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton WolfeMaking Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton WolfeDevOpsDays Baltimore
 
Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton Wolfe Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton Wolfe DevOpsDays Baltimore
 
Magento Live 2014 Customer Expectation Presentation
Magento Live 2014 Customer Expectation PresentationMagento Live 2014 Customer Expectation Presentation
Magento Live 2014 Customer Expectation PresentationBrent W Peterson
 

Similar to Expanding skill sets - Broaden your perspective on design (20)

From customer need to Umbraco setup
From customer need to Umbraco setupFrom customer need to Umbraco setup
From customer need to Umbraco setup
 
50500113 spiral-model
50500113 spiral-model50500113 spiral-model
50500113 spiral-model
 
Functional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateFunctional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A Pirate
 
Radical Requirements: Tips For Delivering What They Want
Radical Requirements: Tips For Delivering What They WantRadical Requirements: Tips For Delivering What They Want
Radical Requirements: Tips For Delivering What They Want
 
Emperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakkEmperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakk
 
Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012
 
How to Outsource Development Work
How to Outsource Development WorkHow to Outsource Development Work
How to Outsource Development Work
 
A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013
 
Optimising your design process for a short timeframe
Optimising your design process for a short timeframeOptimising your design process for a short timeframe
Optimising your design process for a short timeframe
 
Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"Никита Галкин "Technical backlog: инструкция к применению"
Никита Галкин "Technical backlog: инструкция к применению"
 
Driving App Success Part II
Driving App Success Part IIDriving App Success Part II
Driving App Success Part II
 
Requirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint DevelopersRequirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint Developers
 
Whats my MVP?
Whats my MVP?Whats my MVP?
Whats my MVP?
 
Prototyping to the North Star
Prototyping to the North StarPrototyping to the North Star
Prototyping to the North Star
 
Emperors new clothes_jab
Emperors new clothes_jabEmperors new clothes_jab
Emperors new clothes_jab
 
High Quality, Low Budget: How to not go broke while making great content
High Quality,  Low Budget: How to not go broke while making great contentHigh Quality,  Low Budget: How to not go broke while making great content
High Quality, Low Budget: How to not go broke while making great content
 
Mike long-portfolio-presentation
Mike long-portfolio-presentationMike long-portfolio-presentation
Mike long-portfolio-presentation
 
Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton WolfeMaking Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton Wolfe
 
Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton Wolfe Making Your Product Manager Productive by Clinton Wolfe
Making Your Product Manager Productive by Clinton Wolfe
 
Magento Live 2014 Customer Expectation Presentation
Magento Live 2014 Customer Expectation PresentationMagento Live 2014 Customer Expectation Presentation
Magento Live 2014 Customer Expectation Presentation
 

More from roskakori

Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutterroskakori
 
Multiple django applications on a single server with nginx
Multiple django applications on a single server with nginxMultiple django applications on a single server with nginx
Multiple django applications on a single server with nginxroskakori
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Djangoroskakori
 
Startmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU GrazStartmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU Grazroskakori
 
Helpful logging with python
Helpful logging with pythonHelpful logging with python
Helpful logging with pythonroskakori
 
Helpful logging with Java
Helpful logging with JavaHelpful logging with Java
Helpful logging with Javaroskakori
 
Einführung in Kommunikation und Konfliktmanagement für Software-Entwickler
Einführung in Kommunikation und Konfliktmanagement für Software-EntwicklerEinführung in Kommunikation und Konfliktmanagement für Software-Entwickler
Einführung in Kommunikation und Konfliktmanagement für Software-Entwicklerroskakori
 
Analyzing natural language feedback using python
Analyzing natural language feedback using pythonAnalyzing natural language feedback using python
Analyzing natural language feedback using pythonroskakori
 
Microsoft SQL Server with Linux and Docker
Microsoft SQL Server with Linux and DockerMicrosoft SQL Server with Linux and Docker
Microsoft SQL Server with Linux and Dockerroskakori
 
Migration to Python 3 in Finance
Migration to Python 3 in FinanceMigration to Python 3 in Finance
Migration to Python 3 in Financeroskakori
 
Introduction to pygments
Introduction to pygmentsIntroduction to pygments
Introduction to pygmentsroskakori
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlungroskakori
 
XML namespaces and XPath with Python
XML namespaces and XPath with PythonXML namespaces and XPath with Python
XML namespaces and XPath with Pythonroskakori
 
Erste-Hilfekasten für Unicode mit Python
Erste-Hilfekasten für Unicode mit PythonErste-Hilfekasten für Unicode mit Python
Erste-Hilfekasten für Unicode mit Pythonroskakori
 
Introduction to trader bots with Python
Introduction to trader bots with PythonIntroduction to trader bots with Python
Introduction to trader bots with Pythonroskakori
 
Open source projects with python
Open source projects with pythonOpen source projects with python
Open source projects with pythonroskakori
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
Kanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-AnforderungenKanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-Anforderungenroskakori
 

More from roskakori (18)

Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutter
 
Multiple django applications on a single server with nginx
Multiple django applications on a single server with nginxMultiple django applications on a single server with nginx
Multiple django applications on a single server with nginx
 
Helpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and DjangoHelpful pre commit hooks for Python and Django
Helpful pre commit hooks for Python and Django
 
Startmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU GrazStartmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU Graz
 
Helpful logging with python
Helpful logging with pythonHelpful logging with python
Helpful logging with python
 
Helpful logging with Java
Helpful logging with JavaHelpful logging with Java
Helpful logging with Java
 
Einführung in Kommunikation und Konfliktmanagement für Software-Entwickler
Einführung in Kommunikation und Konfliktmanagement für Software-EntwicklerEinführung in Kommunikation und Konfliktmanagement für Software-Entwickler
Einführung in Kommunikation und Konfliktmanagement für Software-Entwickler
 
Analyzing natural language feedback using python
Analyzing natural language feedback using pythonAnalyzing natural language feedback using python
Analyzing natural language feedback using python
 
Microsoft SQL Server with Linux and Docker
Microsoft SQL Server with Linux and DockerMicrosoft SQL Server with Linux and Docker
Microsoft SQL Server with Linux and Docker
 
Migration to Python 3 in Finance
Migration to Python 3 in FinanceMigration to Python 3 in Finance
Migration to Python 3 in Finance
 
Introduction to pygments
Introduction to pygmentsIntroduction to pygments
Introduction to pygments
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlung
 
XML namespaces and XPath with Python
XML namespaces and XPath with PythonXML namespaces and XPath with Python
XML namespaces and XPath with Python
 
Erste-Hilfekasten für Unicode mit Python
Erste-Hilfekasten für Unicode mit PythonErste-Hilfekasten für Unicode mit Python
Erste-Hilfekasten für Unicode mit Python
 
Introduction to trader bots with Python
Introduction to trader bots with PythonIntroduction to trader bots with Python
Introduction to trader bots with Python
 
Open source projects with python
Open source projects with pythonOpen source projects with python
Open source projects with python
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
Kanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-AnforderungenKanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-Anforderungen
 

Recently uploaded

My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 

Recently uploaded (20)

My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 

Expanding skill sets - Broaden your perspective on design

  • 1. Thomas Aglassinger 2023-07-25 Expanding skill sets - Broaden your perspective on design pyGRAZ meets UX Graz
  • 2. Goals • Bringing developers and UX folks together • Creating a broader view of what design can mean for software application development • Mix of talk and open discussion Picture by KawaiiArt1980: https://www.pexels.com/de-de/foto/jungen-und-madchen-sitzen-auf-bank-spielzeug-1767434/
  • 3. Agenda • About design • Example application • Problem description • Early design phase • Data model rework • Low e ff ort UI • "minimum viable everything" • Continuous discussion • What might be applicable in your situation? • What would you have done di ff erently in my situation? • What can we learn from each other?
  • 4. Not-Agenda • Product presentation • Discussion of the solution of the problem space • Success story → still going on
  • 5. About me Thomas Aglassinger • "Software developer" in a general sense • I enjoy coding • I also look past the plain coding • 20+ years IT industry experience in various sectors and companies • Sole proprietor since April 2023 • Developing my own product • Casual freelancer: https://aglassinger.at/ • Social links • Homepage: https://roskakori.at/ • LinkedIn: https://www.linkedin.com/in/ thomas-aglassinger/ • GitHub: https://github.com/roskakori • Mastodon: https://graz.social/@roskakori
  • 7. What is design? Di ff erent perspectives • Developers: Data model, business logic, algorithms, ... Photo by Christina Morillo: https://www.pexels.com/de-de/foto/frauenprogrammierung-auf-einem-notizbuch-1181359/
  • 8. What is design? Di ff erent perspectives • Developers: Data model, business logic, algorithms, ... • UX folks: touch points, channels, dialogs, work fl ows, ... Picture by Alvaro Reyes https://unsplash.com/de/fotos/qWwpHwip31M
  • 9. What is design? Di ff erent perspectives • Developers: Data model, business logic, algorithms, ... • UX folks: touch points, channels, dialogs, work fl ows, ... • Wikipedia: "A design is a concept of either an object, a process, or a system that is speci fi c and, in most cases, detailed. Design refers to something that is or has been intentionally created by a thinking agent, though it is sometimes used to refer to the nature of something." Photo by cottonbro studio: https://www.pexels.com/de-de/foto/mann-der-schmeckt-was-er-kocht-3338536/
  • 10. The problem: Project estimation
  • 11. The problem A potential customer has a contract and opens call for bids Estimate effort 🤔
  • 12. The problem A potential customer has a contract and opens call for bids Estimate effort 🤔 Submit offer 😨
  • 13. The problem A potential customer has a contract and opens call for bids Estimate effort 🤔 Submit offer 😨 Too high → no contract 😭
  • 14. The problem A potential customer has a contract and opens call for bids Estimate effort 🤔 Submit offer 😨 Too high → no contract 😭 Too low → contract but no pro fi t 😔
  • 15. The problem A potential customer has a contract and opens call for bids Estimate effort 🤔 Submit offer 😨 Too high → no contract 😭 Just right → contract with pro fi t 🎉 Too low → contract but no pro fi t 😔
  • 16. What to do about it? Improve your estimations!
  • 17. What to do about it? Improve your estimations!
  • 18. What to do about it? Improve your estimations!
  • 19. What to do about it? Improve your estimations!
  • 20. What to do about it? Improve your estimations!
  • 21. The problem How to track and compare e ff ort? How to track and compare effort? 🤔
  • 22. The problem How to track and compare e ff ort? How to track and compare effort? 🤔 Get task and time tracker💡
  • 23. The problem How to track and compare e ff ort? How to track and compare effort? 🤔 Get task and time tracker💡 One combined solution to compare and rule them all 👊
  • 24. The problem How to track and compare e ff ort? How to track and compare effort? 🤔 Get task and time tracker💡 One combined solution to compare and rule them all 👊 Marketing: 😡 "WTF Wiki syntax?" Developer: 😡 "WTF no repo link?" Accounting: 😡 "WTF no import?"
  • 25. The problem How to track and compare e ff ort? How to track and compare effort? 🤔 Get task and time tracker💡 One combined solution to compare and rule them all 👊 Develop and maintain complex in-house application for comparison (€10-100k) 🤑 Marketing: 😡 "WTF Wiki syntax?" Developer: 😡 "WTF no repo link?" Accounting: 😡 "WTF no import?"
  • 26. The problem How to track and compare e ff ort? How to track and compare effort? 🤔 Get task and time tracker💡 One combined solution to compare and rule them all 👊 Develop and maintain complex in-house application for comparison (€10-100k) 🤑 Develop and maintain crappy scripts and macros for comparison 🤪 Marketing: 😡 "WTF Wiki syntax?" Developer: 😡 "WTF no repo link?" Accounting: 😡 "WTF no import?"
  • 27. The problem Sales vs developer estimation Sales estimates 100K 💼
  • 28. The problem Sales vs developer estimation Sales estimates 100K 💼 Customer takes offer 🎉
  • 29. The problem Sales vs developer estimation Sales estimates 100K 💼 Customer takes offer 🎉 CEO: "Sales rock!" 🏅
  • 30. The problem Sales vs developer estimation Sales estimates 100K 💼 Customer takes offer 🎉 Developers estimate 200K 🛠 CEO: "Sales rock!" 🏅
  • 31. The problem Sales vs developer estimation Sales estimates 100K 💼 Customer takes offer 🎉 Developers estimate 200K 🛠 CEO: "Sales rock!" 🏅 Projects costs 180K💰
  • 32. The problem Sales vs developer estimation Sales estimates 100K 💼 Customer takes offer 🎉 Developers estimate 200K 🛠 CEO: "Sales rock!" 🏅 Projects costs 180K💰 CEO: "Devs suck! Should have been 100K!" 💩
  • 33. The problem Agile development: "Embrace change!" Developers estimate 200K 🛠
  • 34. The problem Agile development: "Embrace change!" Developers estimate 200K 🛠 Customer takes offer 🎉
  • 35. The problem Agile development: "Embrace change!" Developers estimate 200K 🛠 Customer takes offer 🎉 Features get added and changed 🌪
  • 36. The problem Agile development: "Embrace change!" Developers estimate 200K 🛠 Customer takes offer 🎉 Project costs 300K💰 Features get added and changed 🌪
  • 37. The problem Agile development: "Embrace change!" Developers estimate 200K 🛠 Customer takes offer 🎉 Project costs 300K💰 Features get added and changed 🌪 Customer: "WTF budget?"😱
  • 39. Early design phase Pre-evaluation • Leave old company due to con fl ict of values • Decide to become self employed for a change • A couple of product ideas in mind • Roughly evaluate them by talking to people in close vicinity (friends, relatives, former colleagues, gamer mates, ...) • Pick the one that triggers people to tell their own stories and has most emotional reactions → project estimation Picture by Miriam Espacio: https://www.pexels.com/de-de/foto/person-die-in-der-nahe-von-baumen-steht-3354135/
  • 40. Pitch phase Con fi rmation • Compile a set of slides that pitches the entire thing somewhat coherently. • Run it on a couple of acquaintances. • Integrate feedback. • De fi ne target audience and possible revenue streams. • Re fi ne and con fi rm features for minimum viable product.
  • 41. Execution phase Let's go! • Find a couple of people to periodically interact with. • Draw a few sketches. • Start coding. • (Out of scope: Found a sole proprietor company (German: Einzelpersonenunternehmen) • Pitch and recruit initial test customers. • ...This is the story so far Picture from Kelly : https://www.pexels.com/de-de/foto/foto-des-mannes-der-steht-wahrend-er-spitzhacke-halt-2382665/
  • 43. Minimum viable product Connect task, estimation and actual effort
  • 44. Minimum viable product Connect task, estimation and actual effort
  • 46. Initial data model • Worked reasonably well for GitHub and clocko:do • Matches work to task using the task code in the description • Turned out to be ugly for GitLab • Tracks both tasks and work • Matches work to task using internal references
  • 48. Design of API transfer layer structure
  • 50. About data model changes
  • 51. Data model changes E ff ort depends on kind Simple • Add fi eld • Rename fi eld • Changed fi eld parameters like length or valid range • Remove unused fi eld • Add default to fi eld • ... Complex • Split fi elds • Add new fi eld that must hold a meaningful value from the start • Major moving and renaming of entire model hierarchies • Change relations and dependencies
  • 52. Visualization of change impact Gource movie about the source code repository • Link: https://youtu.be/kmBJf_dQodQ • Interesting points in time line: • 0:00 Quickly establish basic structures • 1:00 Start of a period of iterative improvement • 4:20 Start of major data model rework • 5:20 Continue iterative improvement with reword data model
  • 53. Visualization of change impact Comparison of initial and reworked data model
  • 54. Visualization of change impact Do it yourself • Gource, a software version control vizualization tool: https://gource.io/ • Command used (change --title and output fi le at end, if needed): gource --auto-skip-seconds 1 -- fi le-idle-time 0 --hide dirnames, fi lenames,usernames --seconds-per-day 1 --title "Siisurit" -1280x720 --output-ppm-stream - .| ffmpeg -y -r 30 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 /tmp/gource-movie.mp4
  • 55. Low effort CRUD* UI (with Python and Django) * CRUD = create, read, update, delete
  • 56. From data model to user interface Example: Project • Organization: reference • Code: text • Name: text • "Demo Inc." • 23-0074-s • "Cooking App"
  • 57. From data model to user interface Example: Project • Organization: reference • Code: text • Name: text • created_at: date and time • modi fi ed_at: date and time
  • 58. Code for data model class Project(SiiModel): organization: Organization = models.ForeignKey( Organization, on_delete=models.PROTECT, related_name="project", verbose_name=_("organization") ) code: str = models.CharField( max_length=MAX_CODE_LENGTH, validators=[validate_code], verbose_name=_("code"), ) created_at: datetime = models.DateTimeField( auto_now_add=True, verbose_name=_("created at") ) modi fi ed_at: datetime = models.DateTimeField( auto_now=True, verbose_name=_("modi fi ed at") ) name: str = models.CharField( max_length=MAX_NAME_LENGTH, verbose_name=_("name"), )
  • 59. Code for data model and user interface class Project(models.Model): organization: Organization = models.ForeignKey( Organization, on_delete=models.PROTECT, related_name="project", verbose_name=_("organization") ) code: str = models.CharField( max_length=MAX_CODE_LENGTH, validators=[validate_code], verbose_name=_("code"), ) created_at: datetime = models.DateTimeField( auto_now_add=True, verbose_name=_("created at") ) modi fi ed_at: datetime = models.DateTimeField( auto_now=True, verbose_name=_("modi fi ed at") ) name: str = models.CharField( max_length=MAX_NAME_LENGTH, verbose_name=_("name"), ) @admin.register(Project) class ProjectAdmin(admin.ModelAdmin): fi eldsets = ( ( None, { " fi elds": ( "organization", "code", "name", ) }, ), (_("administration"), {" fi elds": ("created_at", "modi fi ed_at")}), ) readonly_ fi elds = ("created_at", "modi fi ed_at") )
  • 60. Code for data model and user interface Summary class Project(models.Model): organization: Organization = models.ForeignKey( Organization, on_delete=models.PROTECT, related_name="project", verbose_name=_("organization") ) code: str = models.CharField( max_length=MAX_CODE_LENGTH, validators=[validate_code], verbose_name=_("code"), ) created_at: datetime = models.DateTimeField( auto_now_add=True, verbose_name=_("created at") ) modi fi ed_at: datetime = models.DateTimeField( auto_now=True, verbose_name=_("modi fi ed at") ) name: str = models.CharField( max_length=MAX_NAME_LENGTH, verbose_name=_("name"), ) @admin.register(Project) class ProjectAdmin(admin.ModelAdmin): fi eldsets = ( ( None, { " fi elds": ( "organization", "code", "name", ) }, ), (_("administration"), {" fi elds": ("created_at", "modi fi ed_at")}), ) readonly_ fi elds = ("created_at", "modi fi ed_at") ) • Organization: reference • Code: text • Name: text • created_at: date and time • modi fi ed_at: date and time
  • 61. Low effort UI for nested data
  • 62. Edit project and everything related The problem • Project model itself is simple • But many things related to it: • Task trackers • Work trackers • Users • Estimation • .... • Encompasses large parts of the entire data model • Complexity will grow as features are added Photo by Linh Ha https://unsplash.com/de/fotos/KN8W0Q8H3gI
  • 63. Edit project and everything related Solution 1: • Spend n+1 person days with Figma et al. • Spend m+1 person days coding away • Wait for requirements to change • Repeat
  • 64. Edit project and everything related Solution 1: • Spend n+1 person days with Figma et al. • Spend m+1 person days coding away • Wait for requirements to change • Repeat
  • 65. Edit project and everything related Solution 1: • Spend n+1 person days with Figma et al. • Spend m+1 person days coding away • Wait for requirements to change • Repeat
  • 66. Edit project and everything related Solution 2 • Con fi gure project in YAML fi le • When changed, upload via form
  • 67. Edit project and everything related Solution 2 • Con fi gure project in YAML fi le • When changed, upload via form organization: name: Demo Inc. timezone: Europe/Vienna projects: - code: siisurit name: Siisurit trackers: - name: siisurit-demo api_kind: gitlab api_location: https://gitlab.com/xxxx/siisurit-demo api_token: ...
  • 68. Edit project and everything related Solution 2 • Con fi gure project in YAML fi le • When changed, upload via form
  • 70. Summary • Example of explorative design and major data model rework • Cheap vs expensive data model changes • Python+Django keep you nimble
  • 71. Conclusion • Design user experience early • Design user interface late. Meanwhile: • Use generated user interfaces for simple interaction • Use descriptive text fi les and uploads for complex structures and relationships • Helpful: Developers and designers that understand each others needs
  • 72. Discussion • Homepage: https://roskakori.at/ • Casual freelancer: https://aglassinger.at/ • LinkedIn: https://www.linkedin.com/in/ thomas-aglassinger/ • GitHub: https://github.com/roskakori • Mastodon: https://graz.social/@roskakori