💻
Gürkan Fikret Günak - Personal
  • 👨‍💻About me
    • 🌊Journey
  • 🎯Dart
    • 🔬What's Dart Algorithms?
    • 🔬What's Dart Structures?
    • 🧮#01 Algorithm Guidance: Implementing Calculation Algorithms
    • 🧮#02 Algorithm Guidance: Two Sum
  • 📄Guidances
    • Flutter MVVM Guidance
    • Dart Programming Guidance
    • E-Commerce Use Cases
    • E-Commerce Applications
    • Flutter App Color Palette Usage Guidance
    • Flutter Custom AppBar Usage Guidance
    • Flutter Network Image Cache Usage Guidance
    • Flutter Project Bitbucket SSH Guidance
    • Flutter Project GitHub SSH Guidance
    • Flutter SliverAppBar Usage Guidance
    • The Importance of BuildContext in Flutter Tests Guidance
    • Internship Basic Guidance v0.1.0
    • The Importance of Type Casting in Flutter
    • Effective and Detailed Pull Request Guide
    • Flutter Naming Conventions Guidance
    • Flutter Widget Guidance
    • Semantic Commit Guidance
    • Being Part of a Mobile Software Team and Working on a Shared Architecture
    • Understanding Deep Links for Any Development Platform
    • The Journey of a Developer: Stories of Becoming Junior, Middle, and Senior Developer
    • Becoming a Team Leader: Growing in Sync with Your Team
    • Why IP Changes Are Important for Mobile Applications in Flutter
    • Why Your Growing Mobile Team Needs CI/CD and How to Build a Winning Strategy
    • Dart in 2024: 20 Features You Need to Know With Code Examples and Scenarios
    • Remote Theme Management with API (JSON): Implementing a Helper in Flutter SDK
    • Understanding and Implementing Force Upgrade in Your Flutter Project
    • Life Lessons from the Bald Eagle: A Metaphor for Growth, Change, and Leadership
    • The Beauty of Imperfection: Why Today Doesn’t Need to Be Perfect
    • # The Reverse Curve of Productivity: When Social Cohesion in Software Teams Starts to Hurt **How str
    • 📱 Mobil Uygulamalarda GraphQL Tercihi: Bakım ve Maliyet Etkiler
    • 📉 Türkiye’de Yazılım Projelerinde Süreç Yönetimi ve Ekonomik Kayıp: Bir Bekâ Sorunu mu?
  • 📹VIDEOS
    • Introduction to Flutter Boilerplate! ( Turkish )
    • Flutter APIs effective using ( English )
    • Understand to SDK ( English )
  • Links
    • 💼 | Linkedin
    • 🆇 | x.com
    • 📧 | Mail me
Powered by GitBook
On this page
  • Table of Contents
  • 1. The Dynamics of Working in Large Mobile Software Teams
  • 2. The Importance and Principles of a Shared Architecture
  • 3. Code Standards and Shareability
  • 4. Modular Design and Code Separation
  • 5. Version Control and Team Harmony
  • 6. The Role of Comprehensive Testing and CI/CD Processes
  • 7. Problem-Solving in a Mobile Team
  • 8. Life Example: "Small Pieces, Big Whole"
  • 9. Conclusion and Advice: Strength Through Sharing
  1. Guidances

Being Part of a Mobile Software Team and Working on a Shared Architecture

In this article, we explore the key dynamics of being part of a mobile software development team, focusing on the importance of shared architecture.

Table of Contents

  1. The Dynamics of Working in Large Mobile Software Teams

  2. The Importance and Principles of a Shared Architecture

  3. Code Standards and Shareability

  4. Modular Design and Code Separation

  5. Version Control and Team Harmony

  6. The Role of Comprehensive Testing and CI/CD Processes

  7. Problem-Solving in a Mobile Team

  8. Life Example: "Small Pieces, Big Whole"

  9. Conclusion and Advice: Strength Through Sharing


1. The Dynamics of Working in Large Mobile Software Teams

Being part of a mobile software team is about learning to "work together but differently." Just like in an orchestra, everyone plays a different instrument, but only if they are synchronized does it create a perfect melody. In large teams, it's crucial that everyone knows their responsibilities and acts accordingly.


2. The Importance and Principles of a Shared Architecture

A shared architecture ensures that the entire team speaks the same language. It's like a group of friends going on a trip using the same map—everyone moves towards the same goal. This usually happens through principles and design decisions established at the start of the project.


3. Code Standards and Shareability

One of the most common issues in team collaboration is that everyone has their own coding style. Code standards ensure that the entire team speaks the same "dialect." It’s like playing a football game with friends—everyone must follow the same rules for the game to be fair and enjoyable.


4. Modular Design and Code Separation

In mobile projects, modular design allows code to be divided and work independently. It's like giving each floor of a building to a different engineering team. The fact that each floor can be completed independently allows the entire building to be constructed faster.

Example Code: Authentication Layer as a Module

Swift

// Authentication module
protocol AuthenticationService {
    func login(username: String, password: String, completion: @escaping (Result<User, Error>) -> Void)
}

class FirebaseAuthenticationService: AuthenticationService {
    func login(username: String, password: String, completion: @escaping (Result<User, Error>) -> Void) {
        // Firebase login implementation
    }
}

// Usage of the Authentication module elsewhere in the app
class LoginViewController: UIViewController {
    var authService: AuthenticationService!
    
    func loginButtonTapped() {
        authService.login(username: "test", password: "1234") { result in
            // Handle login result
        }
    }
}

