How to Future-Proof Your Testing Career

Here’s my next post which appeared first on Simple Programmer..

Since I switched back into testing from a development role, I’ve been trying to build up skills that will future-proof myself. To do this, I’ve been going to more talks and conferences, and watching webinars on testing.

What do I mean by future-proofing? I want to ensure that I have the correct skills, either by focusing on one specific area or gathering a broad knowledge of a few keys areas, that may be popular or emerging in technology now or in a year or two. Technology has changed so much even in the last 10 years, so it’s one area that I think you should stay up-to-date on the trends.

Earlier this year, I watched a webinar called 2018 Test Automation Trends. I’m sure all testers have heard of or are using automation tools these days. They have probably heard the fears of some that manual testers are being made obsolete by automation (this is in no way true).

But automation isn’t everything. This isn’t the only area that could help you future-proof your testing career.

Automation is just another area of testing that’s getting more attention. It has become highly visible how important testing is, and how bad products affect end users as well as shareholders.

Although this webinar was about automation trends, at the end, the experts were asked what they thought would be things to watch out for in 2018. I believe that if you want to stay ahead in this field, you need to look ahead too.

So here are the topics that these experts recommend to focus on in 2018, and also some that I think are good areas to begin future-proofing yourself as a tester.

Blockchain

Blockchain is a data structure that exists in many locations at once. You can only add to the blockchain. No deletions or updates are permitted. The data held within a blockchain is decentralized, which means a copy of the existing blockchain is on every machine in the network.

Additions to the blockchain can be seen on every computer in that network and the transactions are cryptographically linked to the previous transaction. Therefore, carrying out fraudulent transactions is very difficult to perform. To do this, someone would have to rewrite their history to the beginning of time, which is extremely resource-heavy.

With Blockchain applications, once a contract is deployed to a blockchain, it can never be changed. So you have to be very confident the testing that’s performed is of a high level of quality and that everything that should be covered has been covered. There is no rolling back.

For more information, I wrote a blog post to introduce testers to blockchain applications. Have a read and see what you think about blockchain.

Understanding blockchain technology and how to test it will help future-proof your testing career. It will help enable you to move into different fields, like banking and the automotive industry, which are both currently using this technology. It will give you more options about where you will work.

Contracts and API Testing

Contracts and application programming interfaces (API) testing focus on testing API endpoints of services and microservices.

There are different types of services. One example is a web service, which provides a way for applications and systems like databases, mobile apps, and other web servers to communicate with the service over the internet using endpoints. Endpoints are URLs that your HTTP client interacts with in order to access the data from that URL.

When testing endpoints, you ensure that when requests are sent with the correct parameters or incorrect parameters, the system behaves in a way that you expect. For example, if you send three parameters to an endpoint and the endpoint requires four, then you would expect a response to be returned with a 400 status code.

The services architecture is widely adopted across many industries, because it allows code to be written in a more modular way. This allows the project to be easily extendible, and will also mean that systems are coupled less tightly together.

As a tester, you need to ensure that you can test endpoints and contracts thoroughly. Incorrect requests could mean that your application doesn’t respond with the correct status code or message for the user in the best case. But in the worst case, it could lead to holes in your application’s security.

As testing jobs require more knowledge about different ways to automate their testing code, learning how to implement API tests and perform contract testing will help future-proof your testing career. You’ll become an expert in a specific area of automation, and as more applications, particularly web-based ones, are built using the service architecture, your skill to competently test the integration layer will be very sought after.

Mobile Testing

Smartphones and tablet devices have become a staple product within homes all over the world, for those young and old. It’s just as important to have a well-tested app nowadays as a well-tested website.

In 2005, Google changed its search results ranking algorithm so that if a website wasn’t responsive, that site would be ranked lower in its results list. The dedication to and sophistication of mobile testing has massively increased since then.

We first began testing mobile websites and apps manually, but because of the fragmentation of Android and the yearly releases of all mobile OSs, the need to automate mobile testing has increased. Because of this need, there has been a number of mobile testing frameworks released to aid testers.

Appium is a mobile testing framework built on Webdriver technology. It was created in 2013 by Dan Cuellar, a test manager at Zoosk who found that the length of the test passes on the iOS product was getting out of hand. Appium allowed him to write automated tests for iOS as easily as Webdriver was used for automating websites.

I recently went to the first Appium Conference held in London to learn about how I could utilize Appium.

Knowing how to effectively test mobile apps and websites is now a full-time job, so tools like Appium are used to help mobile testers test thoroughly. Mobile devices are everywhere now and the development of applications will only grow, so I believe it would be a great skill to add to bolster your testing skill set.

Artificial Intelligence (AI)

AI is where scripts, machines, or anything that’s not human perform tasks that may or may not be complex.

Within AI there are a number of different areas. One that’s becoming more common now is machine learning (ML). Machine learning is when AI provides you with answers or data based on previously generated data. It takes all of the information gathered and makes predictions on future outcomes or decisions based on this historical data.

One well-known example of ML and AI is the AlphaGo Zero software from Google’s DeepMind company that taught itself to play Go. Within three days, it was able to beat the previous version of itself (and that version bested 18-time world champion Lee Se-dol).

In testing, we can use ML to predict outcomes of test cases by looking at historical test result data. It can be used to predict which test cases should be prioritized over others when certain parts of the system have been updated. It can tell you when a test case was last run so you can determine what test cases are the most important to be run.

We’re constantly investigating how to become more efficient, save time, and complete jobs faster. AI can aid in this, so it’s a good idea to know its strengths and weaknesses, and how it can be used to help you with your testing career.

We’re at the very early stages of AI and how it can be utilized within daily testing activities,helping us achieve a high level of quality of our products. Ensuring that you keep up with or are ahead of the developments and applications of AI within software testing will help solidify your expertise in the field and help future-proof your career.

Docker and Containers

Containers give us the ability to store a number of different systems virtually within the same location. This means that if one environment needs a website front end, server, and database in order to function, all of these can be stored within the same place.

For testers, containers provide a quick solution to deploy test environments that are stable, fast to set up, and a mirror-copy of staging or production environments.

Learning the strengths and weakness of the architecture that your environments are built on will mean that you know how your application can be affected and whether certain types of tests will be more suitable to ensure a higher level of quality.

For more information, I’ve written a post about containers and how we use them at my current company.

Learning about Docker and the containers technology, and how to test it, will help future-proof your testing career. Since it allows quick deployment and scaling of infrastructure, it’s being widely adopted by a number of DevOps teams in different industries. This means you, again, will give yourself more options when looking for your next job opportunity.

Some Suggestions From Me

After listening to the expert’s suggestions, I’ve come up with a short list of additional areas that I think would definitely help bolster your testing skills arsenal.

Debugging

Debugging is where you step through code in order to locate defects. This isn’t something that every developer or engineer likes to do. Having the patience to walk through code can be an overlooked skill.

Debugging can take a few minutes if you know what’s wrong and where it is, but it could sometimes take days to figure it out—particularly if the code base is made up of hundreds of files.

Debugging also makes you practice reading the code, and it will help you develop a further and deeper understanding of the code base you’re stepping through.

This skill is useful for developers and is great for testers to future-proof themselves, especially if you are developing test code in any capacity. But since it’s not one that’s actively trained, you should invest your own time into debugging code to further narrow down where in the codebase the defects can occur.

You can do this by reading log files of applications when errors occur, and tracing them through the code base to see if you can track it down.

For more information on how to improve your debugging skills, read 5 Steps to a Bullet-Proof Debugging Strategy.

Augmented Reality, Mixed Reality, and Virtual Reality

Devices that provided users with each of these experiences have been around for years. However in 2017, I believe they were accepted and adopted by a larger consumer audience.

As this new tech is adopted more and more by the public, the demand for experienced testers in these areas will increase.

Since it’s still very new, there’s not much in terms of frameworks or testing standards that can be applied yet.Still, this is the time for someone to take that first step and create something that everyone can use going forward.

Cloud Computing

Cloud computing is the on-demand delivery of IT resources like compute, database storage, and applications via cloud service platform over the internet using a pay-as-you-go format.

Platforms like Amazon Web Services (AWS), Google Cloud Platform, and Microsoft Azure are some of the options that are available presently, with AWS storming ahead of the competition.

So why should you as a tester be concerned with what tech your applications are built upon?

Well, it’s the same reason as I mentioned earlier about containers. If you know what tech your application is built upon, you should be able to understand it’s strengths and weaknesses and how that will affect your application.

Therefore, you will be able to test your application better and help close up any holes in security that may be exploited, ensure it’s performant, and that the end user has a great experience when using your product.

How Future-Proof Are You?

When you’re working within a technical sector, the ability to step back and assess the bigger picture of what’s going on in your industry, what things are emerging, what things may be going away, and what’s here to stay will tell you a lot.

It will clearly show you where you should invest your time on new skills, and which ones you may need to strengthen.

If you want to do more in order to future-proof yourself, why not try and go to a talk in one of these areas yourself, read blogs, listen to podcasts, or watch YouTube videos of experts in these fields. You can also get a free subscription to AWS and experiment with the Elastic Container Service to get a basic knowledge of containers.

I hope this post has given you a foundation of what’s to watch out for now in 2018 within the field of testing. There’s a lot of options. So don’t wait—get started.

The Challenges of Leading a Distributed Test Team

Here’s my next post which appeared first on Simple Programmer..

Being a manager of a distributed team of people can be a challenging role. When you have to communicate on a daily basis and those people are in different time zones, or if you’re at the end of the project delivery date, you may find your stress levels slowly creep up higher and higher.

I’ve not only been trying to lead a distributed (albeit small) team for the last year, but I’m also trying to balance my daily testing tasks, researching new tools that could help my team, and maintaining or improving the overall quality of projects across the company.

Let me share with you a few challenges that I’ve faced and how I have or am planning to overcome them in future.

Different Time Zones Between Team Members

It’s important in every project for team members to regularly communicate. It’s easy for details to be missed, especially during busy times in the development process.

When your team are in different time zones, it’s even more important to make sure that they communicate daily. You’ve only got a specific amount of time overlap to talk directly with your team all at once. This time must be utilized and never skipped by anyone.

