📜 ⬆️ ⬇️

Time management without strict schedules, experience in developing a mobile application

Time management, control, efficiency increase. Subject hackneyed, but I dare to offer another solution.


I couldn’t find a universal method of managing my time, which would suit everyone. As a rule, everyone chooses for themselves practices that are better suited to him. And this is connected not only with the peculiarities of character, but also with the peculiarities of the work.

I’ve got it like this: I’ve got ready, set up, got to work, and here - “the seal will call, then the deer”. At the end of the day there is generally a feeling that it is not clear what he was doing and what was the result.
')
Once an idea arose: “It would be great if someone called you and you are in a chess game pressed the button and stopped the work time, went back to work - pressed another button. As a result, you will get how much you have worked and how much you have rested. ” I called this approach chess time management, or abbreviated ChessTM.

It is not difficult to guess that the idea immediately scaled to the idea of ​​having a button on each task during the day. And then it all transformed into the concept of time management.

Concept


Time cannot be stopped. We always spend our time. And if we are doing something with one, then obviously it’s impossible to do something else at the same time with constant efficiency. At any time there is any activity - work on any task, playing sports, walking, exercise, eating, sleeping, etc.

Postulate number 1


To control the need to control the flow of time. To manage time you need to be able to control it. Principle - at the touch of a button (literally, not metaphorically) we select the current activity and the calculation of the time for the previous activity automatically stops and begins to count for the current one.

Postulate number 2


To manage you need planning. To manage time you need to be able to plan it. At any point in time we have a common pool of tasks and some pressing affairs. Working on a task or pressing affairs, we perform activities. Planning is that we assume what kind of activity we will be engaged in. The traditional understanding of the plan involves a fixed sequence of actions. It is often very difficult to observe a fixed sequence, sometimes for objective, and sometimes not very reasons. Deviation from the plan makes you nervous and reduces work efficiency. Rest is perceived as idleness, there is a feeling of guilt, reduced work efficiency and reduced satisfaction. To avoid the problems described, we will plan not a sequence of different kinds of activities, but the time allotted for activities during the day.
You can plan in minutes. That is, the planning process looks like this - we choose the tasks for the day from the general pool, and set the planned time for them, which we are going to spend on them.

Postulate number 3


Managed time means that the plan fits in with reality. Of course in the course of the day something may change. And maybe it will turn out that the plan disagrees with reality. Let the time planned for the activity Tp (time planed), the time actually spent on the activity Tr (time real), the difference between these times be called the coefficient of divergence Td (time delta). We will consider the quality of planning Qp (quality of planning) as the percentage of the sum of all the coefficients of divergence to the sum of the total planned time, which is subtracted from the hundred.

Qp=100% frac(Td1+Td2+ ldots+Tdi+ ldots+Tdn)(Tp1+Tp2+ ldots+Tpi+ ldots+Tpn)100%

that is, it turns out that with zero divergence coefficients, the planning quality will be 100%.

Android app


This article would not have appeared if I had not decided to implement a tool for this concept. I want to share this experience.

So.

Implemented ChessTM application.

Realization in the evenings and weekends in their free time. I work as a release manager and work with android development is in no way connected.

Functions:

  1. Creating a task pool
  2. Planning time for daily tasks
  3. Carry forward plan of the previous day
  4. Simple task switching
  5. Statistics

    • total elapsed time in relation to the total plan, for an arbitrary period by life sectors
    • report on tasks, how much is planned for each task and how much is actually spent
    • statistics on switching between tasks and on the coefficient of quality planning for the period
  6. Distribution of tasks by life sectors (work, family, friends, etc.) and tags

The main idea was to make such mechanics of interaction with the application to do as little as possible actions. To make everything easy and simple - “with one click”.

It is implemented as follows - there is one screen and three tabs between which you can navigate the saip:



Further, I would like to focus on the moments of the development itself. I hope my experience will be useful to novice developers, and the gurus may suggest that in the process of organizing the development can be improved.

