SlideShare ist ein Scribd-Unternehmen logo
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

Weitere ähnliche Inhalte

Ähnlich wie 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 setup
Skybrud.dk
 
50500113 spiral-model
50500113 spiral-model50500113 spiral-model
50500113 spiral-model
asidharath
 
Functional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A PirateFunctional requirements: Thinking Like A Pirate
Functional requirements: Thinking Like A Pirate
Amye 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 Want
Rob Bogue
 
Emperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakkEmperors new clothes_digitalbarn_output_snakk
Emperors new clothes_digitalbarn_output_snakk
kevinjohngallagher
 
Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012Emperors new clothes - digitalbarn2012
Emperors new clothes - digitalbarn2012
kevinjohngallagher
 
How to Outsource Development Work
How to Outsource Development WorkHow to Outsource Development Work
How to Outsource Development Work
Drew Gorham
 
A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013A New Toolbox: Artifact Providence 2013
A New Toolbox: Artifact Providence 2013
Kevin 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 timeframe
Tiffany 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 II
Nathan Mellor
 
Requirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint DevelopersRequirements Gathering for SharePoint Developers
Requirements Gathering for SharePoint Developers
Rob Bogue
 
Whats my MVP?
Whats my MVP?Whats my MVP?
Whats my MVP?
Ardita Karaj
 
Prototyping to the North Star
Prototyping to the North StarPrototyping to the North Star
Prototyping to the North Star
UXDXConf
 
Emperors new clothes_jab
Emperors new clothes_jabEmperors new clothes_jab
Emperors new clothes_jab
kevinjohngallagher
 
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
Richard Harrington
 
Mike long-portfolio-presentation
Mike long-portfolio-presentationMike long-portfolio-presentation
Mike long-portfolio-presentation
Mike 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 Wolfe
DevOpsDays 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 Presentation
Brent W Peterson
 

Ähnlich wie 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
 

Mehr von roskakori

Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutter
roskakori
 
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
roskakori
 
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
roskakori
 
Startmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU GrazStartmeeting Interessengruppe NLP NLU Graz
Startmeeting Interessengruppe NLP NLU Graz
roskakori
 
Helpful logging with python
Helpful logging with pythonHelpful logging with python
Helpful logging with python
roskakori
 
Helpful logging with Java
Helpful logging with JavaHelpful logging with Java
Helpful logging with Java
roskakori
 
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
roskakori
 
Analyzing natural language feedback using python
Analyzing natural language feedback using pythonAnalyzing natural language feedback using python
Analyzing natural language feedback using python
roskakori
 
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
roskakori
 
Migration to Python 3 in Finance
Migration to Python 3 in FinanceMigration to Python 3 in Finance
Migration to Python 3 in Finance
roskakori
 
Introduction to pygments
Introduction to pygmentsIntroduction to pygments
Introduction to pygments
roskakori
 
Lösungsorientierte Fehlerbehandlung
Lösungsorientierte FehlerbehandlungLösungsorientierte Fehlerbehandlung
Lösungsorientierte Fehlerbehandlung
roskakori
 
XML namespaces and XPath with Python
XML namespaces and XPath with PythonXML namespaces and XPath with Python
XML namespaces and XPath with Python
roskakori
 
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
roskakori
 
Introduction to trader bots with Python
Introduction to trader bots with PythonIntroduction to trader bots with Python
Introduction to trader bots with Python
roskakori
 
Open source projects with python
Open source projects with pythonOpen source projects with python
Open source projects with python
roskakori
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
roskakori
 
Kanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-AnforderungenKanban zur Abwicklung von Reporting-Anforderungen
Kanban zur Abwicklung von Reporting-Anforderungen
roskakori
 

Mehr von 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
 

Kürzlich hochgeladen

Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 

Kürzlich hochgeladen (20)

Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 

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