Categories
Technology

Understanding Scrum Methodology

Scrum is one of the popular agile framework widely used by software development teams to manage product development. Scrum methodology adopts a structured approach to project management.

Although scrum is one of the agile process frameworks and shares certain principles and practices of Agile, it is distinguished by certain concepts and detailed software development practices. Scrum is all about continuous improvement, where it follows an iterative approach and work is delivered at regular intervals known as sprints. The team delivers the product as increments at the end of each sprint.

The components of a scrum framework include product owner, scrum master and a team.

The Product owner refers to the key stakeholder of the project who is responsible for product development and delivering the desired outcome. He has a clear understanding of the requirement and is responsible for managing the sprint and accepting the completed sprints. Scrum master is a scrum expert who oversees the project and offers guidance to the team. He is a facilitator between the product owner and the team and ensures that the development team follows scrum practices. The development team follows scrum practices and is equipped with the skills to deliver increments. The team has no leaders to delegate tasks and each member of the team is part of product development.

Here are some terminologies used in Scrum lifecycle –

  • Product Backlog – The product owner creates a backlog which is a list of tasks to be accomplished in a specific order.
  • Increment – Sum of all product backlog since the previous release.
  • Sprint – A time frame usually with a duration of 1 to 4 weeks to accomplish an increment.
  • Sprint Planning – Plan the work to be completed in the current sprint by taking a task from the backlog and fix a time length to complete it.
  • Scrum meeting – Daily meetings of no more than 15 minutes to discuss the progress made by each team member on the previous day and what is the work to be accomplished for the day.
  • Sprint Review – Once the sprint is completed, the work done is reviewed. The sprint is considered to be complete only when it is submitted to the customer.  
  • Definition of Done -Each scrum team has a Definition of Done which refers to acceptance criteria to check if an increment has been completed and ready for release.

Scrum Project Management

Scrum addresses shortfalls in the traditional waterfall process which results in constant changing requirements. The scrum process is iterative, unlike the waterfall process which is consecutive. Scrum development breaks down the project into several sprints and daily scrum meeting and inspection ensures that each sprint delivery meets customer expectations. Any discrepancy is detected early and is fixed before moving onto the next sprint.

Scrum Framework

Scrum project phases include:

  • Initiate the project by forming a scrum team and building a product backlog.
  • The planning phase includes sprint planning and estimating the tasks.
  • The Implementation phase includes daily scrum meetings and execution of tasks.
  • The Development team builds the product as an increment.
  • The sprint review is conducted by giving a demo of the increment to the stakeholders for review.
  • The sprint retrospective is done to determine what needs to be improved in terms of tools and practices in project development.
  • The increment is evaluated according to the criteria specified in ‘Definition of Done’.
  • In the release phase, the increment is delivered to the customer.

The above process is repeated until the product development is completed.

The scrum methodology brings in transparency in work accomplished and progress made by the team.

Advantages of Scrum methodology

Adopting scrum methodology brings in the following benefits to the team:

  • Improved communication
  • Transparency in project progress
  • Increased productivity
  • Increased customer satisfaction
  • Quality end products
  • Save time, resources and cost
  • Scrum can be tailored to organizations need

I hope this article gives a basic understanding of the Scrum process and can help implement scrum practices in your organization.

Categories
Technology

How to Improve the quality of your code?

Clean code is essential to create a scalable and maintainable product, bad code can make product maintainability a disaster. Writing clean code makes it easier for programmers to understand.

Good code can be defined as a code that is of high quality. Good software should have clean, consistent and easy to understand code. Sometimes programmers write ambiguous code due to time constraints and deadlines. This might result in bugs and take more time to fix it due to code complexity.

What makes a clean code?

Attributes that define code quality include:

  • Readability – The code should be readable and understandable. Enhance the readability of the code by using meaningful names for variables and functions. Add proper whitespace, indentation or line breaks to make the code more readable.
  • Consistency – Programmers working on different modules should follow formatting and coding style to make the code consistent.
  • Reliability – Reliability refers to a reliable codebase that will make a product run without failure.
  • Maintainability – Maintainable code relies on factors such as testability and understandability. To have a maintainable codebase, the code should be consistent and well structured.
  • Modularity – The code should follow a logical structure. Independent blocks of functionality should be enfolded in a module so any change in functionality doesn’t affect the entire code.

Steps to improve code quality