Ways that your team could communicate could be via the daily stand-up meeting (if you use Agile methodologies), or making sure you are giving daily reports via other channels, like internal communication systems such as Slack or Skype. Whatever medium you use, just ensure that the communication is regular and everyone gets involved.

Lesson: Plan your meetings at times where everyone is available and projects are not busy.

Balancing the Workloads of All Team Members

Even in teams as big as 100 people, it’s important that everyone feels like they are not overwhelmed by the work we have and can also perform their job to the best of their ability.

Having a distributed team also requires you to take into account what time other team members may also be working so you can assign the correct project to the correct people. You can use tools like Trello, Asana, or even a spreadsheet to manage project assignment. Doing this will help those team members more easily manage their workload so the project is more closely aligned with their schedule.

You’ll also need to consider the skills that are needed for a project and how long the project will last. This will help you assign the right team member to the right project. For example, say you had an upcoming project where the test framework needed to be written in C# and some of your team were proficient in Java and some in Ruby. You may find that this type of project will be easier to and faster to implement by members of team know Java as they are quite similar languages.

Lesson: Try and match the right projects to team members with similar skills, interests, and time to carry out the project.

Trying To Manage Everyone and Everything

Despite being a small testing team where I work, we have a continually big workload. We are managing the quality and daily testing for two-to-four projects at once. With my job, carrying out daily testing tasks, building the automation suites, and trying to monitor the overall quality strategy in the company can be a lot to do for one person. But not for me, I’m Superwoman!

Only (and obviously) joking. Seriously, I realized very early on that there isn’t time to do everything, and that I can’t manage everyone and everything by myself. So, to make sure I can carry out all of my tasks, I prioritize my work and delegate lower-priority tasks to other team members.

I split responsibilities between team members according to project deadlines, project requirements, and team member availability. I encourage my team to do the same thing to make sure they also don’t feel overwhelmed and can get their jobs done well.

In a distributed team, this can work to your advantage. For example, if you have team members who are in a time zones hours ahead or behind you, you can leave them work when your overlap time is over. Then when you return, the task may be fully or almost complete, ready for you to focus on something else.

In order to do this, you need to know your team and trust that they will carry out their jobs so that you can focus on the big picture.

Lesson: Get good people to help you manage things.

Trying to Monitor the Progress of Your Strategy

When I first arrived at my current company, one of the first things I was asked to do was outline a Test Strategy for the company.

Every month I try to track if we’re still on our way to achieving those goals I set a year ago, if they need adjusting, or if they’re no longer relevant and some of the strategy needs revisiting.

If all of my team were in one location, it could be as simple as having a quick meeting once a month to find out where we are. But having a distributed team means that this needs to be planned in advance and at times where everyone is available. With some members of my team in time zones as far away as four hours at times, meetings need to be planned at times during the project where each member won’t be busier than usual, like the week before a product delivery.

Utilize free calendar resources, like Google Calendar, to share a team calendar booking in important dates where the team will be busy or unavailable. Use this to regularly track your progress with team meetings.

Lesson: Have a clear idea of your vision and keep track of it being executed.

It’s Easier for Quieter Members to Hide Away

Make sure the quieter members of your team are also vocal at team meetings. Find ways to get everyone engaged with their team. It’s easy for those that are quiet to sit back and let others that are more confident speak up, making themselves be heard, especially if these meetings are over Slack or Skype.

You can do this by directing specific questions to these people or asking them their opinions. This will prompt them to speak up a bit more. If English is not their first language, they may be more inclined not to speak up, but giving them a little nudge by asking a question to them here or there may be all they need to build up their confidence.

Keep in mind that there may be a reason why these people are quiet, so before you ask them questions in meetings with everyone ready and waiting, maybe talk to them privately. Learn who they are and what motivates them, then use that to regularly engage with them.

Lesson: Learn who your team are and how they like to communicate, and encourage them to participate.

It’s Hard to Keep Everyone’s Skills Up

In any technological field, like software development, virtual reality, big data, or artificial intelligence, one of the challenges is to make sure you are constantly learning. Things are always changing and it’s important to keep your skills up. It’s hard to find time to build your skills (especially within testing and QA roles) because at the end of the day, you’re employed to develop and ship a product. Improving your skill set in an area is usually a byproduct of working on something day in day out. But, I would suggest you encourage your team to carve out some dedicated time in their week to learn new skills or improve on existing ones. This not only will keep people in your team, show you care and want to invest in their personal development, but will also make them enjoy coming to work.

Utilizing resources like Pluralsight courses (aimed at those in technical professions), YouTube videos (for everyone and about everything), knowledge sharing sessions, and pair programming are all easy to access. All of these are free to low-cost ways to improve your knowledge and strengthen the skills of your team.

It’s easy to let deadlines let us work through these times, so make sure your team schedule them at times where they have little to no distractions (if at all possible).

Lesson: Tell each team member to calendarize a time slot for themselves to work on skills weekly to improve their knowledge.

The Bottom Line: Have a Great Team

Leading a distributed team as well as all of your other responsibilities as a manager is a challenging task. You shouldn’t underestimate that the amount of work done day-to-day will be the same as when you lead a team all in the same location.

Sharing tasks among your distributed team members, like responsibilities, projects, and even meetings, will help you balance the efforts of your daily and management tasks. But you need a good team to help you with this.

So, make sure you find the right people to help you. In return, invest some time into them by making sure they are not overloaded with work, get to know them by finding out what motivates them, and encourage them to build their own skills by training themselves.

A Beginner’s Guide to Testing Blockchain Applications

Here’s my next post which appeared first on Simple Programmer..

During the last few months of 2017, bitcoin and other cryptocurrencies were being talked about by some media sources on a daily basis. These currencies, which had been around for years, were suddenly experiencing major growth. For example, the price of bitcoin has grown from just under $750 in January 2017 to $5,856.10 in mid-October 2017.

This massive growth made it a major talking point. So, as these newer currencies came more into the public domain, the technology behind cryptocurrencies was also beginning to gain attention. This technology is the blockchain.

Blockchain applications are being adopted by some of the biggest industries around the world. Because of the nature of blockchain applications, it further supports how important testing and testers are, and that the field will be more highly thought of and sought after in the future. So as testers, it’s only right to wonder how this new technology will affect your day-to-day work, new opportunities, and current skill set.

What new tools will you have to learn to test blockchain applications, and what skills are needed to test them?

Here, I will outline what the blockchain technology is and how we, as testers, can prepare ourselves for testing blockchain applications.

What Is Blockchain?

Blockchain is a data structure that exists in many locations at once. You can only add to the blockchain. No deletions or updates are permitted. The data held within a blockchain is decentralized, which means a copy of the existing blockchain is on every machine in the network.

Additions to the blockchain can be seen on every computer in that network and the transactions are cryptographically linked to the previous transaction. Therefore, carrying out fraudulent transactions is very difficult to perform. To do this, someone would have to rewrite their history to the beginning of time, which is extremely resource-heavy.

In order to update every machine in the blockchain, the machines have to sync to have a common history. Although all machines will eventually have the same data because of this syncing action, only the more recent transactions are synced more often.

For a new transaction to be added, the decision is reliant on the majority of participants in the blockchain. Once the transaction’s authentication has been validated, the new block is added to the blockchain.

What Is It Used For?

Currently, blockchain is used mainly by the financial and automotive industries because of its highly secure structure. As I mentioned earlier, it’s also the technology that underpins cryptocurrencies like bitcoin and Ethereum.

Not all blockchain technology is open-source. There can be private blockchains like the ones used in banking systems.

What Types of Tests and Techniques Can You Perform on Applications Built on Blockchain?

There are many different types of tests that can be performed at the various stages of developing software projects. Below are a few types of tests that can be utilized to ensure a high level of test coverage and quality for blockchain applications.

Unit Tests
Unit tests help developers ensure their code is performing correctly at the lowest levels and smallest parts of functionality. This should always be the first line of defense to ensure an application catches the majority of bugs early during development.

Integration Tests
Integration tests help developers and test engineers ensure the communication of their code between different components, and possibly between internal and external systems like databases.

User Interface
User interface (UI) testing uncovers how the application works from the end user’s perspective. It’s important to ensure that you carry out UI testing to make sure their experience is positive or that they at least get the correct feedback from the application when it doesn’t perform well.

Application Programming Interface
Application programming interface (API) testing gives you confidence that you’ve validated the responses that your application receives from external APIs and makes sure the formats of your API requests are correct and being handled correctly.

With blockchain applications, there is also a similar type of technology to APIs that allows you to adopt the same testing practices for APIs. These are called smart contracts.

What Are Smart Contracts?

Smart contracts are a big part of the validation technology within a blockchain. A smart contract is a “set of rules in the form of programmable constructs that are capable of automatically enforcing themselves when predefined conditions are met.” For example, a precondition could be transactions trying to append to a specific ledger will undergo additional validations or go through a different set of validations that are more robust.

Although a smart contract is very similar to an API, whereby it has public functions that can be called by anyone registered on that blockchain network, it cannot call external web APIs.

So why do I think that testers are extremely important when testing blockchain applications over other types of systems? Simply because once a contract is deployed to a blockchain, it can never be changed. So you have to be very confident the testing that’s performed is of a high level of quality and that everything that should be covered has been covered.

If a defect is found in production, then a new version of the contract has to be created and deployed. New versions of existing contacts can’t simply get the existing data transferred in; you have to manually initialize the previous data with the new contract.

Updating a contract and rolling back an update is also not a viable option; this increases the complexity of development and means that the importance of implementing and running unit and integration tests on your application before it reaches production could save you major time and money in rectifying defects.

What Skills Do Testers Need for Blockchain Applications?

Although blockchain applications are relatively new in software development, I don’t think testers need to adopt new skills in order to test this type of technology.

Some of the skills I’ve highlighted below are natural skills of good testers or simply skills that you learn early on in your testing career, which grows with your experience in the field.

Critical Thinking
The ability to critically analyze and think about and around a problem is a timeless skill for testers and will be even more sought after for testing blockchain applications.

