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

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
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
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
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
 
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
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 

Recently uploaded (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
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...
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
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
 
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
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.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