Code quality can be checked as the code is written, when running a test or when the code is committed.  Here are some methods that can help improve the quality of the code.

Use a coding standard

A coding standard emphasizes that every programmer uses the same coding style. The Coding standard helps to write consistent and readable code. Some of the coding best practices include using meaningful names for variables, functions, classes, arguments and methods. Coding conventions for the project should document information on naming convention and coding guidelines. Add comments wherever required to explain what a chunk of code does and to help in future code enhancement. Don’t clutter the code with comments as it might distract the programmers. Ensure to update the comments section when code is being updated.

Adopt Test Driven Development

A well-defined test strategy can improve the quality of the code. Developers can adopt test-driven development that involves creating test cases that well-written code should be able to pass through. The key idea is to figure out all the loopholes that could make the code goes wrong and fix them in advance.

Manual Code Review

Manual code review can be done by reading the source code line by line to check for structure, style, logic and readability. The problem with manual code review is it requires patience and skill.

Use Automated Code Review Tools

Integrate automated code review tools into your project. These tools help to improve the code by suggesting feedback after commit. The code will be reviewed after each commit and issues are categorized in a dashboard. Common mistakes include coding style, compatibility, security and errors.  Fixing the issues suggested by the tool can have a positive impact on the code.

Some of the popular code review tools include:

  • SonarQube
  • Code Climate
  • Github
  • Visual Studio Code

Use a Linter

Linters can be used to reduce coding errors. Linter is a tool to analyze the code and they are different from the code review tool. The Linter reads the code and throws warnings if the code is not compliant with the syntax requirements and standards of a language. It enforces code guidelines and makes developers follow the syntax. Lint tools are available for most programming languages like Javascript, HTML, CSS, Python and PHP.

Some of the popular linters include:

  • ESLINT
  • TSLINT
  • JSHINT
  • StandardJS

Conclusion

The above methods can drive programmers to improve code quality. The tools can increase the productivity and effectiveness of the developers.

Categories
Technology

Know the difference between UI and UX

When talking about web and mobile app design users often get confused between UI and UX. Although UI and UX are often used interchangeably they are actually two different terms. UI stands for User Interface design and UX stands for User Experience and both are crucial for the success of a product. This article defines each of these terms and briefs the differences between them.

What is UI?

The term User Interface is derived from User Interaction. The term user interface relates to how a user interacts with an application. The Interface is the graphical layout which includes screen layout, animation, buttons, text fields, color scheme, and sliders. All these interactive elements should guide the user through the application interface. The UI designer should ensure that the design is coherent and appealing to the user.

What is UX?

UX refers to the user’s experience with the interface. The aim of UX is to give relevant experience to the user while interacting with the application. User experience is directly proportional to user retention and can result in customer satisfaction.

Differences between UI and UX

UI refers to how the interface functions whereas UX refers to the feel of the interface. UI is applicable only to software products whereas UX is applicable to any kind of product or service.

During product development, UX comes before UI design. UX designer conducts research about the product features and user journey and develops a prototype. The UI designer then develops the application considering these factors.

It is the responsibility of the UI designer to translate the research into an attractive experience for the users. The UI designer creates a responsive design that is compatible across all screen sizes.

Elements of UX

To achieve a holistic user experience, the following design aspects should be considered.

  • User Research – The UX designer should analyze the product and do research about the end-user and their needs as interaction design is focused on user behavior.
  • Design Strategy – Do study about the device on which the application will run as the device poses challenges in terms of layout and smaller display.
  • Design Structure – Usefulness of the website depends on the user-friendly architecture. The content should be organized allowing users to find the information they are looking for.
  • Usability – Usability is an essential component of UX as it increases user engagement. User testing and performance testing can help evaluate usability.
  • Prototyping – The UX designers should build a prototype and evaluate them to understand how the application will respond to real-time inputs. There are many prototyping tools available to speed up the process.
  • Visual Design – The designer aims to improve the user experience by considering visual aspects of the application like colors, layout, illustrations.

Elements of Great UI

The following components are essential for designing a good user interface

  • Clarity – An effective UI should allow users to understand the design and how to use it. The screens should be clutter-free.
  • Intuitive – Designer should keep the interface intuitive by making it familiar for the users to understand how the application behaves.
  • Consistency – The UI should have consistent design elements, typography, buttons, icons, and color schemes throughout the application for easy interaction.
  • Easy Navigation  – Provide an easy to navigate interface. Good UI should have page titles and highlights to help users understand the interface. Navigation should be simple and self-explanatory.
  • Progressive disclosure – Adopt progressive disclosure to show only the necessary information on the screen.
  • Forgiving – The interface should be flexible allowing users to delete or undo their mistakes.