Testers think about problems such as: Will transactions still execute if x, y, and z are not done? What happens if the network has lots of transactions waiting to confirm? What feedback is given to the user in these cases? Should this be the feedback given to the user? Or is this feedback exposing any security risks?

Another thing to consider if embarking on a new project is to question whether blockchain is the best technology for your use. It’s the new shiny toy, so everyone will want to adopt it, but it may not be suitable for what you want to achieve.

Things to keep in mind are compliance issues; for example, you shouldn’t store health or criminal records, as there are no deletions allowed. So, when criminal records for minors can be wiped, you won’t be able to do so with this technology.

Test Design Techniques
During the ISTQB-BCS Foundation Software Testing syllabus, you are introduced to test design techniques. Knowing even the basics of test design techniques, like boundary value analysis and equivalence partitioning, will make sure you are constantly thinking about and checking the inputs and outputs of the application.

Things to consider could be: How will the application act when you input values that are within, on the edge, and outside of the boundaries of acceptable values? Will the transaction complete? If not, what type of error will be returned? Is this error code correct for the type returned? Should it return anything at all?

Automation
Strong automation skills in all languages, either for lower-level unit, mid-level integration, or API or high-level UI tests, are good skills that can be transferred to testing blockchain applications. Having a solid foundation of automated tests will be needed to ensure that the majority of issues are found early in development.

Manual UI Testing
If a solid foundation of automated tests is put in place, testers can focus on the outlier issues that can more easily be found via exploratory testing performed manually.

Being able to work independently, investigating different areas of the application, trying to find weak areas, and being able to successfully reproduce these are always skills that great testers will need. Despite the world looking to automation to perform a lot of the repetitive and arduous tasks, manual testing skills are still something to hone and improve.

Learn New Tools Quickly
As new technology comes to light, the list of tools to test this technology will also grow. You’ll need to be able to learn how to use these new tools quickly and judge which is the best for what you’re trying to accomplish.

Future-Proof Yourself and Prepare for Blockchain

Hopefully by now, you have a better understanding of the blockchain technology and no longer think it’s as scary as your first thought.

I’m sure if you’re a tester, you already have the foundations of the skills I’ve outlined above. My advice is to push further into an area that you have an interest in and possibly try to improve in the areas where you are weakest to give you the best chance to grow your skills when testing blockchain applications.

Testing Your App Using TestFlight

Here’s my next post which appeared first on Simple Programmer..

There are many types of testing that you can add at different phases of your project. Your last line of defense is testing within the final stages of the project—where you can catch those last-minute defects that can potentially harm your product’s use, damage its value to the user, and tarnish your company’s reputation as a manufacturer of high-quality items.

Various tools exist to assist you during these final stages. One of the most well-known tools for testing iOS apps is TestFlight.

If you’ve never used TestFlight, this post will be an introduction to the tool and will describe how you can best use it during your project to ensure few to no defects affect your final product.

What is TestFlight?

TestFlight is an online tool that allows you to install and test mobile apps “over-the-air.” Historically, app developers tested their projects on actual devices that had to be connected to the development machine using a wire to get a new build. Over-the-air allows developers to distribute their latest builds to testers without the need to connect to the phones physically. Because of this, new builds can effectively be sent to testers in any part of the world.

Who should use it?

TestFlight is perfect for small businesses that don’t have access to a large in-house testing team. And since it’s free, it allows for more businesses other than just revenue-generating companies to use it.

But it can also be good for enterprise companies with remote testers. The access and ease of distribution to up to 10,000 external users and the ability to gain their feedback is extremely useful to companies of all sizes.

When was TestFlight released?

On December 23, 2010, TestFlight was founded by Benjamin Satterfield and Trystan Kosmynka. At the time of its initial release, TestFlight was a single platform designed with the intention of testing mobile apps for both Android and iOS devices.

In 2012, TestFlight was acquired by Burstly, which raised a considerable amount of capital from venture capital firms in order to develop further features and launch TestFlight Live (a now discontinued service providing the user with real-time analytics and engagement metrics).

In February 2014, Apple acquired Burstly. By March of that year, they terminated support for Android devices.

How has TestFlight changed since being acquired?

Today, TestFlight is one of the many options for you to use to test your iOS app. Although there are alternative systems, a few of these still utilize TestFlight to do their app build distribution, especially since the limit for external testers was increased to 10,000 users. With that number of users, you’ll be sure to receive adequate feedback and get enough testing done to ensure a high-quality level of your app.

Currently, you can use TestFlight only for apps developed for Apple devices, as it’s available only to developers within the iOS Developer Program.

Once signed up for this service, you can distribute your app builds to internal or external beta testers who can provide you with feedback about the app. Along with this service, the TestFlight software development kit also allows developers to receive remote logs and crash reports from testers. Being able to gather data from users when they have experienced an issue can be invaluable, as some defects can be difficult to reproduce. The data from these crash reports could provide you with information to help you track down the issue and fix it before it affects anyone else.

At what stage should you use TestFlight?

Although TestFlight would be great during the earlier phases of development to test your initial builds, you need to upload a release build in order to use TestFlight. Using release builds to perform initial testing on isn’t typical, because they contain less debug information. In the event of a crash, you won’t have sufficient details in order to step through the code, find out what happened, and try to fix it.

Release builds are created when the developer is satisfied that the major bugs have been caught and it’s ready to be a beta candidate build. This is a close representation of the final version that will go to customers. Generally, the build is stable with few to no crashes. Any issues encountered at this phase usually require only minor tweaks, so release builds are better for beta candidate builds.

You can also use TestFlight after release to get live information about your app’s performance and feedback from users. Gaining ratings and reviews once an app is live is challenging, so giving users a way to easily submit feedback may help combat this issue.

What are the benefits and drawbacks of TestFlight?

While the history behind the product’s evolution gives you an idea of its features, there are many reasons why you may, or may not, want to choose TestFlight for your testing phase.

Benefits

Wide range of users
Being able to distribute your app to up to 10,000 external users over-the-air gives you the opportunity to get feedback for your app from a large number of users that you wouldn’t have previously been able to reach.

Having a beta testing group at this maximum amount is most common with game companies, as they have prospective users registering ahead of time to test the latest versions of a game iteration.

For normal apps, this number of testers is very large. I would typically expect a maximum of a couple hundred beta testers. Because remember, the more testers you have, the more test results you have to analyze and feedback you’ll need to review.

Keeping the number of beta testers to something sensible is recommended, no matter what maximum limit TestFlight provides.

Testing on multiple apps at once
You can test up to 100 apps at once with either internal or external users. You can also upload different iOS app builds—watchOS apps, tvOS apps, and iMessage apps—at the same time.

Internal users
Up to 25 members assigned to your team in iTunes Connect can also test your app on up to 30 devices.

Unlike external testers who will have access only to the build that their assigned link points to, internal testers will have access to all builds of your app. If you have multiple versions of your app—for example, a free and paid-for version—the testers could have access to each build of these different versions so you can get one person to test multiple apps.

Quick distribution
The tool allows you to quickly distribute your app to a specific set of beta testers over-the-air immediately. You may choose to build different versions to perform A/B testing of your app with your testers. Being able to send a specific build to a number of users at once will help you gain more results faster.

Easily accessible
TestFlight is integrated within the Apple Developer Dashboard that you need to use in order to distribute your app within the App Store. You only need to switch tabs to gain access; no separate login is required.

Drawbacks

iOS only
If you’re developing a cross-platform tool, this will allow you to test and receive feedback easily only on your iOS build. You’ll have to do additional work if you want to test the Android build.

Extra review needed to distribute via TestFlight
Apps that use TestFlight will require a Beta App Review and must comply with the full App Store Review Guidelines before testing can begin.

This is because your app is effectively going out to a select group of the public, so the Apple team wants to ensure that the build that is distributed is of the same quality as the current releases in the App Store.

Just like with the normal app submission process, if your app has significant changes between versions, you’re required to resubmit it for review. This will add extra time to the last phases of your app’s development before it reaches the public.

After you have completed beta testing, you will need to submit your app for review through the usual iTunes Connect screens.

Limited time for beta testing
Submitted builds are accessible from TestFlight for only 90 days after invitations to the testers have been sent. The app will stop writing after these 90 days, so you’ll have to either update your beta submission or get all of your testing completed within those 90 days. This restriction doesn’t affect your internal testers, only those external to the project.

Restricted to specific builds
Only release builds that are signed with the correct provisioning profile and distribution certificate are allowed to be uploaded for beta review. So the build needs to be signed appropriately in order for it to be built and accepted.

Only for devices running iOS 8 and above
A new iOS version is released every year, but not everyone upgrades and not everyone can upgrade, because Apple chooses to drop support for “old” versions of iOS hardware within about three years. This does slightly limit the reach to your audience, as you have no idea what devices they are using and whether their devices support iOS 8.

No application programming interface for continuous integration/continuous deployment
The upload process has to be carried out manually, as there is no way to integrate continuous integration, delivery, or deployment tools into iTunes Connect. So this will slightly slow your progress during testing.

Is TestFlight for you?

Testing your app is a fundamental step in the process of developing one. Without testing, you’re blindly throwing your creation into the wild with no assurance that it will even work for your potential customers. TestFlight is a robust tool for iOS testing that’ll help you manage your beta testing stage effectively and get it out to potentially thousands of users.

I can completely understand the excitement to develop your idea into something tangible, but you must keep in mind that the goal is to create a great app, not simply to distribute anything that resembles your idea into the app stores.

To do this well, you need to remember that integrating thorough testing (even if you’re a team of one) into your development is essential for building a robust product and successful project. And gaining feedback from beta testers via TestFlight before your product is opened up to everyone could reveal some key insights.

This testing could change some big features and could possibly put your app on the course to becoming extraordinary. So while there are several drawbacks to using TestFlight, I think the positives ultimately outweigh the negatives and make it worth considering TestFlight as a resource for beta testing your next app.

How Important Is CI and CD For An Appreneur?

Here’s my next post which appeared first on Simple Programmer..

During the day, I work as a test engineer. But I also consider myself a developer—more specifically, an appreneur.

What is an appreneur? Why, it’s any entrepreneur trying to build a business via mobile applications. You could be producing templates for others to use, creating apps to sell directly on the app stores, or providing a number of other services reliant on mobile applications.

