Android Presentation Patterns: MVVM

MVVM architecture promotes a clean separation of concerns, making it easier to develop and maintain complex Android applications. By adhering to the key principles and components of MVVM, developers can create scalable, testable, and maintainable apps that provide a seamless user experience.

Android Presentation Patterns: MVP

Uncover the journey of evolution from MVC to MVP, tackling challenges through the integration of a Presenter and well-defined contracts. Despite the advantages MVP offers, it necessitates addressing common concerns such as boilerplate code and potential intricacies for more straightforward UIs.

Android Presentation Patterns: MVC

Explore the early days of Android with the Model-View-Controller (MVC) pattern. Discover its challenges, like tight connections and testing troubles, through a simple example. While acknowledging its history, the article introduces modern alternatives like Model-View-Presenter (MVP), Model-View-ViewModel (MVVM), and Redux, explaining why they're better choices for today's Android app setup.

Continuous Integration and Deployment: A Developer's Best Friends

Embrace the power of Continuous Integration and Deployment (CI/CD) in software development. Automate tests, streamline workflows, and boost collaboration with user-friendly services like CircleCI, Bitrise, GitLab, and GitHub Actions. Level up your development process today!

Would you go for mobile development again, after 10 years of doing it?

I went to a meetup in my city last week and a guy I just met there popped a question after a while of conversation: with my experience, would I go for mobile software development again or pick a different area?

Why should you use Tech proposals

Tech Proposal are a less formal way for internal documentation created before actual implementation. They also facilitate making technical decisions.

Android service binding fix for API 30

Android 11 (API 30) changes the way of using external app services. Using `compileSdk 30` and above, without additional Manifest entry the `bindService()` method will always return `False`, even if with `compileSdk 29` the app will work perfectly. I want to share solution of this problem after WAY TOO LONG time I spent on searching it...

Command Pattern in Kotlin

The Command pattern wraps the request into a specific object that has all the information necessary to perform its task. You can think of it as the next stage of refactoring, where at first we extract the code to a separate method, and then to a separate object, taking the arguments needed to execute the request in the constructor.

Remote Logger

While working on a project, I couldn't use Android's 'Development Options' - I couldn't access the logs. If only you could send Logcat logs, e.g. via WebSocket, and then catch them on your computer... I did not find such a tool, so I wrote one and described the process in this post.

Mediator in Kotlin

The Mediator's job is to organize communication between close classes. The `Mediator` pattern cuts out dependencies between components. It takes over the interaction between them, becoming the main communication hub for a group of classes. There is a reverse of the controls because components are now just telling 'what happened' instead of telling others to 'do something'. It can be found e.g. in the form of `ViewModel` in Android, where it separates UI interactions from data model changes.