To summarize, both UI and UX are essential for a successful product. UI and UX designers work closely with each other to build a functional and delightful software product.

Categories
Technology

Continuous inspection of Code Quality using SonarQube

SonarQube is an open-source software introduced by Sonar Source for continuous inspection of code quality. Continuous inspection of code refers to constant checking of code for defects.

In software development, it is necessary to evaluate the code to measure software quality. Software quality is measured by checking for duplicate code, whether the code follows good practices and specific principles. Static code analysis is done as a part of the code review to analyze the code for errors and potential vulnerabilities. Static code analysis is done using algorithms and techniques to examine the code without executing the program.  Static code analysis takes time but there are many code analysis tools available that can identify errors and save time.

SonarQube

SonarQube is a widely used tool for performing automated code reviews by analyzing source code, inspecting the code quality and providing reports. It uses static code analysis to detect bugs, code smells, styling errors, code duplication, security vulnerabilities, lack of test coverage and design errors. It provides clear guidance for developers at each level with metrics and identifies the problematic areas enabling them to understand and fix issues. It enables developers to own the quality and security standards through clean as they code.

Advantages of using SonarQube

  • Increases maintainability of the software
  • Increases the lifetime of the application by reducing complexities, bugs and security vulnerabilities
  • Empowers the developers to write cleaner and maintainable code.
  • Implements continuous code quality management
  • Automatically detects bugs and alerts before moving into production thereby reducing the project risk.

Features of SonarQube

  • SonarQube is an open-source platform available for use by developers to monitor code quality
  • It provides support for 27 programming languages including C, C++, Java, TSQL, TypeScript, JavaScript, .NET, Python and COBOL
  • Quality Gate provides the ability to enforce code practices and standards and tells whether the project is ready for production.
  • It comes with additional plugins to enhance the experience of the user. More than 60 plugins are available to provide features including extra languages, metrics, and pages.
  • SonarQube easily integrates with existing tools like Jenkins, Azure DevOps, GitLab, eclipse, bitbucket, maven, etc.
  • Provides software quality metrics with drill-down capabilities.

Functionalities

SonarQube helps to manage code quality through several functionalities that include code analyzers, reporting tools, activity page, defect hunting, time machine and dashboard.

Dashboards

SonarQube comes with a global dashboard and project dashboard. Dashboards are made up of widgets and are customizable. The project dashboard provides project-specific metrics. The dashboard provides a consolidated view of bugs, vulnerabilities, code smells and duplications.

Dashboard Sonar Qube

Source Code Analysis

A set of source code analyzers are stored in a plugin. The analysis begins by triggering the plugin and performs a full analysis of the code and saves the results to the database. It is necessary to download and install SonarQube Runner to run the analysis.

Quality Gate

This feature allows enforcing a quality policy to ensure that standards are met across the projects.  Quality gate can be accessed by any user of the project.  It allows to define a set of Boolean conditions against which the project is measured. SonarQube will ascertain if the code meets all the quality thresholds set for the project. The project should pass the quality gate to move on to the next phase.

Quality Gate

Duplication of Code

It is important to have clean code without duplications in a project. Code duplication occurs in every project due to reusing code from other projects. SonarQube helps to identify repeated code blocks by scanning the code and reports duplication metrics as an absolute number of lines, blocks and files. 

Manage Project history

Project Activity Page maintains a history of project data from all previous analyzes.  It provides a comprehensive list of code analyzes performed on the project since it was created in SonarQube.  This helps to analyze the project’s health and measures taken over time.

Hunting Tools

Sonar provides hunting toolset to drill down the issues. Drill down every measure using filters, option to narrow down which modules, packages, and files are poorly covered and duplication drill down.

Time Machine

This functionality helps to analyze history in a graphical format which is easy to understand.  It helps to analyze the evolution of metrics and helps to compare the version of the project.

Managing source code quality gives better visibility into your project and optimizes ROI. SonarQube helps to manage source code quality with lesser effort. Implementing the SonarQube platform enables organizations to get insights on application quality and reduces the time required for code reviews.

Categories
Technology

Serverless Computing