Kotlin

// Authentication module
interface AuthenticationService {
    fun login(username: String, password: String, callback: (Result<User>) -> Unit)
}

class FirebaseAuthenticationService : AuthenticationService {
    override fun login(username: String, password: String, callback: (Result<User>) -> Unit) {
        // Firebase login implementation
    }
}

// Usage of the Authentication module elsewhere in the app
class LoginActivity : AppCompatActivity() {
    lateinit var authService: AuthenticationService

    fun loginButtonTapped() {
        authService.login("test", "1234") { result ->
            // Handle login result
        }
    }
}

Dart

// Authentication module
abstract class AuthenticationService {
  Future<User> login(String username, String password);
}

class FirebaseAuthenticationService implements AuthenticationService {
  @override
  Future<User> login(String username, String password) async {
    // Firebase login implementation
  }
}

// Usage of the Authentication module elsewhere in the app
class LoginPage extends StatelessWidget {
  final AuthenticationService authService;

  LoginPage(this.authService);

  void loginButtonTapped() async {
    final user = await authService.login("test", "1234");
    // Handle login result
  }

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: loginButtonTapped,
      child: Text("Login"),
    );
  }
}

5. Version Control and Team Harmony

When 5 people try to write code simultaneously, conflicts are inevitable. That's why version control systems (like Git) are lifesavers. The project is stored in a Git repository, and team members work on branches to avoid interfering with each other's work.

Example: Git Workflow

# Create a new branch
git checkout -b feature/login-screen

# Add your changes and commit
git add .
git commit -m "Add login screen functionality"

# Merge changes into the main branch
git checkout main
git merge feature/login-screen

6. The Role of Comprehensive Testing and CI/CD Processes

Being part of a large mobile software team isn't just about writing code; it's also about ensuring that the code works as expected by writing comprehensive tests. Ensuring that every release of your software runs smoothly requires automated tests and CI/CD processes. CI/CD is like washing your face and getting ready every morning—it becomes a habit that’s essential for the health of the project.

Automated tests simplify the team's life. Every developer wants to add new features without breaking existing ones. But in a large project, manually testing every feature every time is impossible. This is where Unit Tests and UI Tests come into play. For example, a unit test for a login function checks that the correct error message is displayed when login fails.

Example: Unit Test

Swift

import XCTest

class LoginTests: XCTestCase {
    var authService: AuthenticationService!
    
    override func setUp() {
        super.setUp()
        authService = FirebaseAuthenticationService()
    }
    
    func testLoginSuccess() {
        let expectation = self.expectation(description: "Login successful")
        authService.login(username: "test", password: "1234") { result in
            switch result {
            case .success(let user):
                XCTAssertNotNil(user)
                expectation.fulfill()
            case .failure:
                XCTFail("Login failed")
            }
        }
        waitForExpectations(timeout: 5, handler: nil)
    }
}

Kotlin

import org.junit.Assert.*
import org.junit.Test

class LoginTests {

    private val authService: AuthenticationService = FirebaseAuthenticationService()

    @Test
    fun testLoginSuccess() {
        authService.login("test", "1234") { result ->
            assertTrue(result.isSuccess)
        }
    }
}

Dart

import 'package:flutter_test/flutter_test.dart';

void main() {
  AuthenticationService authService = FirebaseAuthenticationService();

  test('Login success test', () async {
    final user = await authService.login("test", "1234");
    expect(user, isNotNull);
  });
}

CI/CD processes ensure that these tests are continuously and automatically run. Developers push their code to the repository, and the tests run immediately. If the tests pass, the code is integrated into the main project. This early detection of problems prevents larger issues down the line.


7. Problem-Solving in a Mobile Team

Working as a team means encountering new challenges every day, especially in mobile projects, where platform dependencies, device incompatibilities, or performance issues frequently arise. The key to overcoming these challenges lies in establishing a strong communication network within the team, allowing collective solutions to emerge. Your approach to problem-solving directly impacts the workflow.

In many mobile projects, problems often stem from external factors. For instance, platform updates on iOS or Android may introduce compatibility issues that can stall the entire team. In such cases, rapid and effective problem-solving is achieved through team brainstorming and comprehensive research to identify the root cause.

A good team sees a problem not as "my problem" but as "our problem." Collaborating on solutions accelerates the resolution process and enhances team morale. For example, if your mobile app encounters network connectivity issues, the developer responsible for the network layer can discuss the problem with colleagues to come up with a quick solution. By the end of this process, everyone has learned new techniques and expanded their problem-solving toolbox.

In conclusion, challenges encountered during team collaboration should be seen not only as obstacles to overcome but also as opportunities to enhance both technical and social skills. This will ultimately create a more resilient and well-equipped team in mobile software development.


8. Life Example: "Small Pieces, Big Whole"

Software development is much like a Lego set; each piece may seem small and insignificant, but when combined, they form a larger, meaningful whole. Similarly, in life, the small steps you take lead you to your larger goals.


9. Conclusion and Advice: Strength Through Sharing

Being part of a large team not only shapes the software development process but also impacts your life. Sharing, collaborating, and building mutual trust not only make you stronger in the workplace but also in all aspects of life.

Advice: Like in software, instead of trying to make every piece of life perfect, focus on becoming slightly better every day. Success comes with small, consistent steps.

PreviousSemantic Commit GuidanceNextUnderstanding Deep Links for Any Development Platform

Last updated 8 months ago

📄