I work by myself, so I’m running a business solo. Most appreneurs work in this way, though a few have a small team of trusted contractors handling specialized jobs.

It’s important to find tools and processes to help you continue to maintain the quality of your app once it is launched. Especially if it’s just you; you want to spend more of your time and resources creating and launching new products than maintaining older ones.

You want to reduce the time you spend on individual tasks, improve the quality of your end product, and reduce the cost of your overall efforts, and you need to carefully consider what might be the right tools to help you do all that.

Continuous integration and continuous development have been used by project development teams for many years to make the development process more efficient and get better end results. Can we use the same processes as appreneurs?

As an appreneur, I’m the one responsible for the design, development, testing, and business activities involved in creating and releasing a product to market. Make no mistake, completing one of these projects is no small feat.

If you are an appreneur, you are probably trying to increase or update your range of apps being sold in the App Store, or expand your catalog into a new App Store ecosystem, or create a new sustainable revenue stream related to app development. It all depends on where you are in your business.

Regardless of what specific paths you are pursuing, you are certainly hard at work, juggling multiple activities and milestones and products for your business. Even if you have a small team of contractors, you’re still overseeing the whole thing. Add to that all the pressures and distractions of life, and you’re managing a lot.

Continuous integration and continuous deployment were designed to let teams function better and create a smoother workflow. Generally, they’re used when you’ve got a lot of people working on a product or project to decrease confusion, potential bottlenecks, and the possibility of releasing products with issues. With appreneurs, it’s just you or a small team—will these processes actually help?

Let’s look at what exactly continuous integration and continuous development are, discuss some of the advantages and drawbacks, and then talk about if they are right for you as a solo or small team appreneur.

What is Continuous Integration?

Continuous integration (CI) is the practice of merging development branches that have been verified into a single, shared repository several times a day. CI is used by established and professional businesses across various sectors.

Developers use CI to avoid integration hell, the problem where conflict resolving battles are waged against merging multiple code branches into one shared location.

The concept of CI was adopted into the practice of extreme programming (XP) (which was designed to improve software quality and responsiveness) to be used in combination with automated unit tests that would automatically run in the developer’s local environment before commits to the mainline branch would occur.

A commit is the act of moving your development code from your local repository to the remote repository. Once the code has all passed these automated tests (which are run on build servers), commits to mainline (which is the shared repository) are accepted.

These automated tests are run on build servers (usually set up by people with experience with CI and CD tools like DevOps or test engineers) after a build is successful.

This process helps avoid one developer’s work-in-progress breaking another developer’s features. It also means that developers can be more confident that if the tests fail, then their work won’t make it into the production environment or, worse, into their customers’ hands with bugs.

XP is not usually adopted by solo developers or small teams; it is generally used by larger, professional, established product teams. CI isn’t a process specifically for appreneurs developing apps, but it is a general practice that can be adopted by anyone developing software.

Common Tools for CI

At the time of writing, the most common CI tools are:

  • Jenkins
  • TeamCity
  • Travis CI
  • Go CD
  • Bamboo
  • GitLab CI
  • CircleCI
  • Codeship

For a more detailed explanation about all of the above tools, please see this excellent article on Code Maze.

What Is Continuous Deployment?

Continuous deployment (CD) continually releases updates to the production environment after changes to the product are verified by automated tests at various stages through the development process. It is also used by established and professional businesses across various sectors.

CD tools are used in a chain of events, so when one step in the workflow is successful, the next is kicked off. When that is successful, the next begins. This practice means that no manual intervention is necessary to deploy to production.

The process works step by step until it gets to the production environment. If at any point a step fails, the appropriate people are alerted and fixes are made to ensure the process starts and runs again successfully.

Using CD in conjunction with CI means that development teams should have less chance of releasing products with issues to customers.

Continuous deployment should be the goal of most companies that are not constrained by regulatory or other requirements. Because it automates the process, it won’t be held up by errors or a forgotten step, and it also means that a failed step can’t be missed.

Again, CD isn’t specifically for appreneurs developing apps but can make you more self-sufficient in your deployment process to production.

Common Tools for CD

There are some useful tools that help with automated deployment. These tools are generally used by larger teams, but you can use them as a solo appreneur. Here are some of the most common CD tools:

  • Jenkins
  • ElectricFlow
  • Microsoft Visual Studio
  • Chef
  • Octopus Deploy
  • IBM UrbanCode
  • AWS CodeDeploy
  • DeployBot
  • Shippable
  • TeamCity
  • Codar
  • Distelli
  • XL Deploy
  • GoCD
  • Capistrano

For a more detailed explanation about these tools and others, please see this great list of CD and CI tools by DZone.

Fastlane

Automating other processes can be a big help, too. A tool that that I have found for mobile app developers which automates the app submission process is called Fastlane. Fastlane is open source, so it’s free to use. This tool can be used in conjunction with CI and CD to help push your apps through the submission process to production faster.

As the app submission process is so tiresome, even if you’re only submitting for one platform, it’s worth looking into Fastlane to save you time.

The Benefits and Drawbacks of CI and CD

Generally speaking, CI and CD are considered practices that most companies should use. Since that’s the case, should appreneurs try and implement these concepts, too?

Let’s look at some of the benefits and drawbacks of these practices and see whether it can work for us small timers.

The Benefits

Peace of mind
No need to worry about broken builds getting deployed because, providing you have the right tests in place, the build will fail and it won’t be released.

But if you have tests in place, how might the build still fail? Building software is always an iterative process. We are only human, so minor and even major bugs can slip through to the production environment if the majority of your code is not covered by tests.

The way to prevent the same bugs from reappearing is to write a new test to help identify when this situation will occur. So if the test fails, you will know that this bug is likely to occur again. You can then fix your code to make sure the test passes and the bug never again sees production.

New tests are automatically run
Any tests that you add during your development process are automatically picked up and run. You can also pass different parameters to run version tests in certain conditions.

Allows you to work with the minimum team size
You don’t need a full-time DevOps, release manager, and several testers to ensure your product’s quality level is maintained across environments. Once you put in place the relevant build chains, you can make sure your development and production releases are monitored by the minimum amount of people from different disciplines.

Flexible and trustworthy
If your team expands, you don’t need to worry that they won’t remember to run tests before they perform a commit to the master branch. If their commit fails, it doesn’t break everything for everyone else.

Easy to extend with templates
After you have come up with the perfect configuration for your project, you can create a template to reuse. As your project grows, you can use the template to create new build configurations.

The Drawbacks

Time to set CI/CD up
Once your CI and CD builds are done, you just have to maintain them. But until then, you’ll have to dedicate a bit of time to setting up the initial build configuration templates.

How much time? Well, that’ll all depend on how quickly you learn, how much experience you have with CI and CD tools, and what tools you select. So it’s pretty subjective, based on you.

There will be a learning curve
How steep your learning curve to overcome is will depend on how much experience you have with CI and CD tools.

You have to learn how to set up build configurations, link these to your code repository, write unit tests (if you haven’t been doing this already), integrate the tests into the builds, and possibly also add in a tool to output your level of code coverage after every build. Then once the build is created and passed, you have to learn to link the build’s output (probably the app executable) to the CD tool to push to your next step.

Maintenance
Those new shiny tools will get updated as well, so you’ll need to keep on top of the software updates and licenses. It may not be essential to upgrade to the latest version of everything, but ensure your tools are compatible with each other and that you keep an eye on the new features appearing in new versions.

Can be costly for the more popular tools
Let’s not forget that some of these tools aren’t free and some of them that do offer a free version are capped. So if you want the more costly option, make sure you have enough budgeted for these development costs.

Although the pricier options are sometimes preferred in larger companies because they come with a certain level of support that you don’t get when using free licenses, I find you can get quite far using a free license and having Google at your disposal. I would recommend that you try a free tool before spending money on a paid-for service. After all, using CI and CD tools may not be suitable for you or your project, so keep yourself and your budget in mind.

Builds can be fickle
During a previous role for my day job, when my team was new to TeamCity, we found that our builds were constantly failing. Again, this failure is part of the learning curve; it should also be considered in the time budget you need to put together a robust template. So if you find your builds are failing often, you’ll have to put more time aside to figure out why.

So: Should Appreneurs Use CI and CD?

There are some good points about using CI and CD—mainly that these processes enable an appreneur to remain self-sufficient for longer and makes you confident that your builds are stable and high quality all the way through to production.

But it does take a lot of work up front. And if you don’t have any previous experience with CI and CD tools, it will probably take you longer.

If you’re working with apps as a hobby and don’t have any previous experience with these tools, I wouldn’t recommend setting up a CI or CD process. The time you’ll take to learn the tools and maintain it all may not give you a great return.

But if this is the beginning of building a solid development base and practices for a long-term project, you really don’t have anything to lose.

Start with one process first, preferably CI. You can then build up your test suite to ensure a high level of code coverage (code covered by unit tests) and still control the release process to ensure nothing gets released accidentally while you’re still learning the tools. After you’re confident with your CI builds, pick a complimentary CD tool to help you build your solid foundation.

Anything you can do to make building your app business more efficient and your products more robust and higher quality can only be a good thing.

Releasing Your App to the Store in Style Part 3

Here’s my next post which appeared first on Simple Programmer..

During the first two posts in this series on how to release your app to the App Store, I discussed the importance of configuring the first two screens of your App Store page.

In Releasing Your App to the Store in Style Part 1, I stepped through the App Information screen and why each setting (for example, the title and category) is important to help drive more users to your page.

In Releasing Your App to the Store in Style Part 2, I discussed how the price and where you make your app available could affect your sales, and also how you could use this to help with trialing your app on a smaller audience.

In this post, we’ll discuss what you need to configure before you can finally submit your app for review to Apple, before you plan for that all-important release date.

We’ll discuss each section of this screen in the order that they currently appear so you can read through this post and the screen at the same time from top to bottom without having to jump back and forth.

Let’s go!

Version Information

This section gives prospective users a first glimpse at your app. Sure, the icon may have drawn them in, but you need to have your best images here. If your images aren’t high quality, they will not convince viewers to download your app.