Serverless Computing allows building applications without managing the infrastructure. Serverless doesn’t mean there are not any servers involved in application development. Servers are involved but they are provided as a back end service by a cloud vendor. A Serverless architecture enables software organizations to focus only on writing and deploying the code without worrying about the servers or underlying infrastructure. A cloud provider provides the complete back end services that include setting up the server, maintaining the server, managing the load balance, etc. The cloud provider allocates resources dynamically and charges based on consumption. The provider takes care of all hardware, virtual machine and container management.

Harnessing serverless infrastructure has revolutionized the way companies build software applications. It allows organizations to focus only on building the application without spending hours on implementing, maintaining and monitoring the infrastructure. In the cloud execution model, the provider allows dynamic scaling based on the organization’s requirement. The cloud provider holds the responsibility of allocation and provisioning of servers based on demand. The cloud execution model is also cost-effective as the pricing is based on time and memory allocated to run the code.

There are many serverless computing providers. Some of them include:

  • AWS Lambda
  • Microsoft Azure
  • Google Cloud
  • IBM Cloud

Serverless computing Models

Serverless computing services offered by cloud providers can be classified into the below platforms:

Function as a Service

Function as a Service is a serverless architecture that allows executing code in response to events. In this model, the cloud service provider enables the customer to deploy a piece of code and pay for the length of the time the code executes. This new model of cloud computing is mostly used to build microservices.  Many cloud vendors are offering FaaS. Some of them include Microsoft Azure Functions, Google Cloud Functions, AWS Lambda, IBM cloud functions.

Backend as a Service

In Backend as a Service (Baas), the cloud service provider offers all back end services for a web or mobile application.  The developer writes the code for the application frontend and outsources all back end activities to the BaaS vendor. The vendor provides cloud storage and manages activities that include database management, authentication and remote updating. 

Advantages

Serverless architecture offers numerous benefits to an enterprise. Some of them are listed below:

  • Cost-Effective than renting or purchasing dedicated servers
  • Scaling on demand
  • Efficient use of resources
  • Fewer maintenance tasks in managing infrastructure
  • Rapid and Easy Deployment
  • Eliminates hiring backend engineers
  • Event-Driven and executed on demand
  • Quick turnaround
  • Ready to use third party  services
  • Reduced operational costs

Disadvantages

There are some challenges with serverless architecture:

  • Security vulnerabilities compared to traditional architecture
  • Privacy issues as the application are shared  with external resources
  • Difficult to break contract and switch vendor
  • Dependent on the vendor for debugging

In a nutshell,  serverless computing is a new approach to application development. Organizations choose serverless computing to build flexible, scalable applications and to reduce the time to market. It increases the productivity of the developers as they focus only on the application code and business logic.

Categories
Technology

Technology Stack for Mobile App Development

When you are developing a mobile application, the first challenge that you come across is choosing the right technologies. To develop a robust mobile application, it is important to understand the technical feasibility and choose the right technology stack. The mobile technology stack should be selected based on cost, and time for development.  The technology stack plays a critical part in the success of the mobile app. Here are some advanced mobile technology stacks to build native and cross-platform applications.

Native Apps

Native App is developed specifically for a particular platform (say Android or iOS). Apple and Google provide development tools, interface elements and SDK to develop native apps.

iOS Technology stack

To create a native iOS application, the following technology stack can be used.

Programming language:  Objective C or Swift

An iOS application can be built using either Objective C or Swift programming languages. Objective C can be considered as an extension of C programming language and provides object-oriented capabilities. Developers with knowledge in object-oriented programming can go for Objective C.

Swift is a compiled programming language developed by Apple for developing iOS applications that run on iPhone and iPad. Swift is more functional, friendly and less error-prone.

Toolkit: XCode

Xcode is an integrated development environment that contains a suite of development tools for developing a native iOS app. XCode tool kit comprises of Xcode IDE, instruments and a simulator.

Software Development Kit: iOS SDK

The iOS SDK is a software development kit developed by Apple and includes an application programming interface (API) that serves as a link between software applications and the platform they run on. It consists of tools for Apple’s touch screen interface and iPhone Operating System.

Android technology stack

To build a native application for Android, the following technology stack can be considered.

Programming language: Java or Kotlin

Top programming languages for native Android mobile app development is Java or Kotlin.   Java has been the official programming language for android app development until Kotlin was introduced and has vast tools and libraries to support android development.  Kotlin was introduced by Google for android app development. It has numerous development options, simple and concise code makes it lightweight. It is interoperable with Java allowing to convert Java code into Kotlin.

