summaryrefslogtreecommitdiffstats
path: root/docs/requirements.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/requirements.md')
-rw-r--r--docs/requirements.md85
1 files changed, 85 insertions, 0 deletions
diff --git a/docs/requirements.md b/docs/requirements.md
new file mode 100644
index 00000000..1b1f5f24
--- /dev/null
+++ b/docs/requirements.md
@@ -0,0 +1,85 @@
1# Personas
2Note: This is a draft only
3
4## Roadwarrior
5* Fires up Kontact quickly to see what's up next (it's not constantly open)
6* Has to deal with bad/intermitted network connection
7* Relies on offline capabilities to access content
8* Uses various mobile devices
9
10## Average Desktop User
11* Relies on notifications to immediately see when he's contacted.
12* Requires a simple and efficient UI
13* Doesn't customize a lot
14* Has constant internet access
15* Works 9 to 5, doesn't care outside of business hours
16
17## Power Desktop User
18* Inherits Average Desktop User Requirements
19* Regularly checks email on the go (mobile)
20* Regularly checks calendar on the go (mobile)
21* Creates events on the go (mobile)
22
23# Kontact Inventory
24We need to go through the current codebase, assess what features are available, how the implementation looks and where it is, and to what extent the code is reusable.
25This will help us in figuring out the useful feature set, and will allow us to reuse the lessons learned that are embedded in the codebase.
26
27This inventory is currently hosted in an ikiwiki (ikiwiki.info) git repository(kde:scratch/aseigo/KontactCodebaseInventory.git)
28
29# Target platforms
30The codebase is supposed to be portable across a range of platforms.
31Initially we'll work on a reasonably recent linux distribution though.
32
33The aimed for minimum bar is:
34
35Linux:
36
37* Fedora 22
38* Ubuntu 12.04
39* Centos/RHEL 7
40
41Windows:
42
43* 7sp1
44
45OS X:
46
47* ?
48
49Android:
50
51* 5.0
52
53# Dependencies
54Since the codebase needs to be portable across various platforms old and new, dependencies should be managed that they are as little and as low as possible. While we don't want to reinvent the wheel constantly or work with ancient technology, each additional dependency or dependency bump needs to be justified and we need to evaluate wether that results in a problem with any of the target platforms. This evaluation of course includes transitive dependencies.
55
56Currently available dependencies:
57
58* GCC 4.6.3 / MSVC 2013
59* Qt 5.2
60
61# Codebase
62
63## Requirements
64* Each module has at least rudimentary tests that can then be extended
65 * Tests need to be deterministic, no random timeouts to check if something already happened, only `QTRY_VERIFY` and alike is allowed.
66* Clear layering. No depending on akonadi from everywhere.
67* Each module comes with a clear set of justified dependencies.
68* Commented code is only allowed in conjunction with a task in phabricator. No dead/commented code.
69* Each module requires a clear interface that allows the module internals to be replaced eventually.
70* UI modules need to be separated from non-UI parts. All UI parts need to be eventually replacable by QML equivalents.
71* No dialogs in non-UI parts.
72* New features are only added after having been selected from the roadmap for a future release
73* An accounts based configuration for everything
74* No non-persistant data in config files (collection ids...)
75
76* No KParts
77* No KXMLGui
78
79## Guidelines
80* Singletons that hold a modifyable state should be avoided.
81* Where standards are available we strive to follow those, and deviations from the standard are avoided as much as possible. Repurposing of standard elements should be avoided altogether.
82* Fallbacks (i.e. for configs ), should be applied in a single place only, and should be avoided wherever possible.
83* Libraries need to be purpose built and with clear responsibilities. No artificial boundaries that don't help something.
84* Modal dialogs should be avoided.
85