App Screenshots

For the current generation of Apple products, if your app runs on an iPhone, you must provide screenshots appropriate for a 5.5-inch display. The Apple guidelines state that “screenshots must be in the JPG or PNG format, and in the RGB color space. App previews must be in the M4V, MP4, or MOV format and can’t exceed 500 MB.”

You will upload screenshots for both iPhone and iPad in this section. If your app supports both iPhone and iPad, you need to add at least one screenshot for iPad. You are allowed up to five screenshots for iPhone and five more for iPad.

Read iOS Screenshot Specifications for more information on the guidelines you need to follow when creating your iOS screenshots.

Screenshot Options

You have a few options available when managing your screenshots in this section.

Media Manager

This option allows you to upload individual sets of screenshots for each iPhone or iPad size. You can also make any one device use the default 5.5-inch display screenshots by checking a checkbox next to each device section.

The benefit here is that if you have different designs for different devices, you can showcase both on the store to your users. A small downside is that it may take a little while longer to gather and format the screenshots to the correct sizes. But if you went to the trouble of creating new designs, why not put in the extra effort to make sure they’re seen by as many people as possible?

For more information about the Media Manager, read this Get Localization post.

Choose File

This option allows you to select the images you want to use for screenshots from your file system.

Delete All

This option will remove all screenshots and any App Preview files you have added to the 5.5-inch display section. It’ll save you from having to remove them individually. Being able to remove everything at once will be useful if you have updated the graphics of your app and want to change them all.

App Preview

An App Preview is a short video users watch right on the App Store that lets you demonstrate the features and functionality of your app. You are allowed only one app preview.

This preview video is a great marketing tool, but don’t do it if you can’t create a high-quality, effective video that equals the brilliance of your app itself. Users may overlook your app if they’re turned off by the video.

If you really want to make a video, but don’t have a large budget to hire someone, please, do it yourself only if you know you can produce something spectacular. If the video is low quality, that indicates that your app could also be of low quality. And that’s the last thing you want.

One idea for those with small budgets is to look for contractors on Fiverr. Most jobs start from £5 (extra services may increase the price, though) and you can get a few free revisions included in that cost to tweak your project if you’re not happy straight away. Just remember that the devil is in the details. The more details you provide, the better your chances will be that your first version comes back close to what you are happy to use.

In addition to being high quality and well-made, it needs, above all, to be short. Time is money, so make sure your star features are showcased quickly in your video. Between 15 and 30 seconds should be your target range. If you think your video may be too long, try it out on a few people and get their opinions before you spend time reducing the length.

Read App Preview Specifications for more information on the guidelines you need to follow when creating your App Preview.

Other Sizes

When you add in your iOS screenshots for the 5.5-inch display, these will be resized and used for the other sizes: 4.7-inch display, 4-inch display, and 3.5-inch display. Again, the benefit here is that if you have different designs for different devices, you can showcase both to your users on the store.

To add custom screenshots to the Other Sizes section, go to the Media Manager.

Promotional Text

Waiting for your app to be reviewed can take up to a week if you’re a new publisher to the Store.

However, promotional text gets updated to your App Store page straight away, bypassing the submission process. It lets you inform visitors to your page of any current app features quickly.

This text appears above your description on the App Store for those with devices running iOS 11 or later.

Description

After the images, the description provides the user with the greatest insight into your app and its features.

Overloading the reader with every little amazing feature your app has is not the best strategy. Giving someone too much information may leave them bored by the time they get to the end (if they don’t lose interest and switch to something else halfway through).

And giving them something too short may not intrigue them enough to download your app and see for themselves.

You need to find a balance where you deliver the best information in a short, snappy pitch. List your best features to catch the attention of those that skim-read.

This description will also be used for your Apple Watch app, so you may want to keep it as short as possible. It really depends on whether you mind having users scroll to read the full description in their Apple Watch.

You also need to be thoughtful in the words you use to describe your app. Use keywords in your description you think a potential user will search with to make it more likely that your app will show up in their search results.

Keywords

This field is like the description in that you fill it with keywords. However, unlike the description, you can put in words that you wouldn’t use to describe your app, but users may search with. For example, the Google Sheets app doesn’t contain the word “number” or “calculation” in its description, but as users are familiar with associating these words with this tool, they may use them when they search for that app.

Make sure you add at least one keyword into this field to improve the chances of your app being listed in search results. Separate your keywords with a comma. (No need to add a space! You’ll just be wasting precious characters.)

Picking relevant keywords for your app has become as important and as much of an art as picking the keywords for your website. For this reason, choosing your keywords now has its own name: App store optimization or ASO. Tools like Google Trends and Google Keyword Planner will help you figure out what terms users are searching with the most so that you can find the relevant keywords to add into your app to ensure it appropriately turns up in the most search results.

ASO can be incredibly complex; the best keywords to use will depend on your app. I suggest that you spend a bit of time on trying to select the best keywords using the tools I described above to get you started.

Support URL

Visible on the App Store beneath your description, the URL tells users where to go if they need support information for your app.

Marketing URL

Also visible beneath the description, this URL tells users where to visit in order to gain marketing information about your app. For example, you may want to provide more in-depth information about the features of the app, the background of why and how it was made, any information about you in relation to the app, etc.

iMessage App

The iMessage App allows you to create an app extension that lets your users interact with your app within Messages, extending the functionality of your app. Users can interact by creating and sharing content, adding stickers, making payments, and more, without ever leaving their conversations.

The iMessage framework is available in iOS 10 or later.

You can add screenshots to your iMessage App extension here in the same way as the iPhone and iPad version detailed above.

Read the iMessage page for more information about iMessage.

Apple Watch

Apple’s wearable device Apple Watch has grown in popularity since its release in April 2015. By developing an app that is compatible with Apple Watch, you open yourself up to a wider range of people.

As the display for Apple Watch is smaller than a normal phone display, you’ll need to design an icon that’s a suitable size but also ties into your app across other devices. Upload your icon in this section.

In this section, you also add in your screenshots for the Apple Watch app. You can have up to five screenshots for the Apple Watch (just like the iPhone/iPad sections). Similarly, the options for the Media Manager, Choose File, and Delete All are also the same. As mentioned earlier, there’s no separate section for the Apple Watch description, as it shares the description defined for the iPhone and iPad.

Read the Apple Watch Screenshot Specifications page for more information.

Build

The “build” is the application file that you have produced using your development tool. This is the section where you actually upload the build that will become the public version of your app. You can create the build using Xcode 6 (this is the current version stated) or later. If you are unfamiliar with Xcode, it’s a piece of software known as an integrated development environment (IDE) that can be used to develop apps for Mac, iPhone, iPad, Apple Watch, and Apple TV.

Now, you can use a number of different development tools, or IDEs, to create your iOS build. Once you have created your build, you will need to upload it to iTunes Connect. iTunes Connect is Apple’s portal for developers to manage their apps.

The easiest and latest way of uploading your build is via the Application Loader 3.0 (this is the current version stated) or later. The Application Loader is a hassle-free graphical user interface, which connects to your iTunes Developer account and allows you to upload a new build or add new in-app purchases to a project.

Once you have created your release build, you select this IPA file from the Application Loader, and it will verify that your app is correctly configured to upload. If there are any issues with the information that you have provided, you will be shown these details so that you can fix it. Once uploaded, you will see it in iTunes Connect under the Build section.

This section also shows the build version extracted from the build file you uploaded and the date you uploaded the file.

If you included any assets within your build, these are also extracted and shown here. For example, if you included your app icon, you will see it shown above the version number on the left.

General App Information

App Store Icon

This icon is the first piece of content from your app that users will come into contact with, so you need to make sure it’s high quality. You also may want to ensure that the image is representative of your app’s core functionality so the audience will know intuitively what the app is about.

For example, the App icon for Google Docs is a document with lines on it. Most software users associate this image with a file, piece of paper with text, or document, which automatically suggests the functionality of the app. Linking your app icon and app functionality will lower the barrier to entry and help you retain users.

The icon uploaded here will be used on the App Store. It must be in the JPG or PNG format, with a minimum resolution of at least 72 DPI, and in the RGB color space. It must not contain layers or rounded corners. Your app icon must also be 1024 x 1024.

For more information, please see App Icon Specifications.

Version

This is the current build version number of the app that you are adding. It is advised that the numbering format follow standard software conventions (usually “major.minor”).

Rating

This section is related to the age rating for your app, not the entertainment tagging that users provide. The rating is automatically calculated for you to make sure that all apps are rated objectively.

To get your app automatically rated, you read through a list of categories and check either none (no examples of this occur within your app), infrequent/mild (only some examples occur within your app), or frequent/intense (many examples of this occur within your app) to each option.

Once you have entered an option for all categories, the system will calculate an appropriate age rating based on your answers.

Copyright

This is the name of the person (or entity) that owns exclusive rights to your app. The year the rights were obtained are placed before this name.

Trade Representative Contact Information

This section outlines the contact details of the trade representative contact for your app. It is to provide additional information for the Korean App Store. If you’re a hobbyist or a solopreneur, your contact information will be provided here. If not, you should list whoever handles your business’s external communications.

If you wish for this information to appear on the Korean App Store, then check the box next to the text “Display Trade Representative Contact Information on the Korean App Store.”

If you provide your details in this field, your information will be displayed in the Korean App Store. If you don’t wish to show your contact details in the Store (which is perfectly understandable), you can choose to omit your details. This shouldn’t prevent you from having your app in the Korean App Store, but you should double-check with an Apple representative to confirm.

By default, your contact information is placed within these fields. If you remove your details, you may find that they default back to using your real contact details. The only way to remove your details is to add something like “no address” into these fields. Again, I’m not sure how this will affect your submission and being displayed in the Korean App Store, so you should seek advice from an Apple representative.

If you don’t want your app to be available in the Korean App Store, you need to disable the app within the territories section in the previous screen, “Pricing and Availability.”

Routing App Coverage File

If you would like to specify the geographic regions supported by your app, you can do so by providing a file in the format GeoJSON and uploading the separate GeoJSON file in this section.

Game Center

This option includes your app within Game Center. If you have added in functionality to your app that makes use of the Game Center features, once you enable this option, your build properties that relate to Game Center will be extracted and displayed here.

App Review Information

Sign-in Information

If you give users the option to sign into your app using a particular social media channel, Apple will need a social media account to test this, enter your app, and test its functionality.

In order to proceed through the review process, your username and password credentials for any social media accounts you want to be tied to your app must be valid and active for the entire review process. If they aren’t, your app will be denied and you’ll have to start again.

If you want users to sign into your app, check the “Sign-in required” checkbox and provide a username and password in the hidden fields.

Contact Information

You need to include the contact information of the person the App Review team should contact if they have any questions or need additional information during this process.

Notes

This section can be used to provide any additional information about your app that can help during the review process. Include any information that may be needed to test your app, such as app-specific settings. Providing these here may speed up your review.

Version Release

After the app has been approved, Apple can release the app straight away if you check the option “Automatically release this version.” However, most publishers that aren’t hobbyists usually have a marketing strategy with a whole release timeline etched in stone so that they can build anticipation for their product.

If this kind of plan is what you have in mind (albeit maybe on a smaller scale), you may want to choose the option “Manually release this version.” To delay the release of the app until a certain date after it has been approved, you can choose the option “Automatically release this version after App Review, no earlier than [provide your chosen date].”

The earliest date your app will be made available on the App Store is based on your current time zone. If the App Review process isn’t complete by this date, the version will be made available directly after it has been approved. So if you want to maintain control over the release of your app, make sure you allow for ample time between submitting for review and getting your app approved.

Once you have submitted your app, it will be set to the “Processing for App Store” state. While your app is in that state, you can’t get new promotional codes, invite new testers, or reject your app. You can upload a new build, though, in case you missed something small but significant.

After it has been approved, the app will move to the “Pending Developer Release” state. Once it is in this state, you’re able to generate and give out promotional codes, continue beta testing, or reject the release and submit a new build (because, you know, accidents can happen).

So that’s it!

I’ve shared with you everything that I’ve learned so far about how to create a great App Store page.

Having this page configured to a high quality will put you ahead of the competition. You’ll drive more traffic to your page and downloads of your app will increase. But actions make all the difference. Make sure that you put what you’ve learned into practice as soon as possible.

Once your page is live, it’s important to check how your page is doing by looking at the analytics surrounding your page.

The algorithms that Apple and Google use when listing your app within search results change all the time to make sure that no one publisher remains on top.

Because of this fact, you will need to adjust the content of your page accordingly to try and make sure you keep getting a high amount of pageviews and hopefully downloads.

It’s not easy sailing from here, but you’ve done a great job in getting this far.

Good luck with your release!

Releasing Your App to the Store in Style Part 2

Here’s my next post which appeared first on Simple Programmer..

Configuring a great App Store page is usually one of the last stages in the app development life cycle. Because it comes at the end, it is sometimes overlooked, or the information is added in a slapdash sort of way, without much time or attention dedicated to the content.

However, even if you have created a great app, no one will find it if you don’t put some thought and attention into the screens on the Developer Dashboard that make up your App Store page. And even if by some sheer stroke of luck, a few people manage to find your store page, if what they see and read doesn’t convince them to download your app, all your efforts will have been for nothing.

Two key aspects of configuring a winning App Store page are getting the pricing and the availability right.

The price of your app can make it more or less appealing to users, depending on who your audience is and what platforms (iOS or Android) you release to.

And availability of your app can also affect your sales and analytics results. If you release to too wide an audience when your app hasn’t been tailored for all locations, you may hinder your app’s progress.

You must find that balance and use your findings to guide how you configure your App Store page.

In this post, we’ll delve into how to set Pricing and Availability—as shown below—in a way that gives your app the best possible start in life.

You’ll learn to set up the price, set up a price change schedule (if necessary), and set the availability of your app.

Setting Your Price

You should already know from your chosen business model whether you want to sell your app for a fixed cost or price it as free. You would have gained all of this information from the idea validation and research stages of development, and from audience feedback and competitive analysis.

We tend to equate price with quality, so your initial instinct may be to price high and at a fixed cost. This strategy has been known to work on the Apple App Store, as the typical user of iOS devices prefers high quality. But if you try to use the same technique on Google Play, you may find that users are less likely to buy your app. This is because apps in the Play Store usually sell for lower prices or are free, without this being indicative of their quality.

Please be aware that if you decide to sell your app, you must have a Paid Application agreement.

What is a Paid Application agreement?

The Paid Application agreement is a contract you have to review in order to sell apps. You don’t need to submit anything to Apple in order to be compliant with this agreement. It’s simply an online form that you complete with the necessary bank and tax details.

In order to review the agreement, sign into the Apple Developer Account page and select Agreements, Tax, and Banking.

Under Request Contracts, click Request for the iOS Paid Applications contract type. An agreement will appear.

After you review the agreement, check that you have read and agreed to the contract, then click Submit.

The iOS Paid Applications contract will now be displayed under Contracts In Process. You then need to set up your Contact Info, Bank Info, and Tax Info in order to get your sales paid into your account.

For further steps on the Paid Application agreement, please read this step-by-step guide.

What’s the best price for my app?

Only you can decide that, but there are things you can research to guide your decision. Look at similar apps currently on the App Store to help you figure out an appropriate cost for your app. If you can, try to find out how many downloads these competitive apps have had. When pricing your app, take into consideration how long it took you to create your app and how much effort you have put into creating it.

Get feedback from your target audience to gather their opinions about what they would pay for your app. Ask strangers for their opinions over direct friends or family. Strangers won’t care so much about your feelings and are more likely to give you their honest opinion and thoughts. If you’re not a social butterfly, talk to friends of friends, colleagues at work, or online users via groups such as Facebook groups or forums. Ask these people a specific set of questions that will help you justify your price model.

Use the feedback you gain from your target audience and competitive analysis to come up with a price that’s suitable for your users.

Before you set your price …

You should take a look at the All Prices and Currencies link, which takes you to the pricing matrix that details the pricing tiers for each territory. A territory is a country where the Apple App Store can distribute apps.

Pricing tiers are what you use to set your app price. Each tier is of a different value. The lowest tier is Tier 0. This is the tier you select if your app is going to be priced as free.

There are 87 pricing tiers and seven alternate tiers available for you to pick from. The pricing tiers are set by Apple, and they vary across territories.

How do you set a price?

In the Price Schedule section, you will see that you already have a default value set to Tier 0. The Start Date will be today’s date, and the End Date will be “No End Date.”

Select Plan a Price Change to change these defaults.

You will then be presented with a table where you can set the Pricing Tier, Start Date, and End Date for your pricing change.

The Start Date is the date that this new price will come into effect on the App Store. The price changes at the beginning of the day. To make the price change immediately, select “Today.”
The End Date is the date that this price reverts back to the prior value (if you’re setting it for the first time, this will be the default of Tier 0). Selecting “No End Date” will set this price permanently. Prices change at the start of the day. One-day sales have to end at the start of the next day.

Promotional Pricing

You also have the option to configure any promotional pricing periods. For example, if you have a launch price of 99p (or USD $0.99), then you can schedule this so that after a month it increases to £1.99.

Price changes and promotional offers are something that are good to have planned prior to configuring your App Store page.

It’s important to understand how to use price changes to build up scarcity by lowering the price for short periods. But you must be careful, as many users equate price with your level of quality. Ensure your full price reflects what you think is the accurate value of your product.

A good example would be to run a Summer Sale promotion and cut the price of your app by 25 percent for one week. By advertising that the sale is only on for a short length of time but not stating when it will end, your app may get more downloads, as buyers will be uncertain when the original price will be reinstated. However, if you do feel compelled to advertise a certain time period, don’t state anything longer than three days. If you do, buyers will think they have time to come back to it later. The next thing you know, more than three days have gone by, the sale is over, and those who were keen on downloading your app are no longer interested, because they didn’t get a reminder that the sale was ending. Again, make sure you plan this carefully.

Keep in mind also that too many price changes may lead users to believe that you don’t know what you’re doing or that your product just isn’t worth the higher price. Also, if your users know your app frequently lowers in price, they may decide to strategically wait until it drops, in order to get a bargain.

Lay out a plan for when and why you will schedule a price change. Use your marketing channels—Facebook page, website, et cetera—in order to properly communicate these changes. If a special occasion like Christmas is coming up, consider lowering the price for a set period and posting when you’re having the sale.

Availability

Availability is where your app will be available. Setting this means you determine which territories your app will be available in. You can select individual options from the 155 territories currently supporting the App Store or by choosing Select All, which will highlight all territories.

Yes, you may think that in order to get the most amount of traffic, you should make your app available to the maximum amount of users. But if you plan to serve only a specific market, or are releasing your early versions to gain feedback, you may want to limit your audience to certain territories.

Companies like Supercell are known to carry out this type of strategy. They frequently do soft launches in Canada to test their ideas and see if what they have just created is a hit, is a miss, or needs a bit more work. If they have a hit, they then open the app up to all of the other territories. If not, they move on to the next idea. Their soft launches differ in length of time, and in whether they release to iOS and Android simultaneously, or one following the other if the initial release receives good enough results.

Volume Purchase Program

This program gives certain groups, like academic institutions, the option to gain a discount when purchasing large volumes and multiple copies of your app.

If your app targets clients that have multiple devices, you may want to have this option. Places like schools and businesses have multiple smartphones and portable devices; therefore, every device would have an individual app. Giving a discount could encourage your clients to buy your product.

These are the options you can choose from in this section:

  • Available with a volume discount for educational institutions
  • Available with no discount
  • Available privately as a custom B2B app

Bitcode Auto-Recompilation

Bitcode refers to the type of code that is sent to iTunes Connect. This is known by its full name of “LLVM Bitcode.” Sometimes Apple automatically rebuilds apps that include bitcode to improve hardware support or optimize Apple’s software—for example, to downsize executable sizes. If Apple needs to alter your executable, then they can do this without a new build being uploaded.
If you want to retain full control of your app, you can opt out of using bitcode. To do this, select the option: “Don’t use bitcode auto-recompilation.” Checking the box means that you have opted out of having your app auto-recompiled.

However, you may want to consider granting permission of this feature. If you disable bitcode auto-recompilation, a few things may happen:

  • Your app may be unavailable for some devices.
  • Your app (including when it’s within an app bundle) may become unavailable whenever apps must be recompiled.
  • If your app is unavailable on the App Store, then Universal Purchase, re-downloading, and Family Sharing won’t work unless all platform versions have been approved.

To make sure your app remains available on the App Store, you need to upload a new build of your app that contains bitcode, test it, and submit that build with a new app version to App Review.

To read more about bitcode, see Apple’s support page.

Where to next?

You now have a thorough understanding of how to set up pricing and determine where your app will be available.

In this post, I’ve taken you through:

  • Pricing tiers and how to set a price for your app
  • The reasons you might choose to make your app free or sell it at a fixed price
  • Paid Application agreements
  • Promotional pricing
  • Apple territories and availability
  • The volume purchase program
  • Bitcode auto-recompilation

Your App Store page is beginning to take shape.

Releasing Your App to the Store in Style Part 1

Here’s my next post which appeared first on Simple Programmer..

It seems like everyone’s making apps these days, and maybe you want to be part of it, too.

Maybe it’s to help you build that passive income you’ve always wanted, maybe it’s a hobby, or maybe you just want to cross it off your bucket list.

It’s hard to believe App Stores have only been around since 2008, a year after the release of the first iPhone in 2007. At that point there were only over 800 apps in the App Store. Now, there are over 2.2 million iOS apps in the App Store alone (as of May 2017).

Knowing there’s massive competition, you still want to go ahead and release an app yourself. That’s great. A little competition never hurt anyone.

You’ve done the hard work of designing, developing, and testing your app, and you’re ready to upload your build.

So how do you get your new, well-built, and well-designed app noticed in an ecosystem where everything is fighting for attention already?

First off, put together a really great store page to make sure when it’s seen, it gets downloaded. A catchy title and making sure it’s placed in the right category can get you far, but there are a few more things you can do to improve your app’s chances of getting discovered.

A quick note before we begin…

Developing an app requires an overall knowledge of the different areas within the Developer Console, so before releasing it to the App Store, you’ll need to have already done the following things:

  • Used XCode to create your build
  • Created debug, development, test, and release builds
  • Signed builds
  • Created provisioning profiles
  • Fully tested your app
  • Created an Apple Developer account for iOS (be aware this requires a yearly purchase of $99)

If you’ve already done all these, then you’re ready to go.

Getting Started

You should know from your app’s design and development stages,what devices you’re targeting, as this will have informs the design. Therefore, you should also know which resolutions and sizes you’ll need to create images and app icons. Refer back to your documentation if you can’t remember the specifics.

There are a number of configuration screens that you’ll need to complete when preparing your app for release.

You should also know which languages and countries your app will be available in, because the translations should either be included in the initial release, or planned for at a later stage in your production schedule.

The Developer Console

The Developer Console is the dashboard for setting up the information about your app and managing your App Store account.

There are many areas to the Developer Console. Once you have an account, make sure you explore all the areas, familiarizing yourself with what you can do and anything more you need to do to set up.

The section you’ll mostly work within when releasing your app is the My Apps section.

Every app you release to the store has an individual place in this section. Once you have created a new app in this area, you are ready to begin.

The details that make up your App Store page come directly from the App Store information you include here. And your App Store page only includes the information you include on these screens, so you need to be thorough. These details can be visible on your page—like the description, title, and screenshots—or work in the background—like keywords.

Double-check before you submit your app for review, as submissions from new developers could take up to a week to pass submission. If you have to make changes to this information, you have to start again from day one.

Configuring your App Information

Once you’re familiar with the Developer Console, you need to configure, and then add settings and the details for your app.

The details within the App Information section will be used across all devices that this app serves. Once your app is released, any changes you make to the App Information will be reflected in the next version of your app that you release.

Localizable Information

These are all of the details of your app that can be translated into languages other than your primary language.

Name

This is the name that the buyer/consumer/customer will see on the App Store page. Making your app name easy to spell and related to the functionality of the app means that you’ll have less to explain about the main features of your app. A good example of this is Snapchat.

Ensure your app name isn’t longer than 50 characters. In fact, sometimes two short words are better than a single long word, as (from your testing) you’ll know that the words wrap. Overall though, one short word is the best option for a name.

Privacy Policy URL

This URL links to your privacy policy. You may not think you need one if this is just a hobby or you’re doing this for fun, and you may be right. But it all depends on your app’s target audience and content.

If you have any of the following features, or target these audiences, you need a privacy policy:

  • An app for children
  • If you offer free subscriptions
  • If you offer subscriptions that auto-renew
  • You allow account registrations
  • You access a user’s existing account

If you collect user- or device-related data, you are only recommended to have a privacy policy.

Primary Localised Language

This setting is very important, however it’s not subtitled, and your attention isn’t really drawn to it as it is with other sections on this screen.

You can also set your primary localised languages here via a drop down.

General Information

Bundle ID

This is the ID that you used in Xcode. Be aware, it can’t be changed after you upload your first build. So get it right!

You have the option to register a new ID or chose the iOS Wildcard App ID option. You usually use the wildcard option for apps that don’t use app-specific functions like in-app purchasing or Game Center. You can read more about Wildcards App Ids in the Apple Developer library.

SKU

This is a unique identifier for your app. Don’t worry, it’s not visible on the Store so you can use any obscure ID you wish. Just make sure you keep a note of it if it’s that unusual.

Getting into the habit of creating SKUs in a specific format is a good idea, so that even if it’s not clear to someone outside of your team, you’ll be able to look at your SKU ID and know what it relates to without looking it up. For example, you may choose to use the first three letters of your app name in capitals, and then maybe the date it was first released. It’s really up to you.

Apple ID

This ID is automatically generated and assigned to your app. It’s arbitrary, so don’t try and make sense of it. But you may want to keep a note of it somewhere easily accessible. It’ll save you logging back into the app store and going to this page in order to find it.

Languages

Primary Language

This is simply a read-only text field set by the localizable primary language you already set. I know it’s confusing having language defined in two places, but it’s the way this screen is laid out at the moment.

You need to set up the primary language in which the app will be used. Additionally, you have to set up the languages for which the app will be localised.

If your localized language isn’t available, then the content served will be from the primary language.

If you can’t find a supported language you would like to use, see the FAQ.

Category

Now you must define what category your app is best suited to.

What’s the main function of your app? Does it provide entertainment, improve your productivity, or make it easy to keep up with the activities of your favourite charity?

You could try and classify your app in a category that you know is popular in the hopes of it getting discovered, but this kind of classification may mean that those looking in the correct category for your app will miss it. It’s up to you to decide what’s more important.

If you’re not sure about what to choose or have other questions, you can see the App Store Category Definitions.

So, you’re analysing your app to see which category will suit it best. But what if you think it could fit into more than one? Well, you’re in luck. You have the option to assign a primary category and an optional secondary category.

The primary and secondary categories are currently as follows:

  • Books
  • Business
  • Catalogs
  • Education
  • Entertainment
  • Finance
  • Food & Drink
  • Games
  • Health & Fitness
  • Lifestyle
  • Magazines & Newspapers
  • Medical
  • Music
  • Navigation
  • News
  • Photo & Video
  • Productivity
  • Reference
  • Shopping
  • Social Networking
  • Sports
  • Stickers
  • Travel
  • Utilities
  • Weather

License Agreement

Here you can set Apple’s Standard License Agreement or edit it to best suit your project’s or team’s purpose. The License Agreement is in place to detail who has ownership of the product from the End User’s perspective, i.e., the person who downloads your app. This differs from the Privacy Policy, because in a privacy policy you as the developer define what you are doing with the information you gather through your app, in order to protect and enforce the rights of the users of your app. By contrast, the License Agreement arguably works more to protect the interests of the app developer.

Rating

An age rating is required, as it classifies the minimum age of the audience that can use your app. The age rating of the app is based on the most mature rating required across all devices.

The current list of age ratings that you can clarify your app under is as follows:

  • No Rating
  • 4+
  • 9+
  • 12+
  • 17+

Additional Information

This section allows you to preview your app and see how the details you have set up will look on the App Store.

It’s a good idea to see how the settings you have chosen are depicted and positioned on the App Store page before it goes live. For example, it could be that when you preview it, details in an image you’ve taken look a lot smaller and are only visible when you open the full size image. This may not be good for catching the eyes of those just browsing for a new app on their smart phones.

If you find something that looks incorrect, you can always go back and update the details, even after you submit your app for review.

What’s your next step?

So, now you have been introduced to the Apple Developer Dashboard. You have a basic understanding of how to configure the App Information screen in the My Apps section in order to start building an attractive and informative App Store page.

So now what do you do with this initial knowledge of the App Store? Why not build upon it?

There are still two more screens left to populate with information before you submit your app for review.

In my next post, I’ll share what information you need to supply on the next screens to build a great App Store page.

Why Testing Could Be the Most Important Stage When Developing

Here’s my next post which appeared first on Simple Programmer..

Testing is an area of development where, at different stages of the development cycle, the product or service to be tested is measured against set criteria. These criteria check that the product or service fulfils the original spec, goal, or intended use.

Testing can be carried out manually by individuals, or automatically by computer systems. If a feature fails testing, it needs to be reworked, then retested.

Features fail testing when the actual results of tests don’t match up with the expected outcomes. The more safety-critical the system under test, the more important it is to adhere to a well-defined approach to testing.

However, just because your system doesn’t carry health or safety risks, doesn’t mean you should skimp on professional test efforts. Your end user invests their money and precious time into your product, so it’s up to you to deliver the most robust version possible.

Why “any old” Testing won’t do

The general view of testers on projects has improved considerably in the last 10 years, as the testing role has become more technical. But besides being technically skilled, great testers are highly analytical, methodical, logical, and thorough; they are investigative by nature and good communicators.

Especially in the case of video games testing, those external to the industry and field underestimate the skills needed to test projects. Because games are seen as recreational activities, those outside of the games industry assume a tester’s job is to play games all day. That couldn’t be further from the truth.

Although games testing may not employ more technical types of testing, such as automated, performance, load, or security testing, good games testers use multiple other skills to help them solve problems.

For example, on one game project I tested, I had to perform graphical checks on an area. The area was divided into squares, but the boundaries of that square weren’t visible. I could only check where I was by inputting a command. So I wrote a small script to help me perform the checks. I set the square coordinates to test so that whenever I moved out of the area, the on-screen character would shout, alerting me I had gone too far. This type of thinking—finding ways to ensure your task gets done more effectively—is what professional testing can provide.

Professional testing takes into account different test techniques and strategies. For example, test techniques can be reactive or proactive. Reactive testing aims to quickly resolve defects as they happen, to ensure the minimum negative impact on customers. Proactive techniques aim to implement testing as early on in development as possible, in order to catch and fix bugs before they become a problem.

Another test strategy could be one using risk-based testing. This is where the approach of the project is determined by the level of risk that could occur.

What makes these test strategies professional is that they are known about and intentionally used in a project. Sure, a non-professional tester could also decide to plan out their test cases based on the impact of the project, but they wouldn’t necessarily be aware of why that would be better than other approaches, or that it even is a test approach.

Professional testing will:

  • Increase the quality of your product
  • Decrease the likelihood of production bugs
  • Increase the likelihood bugs will be caught in pre-production environments

Good testing ensures that the number of defects your target audience comes across is very low.

Professional testers, developers, and even those on the product team know testing should occur throughout the development life cycle. This constant review ensures that critical and major bugs are caught early on, when they are cheapest to fix.

It’s Wise to Invest in Great Testing Resources

Investing in great resources may mean investing in great tools or people.

Putting your money into people, whether that’s offering a salary that will attract more experienced candidates, increasing the salary, or offering training to your currently employed testers, is worthwhile. When people are shown respect and given chances to excel, they give back with dedication, loyalty, and hard work.

Providing the proper tools to help support your team to uphold the quality of testing is also a good idea. There’s no point in having a great team if they will be limited by their tools. I know there are lots of great free and open source tools out there (like Selenium and NUnit), but sometimes spending that little bit more can move you forward tremendously.

Testing is the Gatekeeper of Quality

The buck stops with testing. The people on the testing team need to know their part to play and that they sign off on the level of quality with which the product ships. Your team needs to understand that the quality of the brand is determined by the product that is shipped and not by what it was intended to be. The time and money a customer invests in your project should be paid back by making sure you release only the highest quality product.

Your Efforts are in the Public eye

The public doesn’t know about the difference between the waterfall and agile development life cycles, or other technical strategies. You may have testing efforts taking place throughout your entire development cycle, but this will be known only to your team.

The public and your customers are probably aware, however, that products have testers. So if products ship with bugs, they are likely to blame the testing effort over anything else.

Testing Helps Uphold Brand Image

Having a high-quality product is beneficial to any brand. It suggests a commitment to quality throughout your processes and company, whether a high level of quality is specifically spelled out within your brand guidelines or not.

Your brand image is fragile. Negative press from a buggy product can shatter your solid, high-quality image in a much shorter time than it took to build. For example, as much as I love Windows and Visual Studio, historically, Microsoft is known to release buggy software. I know people who update to the latest major version of Windows only after the first patch is released, because they don’t want to deal with the inevitable bugs that will unfold (I must say that since Windows 10 and the release of Visual Studio 2017, Microsoft’s image has improved, at least in my perception).

Rebuilding your brand’s image will take twice as long and be twice as hard if you let it slip.

Make Time and Budget for Good Testing

The quality of a product is determined by a lot of factors. A quality experience is created not only by the design, user experience, and functionality of a product, but by the amount of bugs users don’t encounter. Bugs hinder users’ progress and give them a bad experience with your product.

Basic testing can be done by anyone, but professional testing is needed to ensure a high level of quality, which will in turn uphold your brand’s image. Don’t skimp on testing with your project; it could be your downfall!

9 Steps To Approach A Development Task

Here’s my next post which appeared first on Simple Programmer.

As a new developer, I’m trying to focus on producing the best work the least amount of time. This is obviously going to take me longer than someone who has worked for a number of years in development and gained lots of experience. But I believe that establishing the right process now may save me a lot of time in the future.

Now, I want to recommend a good development method, especially for beginners. I also want to introduce you to steps you should work through before you even start writing any code.

The Basics of Scrum

In my team, we work using the Agile methodology Scrum. For those that aren’t familiar with the process, here’s a brief explanation.

Scrum is a process of working to create a product that is iteratively developed by breaking down all new requests for big features (known as Epics) into bite-sized chunks called Work Items.

Each project usually has a team of five to nine people (the optimum being seven), who work on an agreed set of items for a set length of time known as a sprint.

Our team sprints usually last two weeks, so every two weeks we have a new set of items divided up between the team.

You Have Your Item, Now Where Do You Begin?

What I found difficult to know when I first began was where to begin my work item, or in other words, what to work on first. Once I’d worked out the most time efficient order in which to complete the tasks, I went about tackling number one on the list.

Moving from testing to development, I didn’t have much experience with unit tests or Test Driven Development (TDD). While I knew it was a good idea to use TDD and write unit tests, it wasn’t imparted upon me to put this knowledge into practice. So, given the option as a beginner, I generally made the mistake of jumping into writing the code first.

The Basics of Unit Testing and TDD

Although it’s not expected, our team does try to use TDD. In this system, you write out unit tests to see whether your code produces the correct result for the business logic you’re trying to match.

After you have finished development, this yields a quick way to check and see if any issues have arisen within your code, even years later when new functionality is added.

New functionality means new tests should be written. Eventually, you build up a solid set of tests to fully cover the code you have written, which is known as code coverage.

The tests that you write are usually located in a separate test project alongside your project within your solution, but this is all dependent upon how your team structures your code base.

Managing Time Constraints Using TDD

When I’ve used TDD, I’ve found that coding using this method is great for someone new to development. It forces you to break your code down into small, testable chunks to achieve one purpose. This makes you think more about how you are going to structure your code before you write it.

However, TDD is very hard to stick to when you’re under time constraints (which is almost always). I did want to try and stick to this technique, but I kept coming up against this issue of time.

I think using TDD was a good step in the right direction for learning how to approach a development task, but I felt some bits were missing. It already assumes you have total knowledge with what you’re doing, and that might not be case. You may even find that once you sit down and read the item yourself, you have deeper questions that weren’t covered before. Because of this, I decided to seek advice from someone older and wiser.

Early on into my transition from a tester to a developer, I asked my manager the best way to approach a development task. At the time, he’d been developing for about ten years across different technologies and software, so he’s a pretty good source of information.

Here’s the advice I got in 9 simple steps.

1. What’s your goal?

To establish your goal, you need to do three things:

Clearly understand your work item
Figure out what the business requires from this change
Grasp the business value of this change

If you’re not sure about any of these things, talk to the appropriate people to gain this knowledge before attempting any coding.

2. Discuss the best way to accomplish your goal with others

Consult with other, more experienced minds on your team to help you get to your solution quickly. Again, the aim here is to use your time efficiently.

By all means, try and overcome challenges yourself, but be mindful of the time you spend on it. You should not and do not need to shoulder all the work yourself. No matter what level of experience you have, don’t be afraid to ask for help or turn to the all-knowing Google.

3. Break down your goal into tasks and objectives

Smaller chunks are easier to digest; it’s just logical. Before you begin, think about your goal, what you need to do, and then tackle each task one step at a time.

Making lists or simply brainstorming what you think is involved is a good way to clearly see the steps you need to take. If you order these steps, it will also help you identify a logical order to proceed. Hopefully, this will ensure less jumping back and forth within code.

4. Look for similar existing unit tests and run them

Think about the current functionality that exists in the product you’re enhancing.

Is there anything similar that you can step through and debug to help you make your task easier? If you find any methods like this, try and find tests that execute these methods to check if you can extend them to fulfil your new task.

5. Write your new test

If all else fails, write a brand new test from scratch, but start by writing a test and not by writing the code for your solution. You start by writing the test because you know the outcome you want to achieve. You want to do X to achieve Y.

You will also have some idea of where your new code will sit within the project. Writing an empty method here for your test to run over will provide you something to build upon and expand in order to make your test pass. Lastly, writing your test now will save you time later.

6. Solve the task with the minimum amount of code

Try and use the least amount of code to write a solution for your task in order to fulfil it. Don’t worry about efficiency yet –– just get it done.

You will be tempted to try and write code perfectly to ensure the least amount of bugs, the greatest performance gains, and to show off your awesome coding skills. However, you need to keep in mind that doing all this may take you longer to do than solving the initial problem, especially if the task is small,. You need to keep in mind that you may be over-engineering a solution or trying to future-proof against scenarios that may never happen. Be efficient with the time you have now.

7. Make your test pass…

Run the test over your small chunk of new code. If it passes, great. If it doesn’t pass and the reason isn’t obvious—for example, the condition of the assert wasn’t met—you need to debug the code.

Go through each line, inspecting the value of each variable, property, and return statement.

Once you’ve found the culprit causing the issue, fix it and ensure that your test passes and fulfills its task.

8. …Then refactor your code

Now that your test has passed, you can extend your solution to become more efficient. Don’t forget that for every new method you may need a new test or two or more. This will depend on the number of ways that block of code can be exited. For example, you could go through the block of code where everything functions as normal and you get the result you expect, like a list of objects. But, there may also be a case where you could go through the same block of code and an error occurs which gives you a list of the same objects but they’re empty. Other ways to leave the code could be a number of different types of exceptions. These all would need different tests.

9. Work back through step 7 – 9

Repeat steps 7 through 9 to ensure that the changes you’ve made in your code don’t make the test fail. If it does fail, debug the test to find out why.

Feel free to add in as many assertions to verify the outcome of your tests are correct and reliable at any stage.

And That’s It! Easy, Right?

Well, no. Actually, it takes quite a lot of discipline to avoid jumping straight into coding the solution, especially when you’re a junior developer.

However, if you want to try and take small steps towards using TDD, you could try an alternative approach. If you write tests as you go along, i.e. after every method you create, you will save yourself time after the development of your features.