Toolkit: Android Studio & Android Developer Tools

Android Studio is the IDE for creating a native android app. It is popular among developers because it provides the fastest tools in addition to code editing, debugging, a flexible build system and an instant deploy system. It allows focusing on building unique and high-quality apps.

Android Developer Tools (ADT) is a plug-in by Google to provide full support for Android app development. In addition to coding support, ADT allows developers to use debugging tools, a graphical UI builder, emulators, and test automation support.

Software Development Kit: Android SDK

The Android SDK is a software development kit that includes tools for building, testing, and debugging Android applications. Developers must download the components of the Android SDK.

Technology stack for cross-platform apps

In a cross-platform approach, a mobile app is developed for multiple platforms. A single code base is used for multiple operating systems (say iOS and Android platforms).

There are different frameworks for cross-platform app development. Here are some technologies used to build cross-platform mobile apps. Based on the project requirement either of the below technologies shall be used.

React Native

React Native is a Javascript framework for developing a cross platform app that closely resembles a native app. The framework is based on React Library supported by Facebook. The application logic is written in JavaScript whereas UI is completely native. React Native’s live reload feature allows to build app faster and fix bugs immediately.

Xamarin

Xamarin is a cross-platform framework supported by Microsoft.  It uses the C# programming language as a base for app development. Xamarin has a range of components and has IDE support.  Xamarin allows sharing almost 90% of the code across multiple platforms. 

Flutter

Flutter supported by Google is considered the best tool to build cross-platform apps. Flutter uses Dart language for app development. Flutter SDK includes developing and debugging tools and unique set of widgets that make app development rapid and simple.

Read our blog on Cross-Platform App Development to know more about cross-platform technologies and frameworks.

Before choosing the technology stack identify your target users and the devices they use. Each of the technology stacks offers unique tools and components. Hire a mobile app development company to help you build a successful application.

Categories
Technology

Agile and waterfall- which method ensures success for your project development

One of the important decisions faced during project implementations is “Which development methodology should we use?” And this is one topic that gets a lot of discussion. If it is not something you’ve worked with before, then to put it very simply, it’s a way of organizing the work of software development. While there are many different project management approaches, the choice should be made keeping the nature of your business and its requirements in mind.

Out of all the methods, the two basic, most popular methodologies used are agile and waterfall methodology and both of these are usable and mature methodologies. 

Would you like to know how both approaches differ from each other? And which one should you go for when it comes to your next project? You’ve come to the right place! 

Waterfall

Non-agile, is a traditional method for developing software. It splits the software development lifecycle into 6 stages where one tackles the challenges one stage at the time. One can only proceed to the next stage when the current stage is completely done. The usual stages are:

  • Requirements
  • Analysis &  Planning
  • System and Software Design
  • Coding
  • Testing
  • Deployment

It is called a “plan-driven process” due to its rigid structure, as you need to have a clear plan when certain things are done, how they are done, why they are done to successfully use this methodology. 

Agile

Agile has an incremental, iterative approach to software development unlike the waterfall approach that has a rigid structure and demands that the product be completed one phase at a time. Agile methodology is a lot more flexible and open to changes as it revolves around the idea of breaking down project requirements into smaller parts of user-functionalities, called “user stories” which are prioritized and delivered continuously in short cycles called “iterations”.

Customer satisfaction is primarily the end goal of the agile approach, as the focus of each iteration will be built around the idea of providing a higher quality solution to the customer. 

In order for the agile approach to bring actual results, cross-functional teams work in “sprints”. The ideal duration of a sprint is 2 weeks but there are teams who even run 1 week and 3 week sprints. As a best practice, It is always better to have the sprint duration not exceed beyond 3 weeks. The goal of every sprint will be to build usable software which will then be given to the customers to test. Once the customer gives their feedback, it is used to develop a plan for the future iteration of the product. Work in agile methodology is organized into a backlog that is prioritized based on the business/customer value.

While none of the two methodologies is per se better or worse than the other one, the agile methodology works better in most cases as the development approach provides flexibility and enables a lot of ‘testing on the go’ in order to create a valuable product.

So, if you are not sure which methodology would be the best for your intended project, don’t you worry! At techcedence we understand that every business is unique, and can help you figure out which is the better model for your project.

Would you like to talk to us about your project? Contact us today, we’re always happy to hear from you.