Development infrastructure


Development wanted to do right away. So that it was something long-playing, not pampered and quit. Therefore, I wanted to organize a holistic infrastructure, including:


IDE


AndroidStudio, although someone may argue, but in my opinion with all the wealth of choice, there is no other alternative. There are a bunch of guidelines how to install, how to start, how to register a developer, etc. In my opinion, everything is quite simple, no special advice, just take and do almost according to the instructions.

Code storage


Git was selected as the code storage system.

The selection criteria are simple - a popular modern system, has a huge community of developers, a lot of resources with good documentation. As you can see, the criteria are not entirely technical, but when you are a novice developer, the community and the many answers to stackoverflow is a big fat plus.

Bitbucket was selected as the remote repository:


Task tracker


That is, the choice of bitbucket also gives the presence of a task tracker. At first glance it may seem that when you write an application yourself, the task tracker is not needed, but it’s wrong to think so. Task tracker organizes. Lets make plans. And if someone else connects to the project, it will not be necessary to search for anything, but when co-developing without a tracker, there is no way. Yes, the tracker in bitbucket is not perfect, but it closes the main issues as a first approximation.

Documenting


For documentation, I decided to use readthedocs.io:


Unfortunately now the documentation is not quite true. But at one time her writing has brought great benefits. Therefore, I highly recommend writing documentation to all those who are starting their own project - this brings thoughts in order and clarifies the project’s vision.

Testing


Testing is a huge topic and you can find a lot of materials on this.

I have a model level in the application where all the mathematics and calculations are performed.
Therefore, I decided to focus on testing this particular software module.

For this, I use JUnit4 . Tests run on the device.

Tests are unit tests of the main class of the model.

A test dataset is created and, accordingly, all functions of the model class with a previously known result are called.

From experience I can say the following:


Architecture and Implementation


The essence of this section is to tell you what to learn for a beginner in order to be able to implement functions like in this application.

At the very beginning of the way, the main problem was that it was not clear where to start and in which direction to think. How to do and how wrong.

For beginners, I recommend starting with a book. The book is good because the information in it is systematized, and it’s much easier to start.

Personally, I started with “Programming for Android. For professionals ”B. Hardy, B. Phillips. In general, I can recommend. Maybe now it is outdated in some places, but it is quite possible to begin.

I can also recommend listening to various podcasts on the topic of programming for android. Of course, not everything is clear in them, but one can catch the tendencies and understand which way to go. In particular, I occasionally listen to androiddev on apptractor .

As for the architecture itself, I tried to implement an approach in which the internal logic is separated from the display as much as possible. The fact is that at the initial stage, not everything has been thoroughly thought out and you need to be able to change the “mathematics” (the logic of the work) without rewriting the entire code.

For example, in my application, the main entity is “activity” in terms of task / activity. And the whole logic of work is manipulation of activities: start an activity, end an activity, set activity parameters, calculate statistics of time intervals, etc. Here I also took out this logic

in a separate class structure


The task list is contained within the ActionsManager class and all access to them is provided through the functions of this class. That is, everywhere in the application, all manipulations with tasks are performed through the ActionsManager class.

The database operation object is initialized in the application object. Everyone else takes an object from here, instead of creating a new one each time.

Here I can give such advice - carry the logic into separate classes. Read about the design patterns - no need to invent a bicycle, where there is already a solution.

GUI is based on ActionBarDrawerToggle. At first, ActionBarSherlock was used, it certainly is not bad for everyone, but then I had problems with compatibility with other components and I switched to standard Google components (menus, tabs, lists with dynamic data loading, etc.).

In the process of consciousness of the application, in addition to the standard android components, were used:


Monetization



PS:
Lastly, the message to all beginners, or those who want to start - do not be afraid of difficulties, do not be afraid, gradually everything will work out step by step!

Source: https://habr.com/ru/post/429490/


All Articles