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 any universal method for 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 then - “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 gamepressed the button and stopped the work time, went back to work - pressed another button. As a result, you will get how much you worked and how much you 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 matters, 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,
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 it may 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 variance to the sum of the total planned time, which is subtracted from the hundred.

that is, it turns out that at zero divergence coefficients, the quality of planning 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 a 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:

  • task pool, where all current tasks are available;
  • day plan, where you set the time planned for the tasks;
  • control, where we switch from task to task and count time.


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 (Integrated Development Environment);
  • code storage repository;
  • task tracker;
  • documentation;
  • testing.

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 multitude of answers to stackoverflow is a big fat plus. Bitbucket

was selected as the remote repository :

  • free;
  • allows you to create private and open repositories;
  • allows you to create a team to work with different levels of access rights;
  • has its own simple task tracker.

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:

  • free system allows you to publish documentation in Sphinx format ;
  • integrates with bitbucket (and many others), that is, you can store the source files of the documentation in bitbucket and it will automatically be built at every commit, you can say continuous integration for documentation - this is extremely convenient;

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 puts 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 subject.

My application has a model level 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 data set is created and, accordingly, all functions of the model class with a previously known result are called.

From experience I can say the following:

  • tests are very helpful in catching regression;
  • Sometimes design / architecture errors are detected, when you start using functions yourself, the head starts to work a little differently when you use a function, even if you wrote it yourself;
  • keep the tests up to date, I now regret very much that I didn’t do this, because the volume of the application is already quite large, and not all details can be kept in memory, and some regression that can be detected at the unit test stage unfortunately falls into production. So with stubborn, stupid perseverance - "keep the tests up to date !!!"

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 journey, 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 to begin is so much easier.

Personally, I started with “Programming for Android. For professionals ”B. Hardy, B. Phillips. In general, I can recommend. Maybe now it is outdated in 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 as separated as possible from the display. 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 all the logic of work is manipulation of activities: to start an activity, complete an activity, set activity parameters, calculate statistics of time intervals, etc. Here I also took out this logic

in a separate class structure


Список задач содержится внутри класса ActionsManager и весь доступ к ним осуществляется через функции этого класса. То есть везде в приложении все манипуляции с задачами производятся через класс ActionsManager.

Объект работы с базы данных инициализируется в объекте приложения. Все остальные берут объект отсюда, вместо того чтобы каждый раз создавать новый.

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


  • The application itself is completely free and without ads.
  • It is planned with the passage of time to add various paid options.
  • At the moment it is a statistics module without restrictions.
  • You can see all the statistics for the current day, but in order to do this for an arbitrary period of time, you need to purchase a module without restrictions.
  • As it turned out now with the account of the seller everything has become much easier.
  • In my case - there is an account in the savings bank, through a savings bank online I started a dollar account and tied it to my account - everything is very simple. And yes, a nice chip, for some time Google transfers money starting from $ 1.

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

Also popular now: