No app is an island entire of itself; every app
is a piece of the continent, a part of the main
(Apologies to John Donne)
It’s very easy to be so focussed (either as a developer/team/department) on a single app/website/etc. that its place in the “continent” can be forgotten. This is not really a fault of the individual developer/team, rather more an organization problem.
Take the example of a bank’s mobile app in the app store. The journey of a person and the app is much bigger than just using the app itself. How did the person hear about the app in the first place and how did they find it in the app store (just by searching or did the bank have a poster with a QR code on it?), do they log into the app with existing Internet banking details (and if so how did they set up their account – on the banks website?), what happens when they close their accounts or want to uninstall the app? What happens if there is a problem with the app and they phone the call centre? If a new version of the app is released that doesn’t work will that cause an influx of calls to the call centre, overloading its capacity and potentially missing out on sales opportunities from other calls?
At a more technical level, what APIs does the app call into, do those APIs in turn interface with other systems (e.g. a banking mainframe). If the mainframe errors what effect does that have on the API and thus the app and the person using the app?
If a customer has a problem with the app and goes into a bank for help, are the customer service representatives there able to help? If not do they have a “hotline” number to get straight through to IT/specialist app support personnel?
As developers we are also all consumers of software, sometimes this gives us more patience – sometimes less – when things are designed badly or don’t work.
If as software developers we get frustrated what is the “normal” person using software feeling?
Perhaps it’s time that every sufficiently large company had a dedicated user experience team that is intimately familiar with the entire “continent”/user journey. These “UX user champions” can then be part of development teams to ensure that indeed, no app is an island.
Happy New Year!
I think we can all agree that 2020 was one of the most challenging years any of us have experienced. Even though here in Western Australia we have been relatively lucky due to our isolation – we even had our border to the rest of Australia closed, let alone international travel… I’ve had close friends in other countries contract Covid, luckily they are ok.
One thing 2020 has helped me learn is to really try and differentiate between the things I can control and the things I can’t.
If you’ve been a reader of my blog for some time you’ll now I make heavy use of the 3 Wins Technique. I just set my 3 big wins for 2021 and what I realized was that my 2020 wins were, in reality, not things I could control.
I’m not saying having goals that are not 100% controllable is a bad idea, for example having a general savings/investments/paying off debts goal is fine. However you don’t control interest rates or share prices for example.
I still believe the 3 Wins Technique is a simple and effective tool, this year however I am going to be more conscious of setting goals that are in my control.
As a hypothetical example, suppose one of your 3 wins is to “get a pay rise”. This is out of your control. I know that sounds negative, but you can’t force your employer to give you a pay rise. A better goal would be something like “I’m going to learn as much as I can this year and add as much value as I can”. This should lead to the opportunity to have a discussion with your employer and show them the extra value you’ve added and talk about a pay rise. Of course the answer could still be “no”, at which point you can control whether or not you apply for jobs elsewhere – you’ll now have more skills to offer a new employer.
As another example: “get 1000 subscribers/followers on [INSERT SOCIAL MEDIA PLATFORM HERE]”. This is also not in your control. A better version: “I’m going to learn everything I can about how [INSERT SOCIAL MEDIA PLATFORM HERE] works, I’m going to learn how to create valuable content, and I’m going to cross-market my content on the other platforms”. Again, it’s about reframing what you can and cannot control.
It’s likely that 2021 will be another challenging year, but if you set your “wins” based on things you can control and work hard to make them happen, you‘re more likely to finish 2021 with a sense of achievement rather than disappointment.
No credit card needed, sign up for free now and start watching all my Pluralsight training courses for free.
Testing Tools You May Not Know About:
Expand Your Software Development Horizons:
The following are some suggested courses on topics that may not be on your radar but that your may find interesting.
Skills Paths Featuring My and Other Author’s Courses:
If you want a ready made “curriculum” in the form of a skills path check out the follow paths that feature some of my courses and courses by fellow Pluralsight authors:
P.s. Remember to take care of yourself physically, mentally, and emotionally during these trying times.
From the Pluralsight website: "Free April is open to anyone who is not a current, active subscriber."
My newest Pluralsight course was just published and you can start watching today. Selenium is a tool that allows you to automate a web browser and simulate an end-user interacting with your web app. You can combine Selenium with a test framework such as xUnit.net to create tests that check your web app is working as expected.
Automated browser tests can compliment your other types of tests such as unit and integration tests.
From the course description: “Unit and integration tests can help you catch a range of bugs, but not all of them. Even if your unit and integration tests pass, you could still deploy your web app to production and find it doesn’t work as expected. In this course, Creating Automated Browser Tests with Selenium in C#, you will gain the ability to create tests that automate the browser and simulate a real person using your web app. First, you will learn how to set up your test project and write your first test. Next, you will discover how to interact with web page elements from your tests, such as clicking a button or typing text. Finally, you will explore how to create a suite of automated web tests that are easier to maintain over time. When you are finished with this course, you will have the skills and knowledge of Selenium automated browser testing needed to help ensure your web app is working as expected before you release it to production.”
Check out the course today and if you’re not a Pluralsight member you can currently start watching for free with a Pluralsight Free Trial with Unlimited Access .
I recently started to adopt a new practice for my personal life in which when I go to bed and my head hits the pillow, I ask myself three question as I fall asleep.
These 3 questions are:
- What’s one thing I could have done better today
- What’s one thing I did well today; and
- What’s one thing I can be grateful for today
I designed and worded these questions to promote continuous improvement without negative self-talk, and to finish the day with gratitude.
Notice that they all say “one thing” – this is deliberate to make the practice easy to adopt and quick to implement. The funny thing is, I usually think of a few answers for each question.
You could use this technique at the end of a work day, for example on the commute home or as you walk out of the building, to reflect on the work day or project you are working on.
Let me know in the comments if you think you’ll give this a go and what you think of the idea (personal and/or work).
This weekend (Friday 22nd to Sunday 24th of November 2019) you can watch all my Pluralsight courses for free.
You could also watch an entire skills path such as C# Unit Testing with xUnit or C# Unit Testing with NUnit.
The free weekend starts November 22nd at 10:00am Mountain Time.
Check this link for the full list of all my courses.
As the New Year approaches and people start to comment “I can’t believe it’s November”, thoughts start to turn to New Year’s Resolutions and things not accomplished in this year.
Whilst I don’t believe in New Year’s Resolutions per se, rather I try to adopt a mindset of continuous improvement, the end of the year is a great time for reflection.
At the start of each year, I make use of the Three Wins Technique to think about 3 goals (aka “wins”) for the year.
Whether you like to make New Year’s Resolutions, use the 3 Wins or another technique, there’s one thing that a lot of people don’t seem to do…
…and that’s to write them down.
It sounds silly, “I know what I want to do next year”, but for some reason, somehow, writing down your goals gives them power.
You could write them on sticky notes and put them on your bathroom mirror so you see them every day. You could write them on a bit of paper and keep them in your wallet, purse, handbag, backpack, etc. You could (as I do) have a OneNote page for every year with my 3 Wins listed at the top with check boxes next to them.
The important thing is to write them down.
Since I started writing down what I wanted to achieve, I have achieved more. Maybe not everything, but still more.
I’m not saying “write it down and trust in manifestation”, you’ve still got to do the work, but at least start by writing down what you want to achieve.
If you think this sounds silly, why not give it a go anyway? Take your goals, write them down,and see what happens…
If you’re getting started with .NET or you’ve done some testing but want to know how to put it all together and also learn some additional tools then the new xUnit.net testing path from Pluralsight may be of interest (you can also get started viewing for free with a trial).
The path currently has the following individual courses (including some of my courses) taking you right from the basics of xUnit.net to more advanced techniques:
- Testing .NET Code with xUnit.net: Getting Started
- Mocking in .NET Core Unit Tests with Moq: Getting Started
- Creating Maintainable Contexts for Automated Testing
- Writing Testable Code
- Building a Pragmatic Unit Test Suite
- Improving Unit Tests with Fluent Assertions
- Better .NET Unit Tests with AutoFixture: Get Started
- Approval Tests for .NET
If you’re already skilled with xUnit.net you may find some of the other courses in the path useful.
If you don’t have a Pluralsight subscription and you want to watch my courses you can this weekend for FREE!
Click the ad below to get started and then once you've signed up for your free weekend, head over to MY LIST OF COURSES to get started!
Knowing what you need to know is hard. Sometimes harder than the learning itself.
Many years ago I was getting started with .NET v1 and .NET unit testing, Agile had recently been “invented” and I had a printout of the agile manifesto on the office wall. I was also learning Test Driven Development (TDD), mocking, unit testing frameworks, assertions, data driven testing.
I remember it being a little overwhelming at times, so much to learn with fragments of information scattered around but no clearly defined path to follow to get where I knew I wanted to be: proficient and efficient in writing high quality, tested and testable code.
Today things are a little easier but there can still be the: “I don’t know what I need to know”.
This is where skills paths from Pluralsight can be super helpful. I wish I had had them all those years ago.
A path is a curated collection of courses in a specific order to get you to where you need to be for a specific learning goal.
I’m super proud to have contributed to the C# Unit Testing with NUnit Pluralsight path which at the time of writing you can start to watch for free with a Pluralsight free trial.
While it’s certainly possible that you could find the information and learn the topics yourself, you would also waste so much time in getting the information from disparate sources and trying to “meta learn” what it is you don’t know. Ultimately it depends on how much free time you have and how efficient you want to be at learning. You should always keep the end goal in mind and weigh up the costs/benefits/risks of the different ways of getting to that goal. If you want to learn to “how to write clean, testable code, all the way from writing your first test to mocking out dependencies to developing a pragmatic suite of unit tests for your application” then the C# Unit Testing with NUnit path may be your most efficient approach to get to your goal.