Tag: software development

  • How Important is Software?

    I have a mechanical gaming keyboard, not because I’m a gamer, but I did want to tactile, mechanical feel and I like the idea of lights on the keys. I’ve enjoyed the experience, but the software leaves something to be desired.

    I thought about my experience as I read this review of a more complex keyboard, with the title that notes it’s so pretty you can almost forgive the software. The poor UI and the complexity of operations, not to mention the splitting of the remap functions being unnecessarily complex. That was my experience as the only thing I cared about was remapping the home and end keys to the places I was used to them being on Logitech devices. I have spent a few hours across the last year learning how to map keys, and then relearning when my profile is lost in an upgrade or hardware glitch.

    How much does software matter to customers? I’d argue it is becoming more and more critical all the time. The experience of using hardware, or really any device or service, is impacted by the software that drives it. Software is eating the world, and I think we need to understand that better software design and quality is needed.

    I find that the most talented hardware companies sometimes have the worst software. It’s almost as if they assume their customers will be as talented as their hardware engineers and don’t spent enough time understanding how to better design a user experience for their products. Keyboards, routers, motherboards, and more often use archaic, confusing methods to have customers configure or update the systems.

    I know UX is hard. This isn’t even about graphics or visual appeal. In many cases, it’s about just better understanding of how others view the process and what information they take from what appears on the screen. Over the years I’ve learned that this is not only hard, but also that it takes time and debate, just like features do. I enjoy these moments, and I like to think that I help my employer produce better software for our customers with my feedback.

    I urge developers to have others look at what they present on the screen, and spend time learning from users, both experienced and novice. We often forget how something appears to others when we look at it every day and rush through workflows as we test our latest code. It’s easy to gloss over daily changes as minor when the sum of all changes can be a jarring experience for our users after an install or upgrade. UX is important, and it’s worth putting effort into our software designs, our data models, even the metadata we expose to others.

    Steve Jones

  • The Challenges of Changing Software Tools

    Years ago I set up an email account for my son using Gmail, periodically forwarding things I thought he might find interesting. One day I was with him at his PC and asked if he’d seen something from me. He said he hadn’t and opened his mail. He had dozens of emails, many of them marketing. I asked him why he didn’t delete some of the obvious marketing ones that he didn’t care about. He pointed to the sidebar, where the usage of his account was listed. It showed a few percent of the 10GB he was assigned in use. He said if the usage got too high, he would. For now, he would rely on search to find things.

    That was fascinating to me. I’d grown up with limited space, used folders for organization, and pruned out anything old or useless. It was an eye-opening conversation to me on the difference in how generations looked at computing. That same thing is happening on a larger scale. As this piece shows, newer generations are approaching the way they use computers in a completely new way. They don’t even necessarily know how to find items on their computer by browsing, which is strange for older users. It’s a trend that vendors embrace. In Windows, Microsoft surfaces “Documents”, “Pictures”, “Music”, etc., and I find many people have no idea where those folders actually are in the file system.

    I used to worry that we were losing skills that were needed. However, now I’m not so sure. The scale of items we might save has grown. In many ways, why would we care where they are on a system. Really, we need a way to access them, and linkages, search, and other techniques might be better than relying on our memories of how we’ve filed things. As I think about it, many of the problems of deploying software over the years have been because of incorrect paths. Why should developers manage that? Why don’t projects and compilers just sort this out for us? How many times have I had to add an entry to my PATH variable? Shouldn’t executable software solve that for me?

    Certainly someone needs to care about locations and security and various other details, but for most people using a system, these are unnecessary details. I don’t know “where” stored procedures or functions reside. SQL Server ensures they exist somewhere and the various Object Explorers in tools put them in a place I can find.

    I embrace these types of changes and encourage our industry to make installing and using software, as well as the management of files and other items easier and more autonomous.

    Steve Jones

    Listen to the podcast at Libsyn, Stitcher, Spotify, or iTunes.

  • Teams Security Issues

    At some point during my career sharing files and links in email became a security concern. There were all sorts of malware problems and issues that spread throughout organizations because someone unknowingly clicked on or forwarded a malicious item. At a couple of large organizations, we had to turn off email for days while we cleaned out systems. Fortunately, antivirus and other types of scanning software improved to prevent most of these problems.

    It seems that not all developers learned the lessons of the past. Microsoft Teams has a few vulnerabilities inside it based on link sharing in the chats. One of the issues is that the preview features aren’t well implemented, though Microsoft security doesn’t think this is a problem as a user would notice the link would be incorrect. I think that’s a huge leap and not a very safe one to make.

    I don’t use Teams often, and as a Slack user, I find it rather confusing, busy, and unintuitive. I know lots of others that like Teams and find it very productive in the Microsoft world, and I’m glad we can have the choice of a way to collaborate with others. However, no matter which type of communication mechanism is used inside of your organization, the security protections ought to be very strong. We are often busy with work and distracted. We are often expecting the information in Slack or Teams to be safer than browsing sites on the public internet. Perhaps that’s not the way things should be, but it is.

    Attack vectors that use code inside a webpage are very common, and I dislike many of the “preview” features that I’ve seen in various pieces of software. They slow down the application, especially on a mobile network, and take up unnecessary space. As someone that often can see bandwidth constraints, I’ve prefer that all of these features were optional. Let me decide if I want a preview.

    The trend to build richer experiences in applications and pre-fetch data can make the experience better, but there is a tradeoff. There are potential security concerns, but apart from those, these features can make the experience more enjoyable or unnecessarily slow things down and interfere with the way we use an application. More isn’t always better, especially when the pattern for an individual user might not match what the majority does. If 51% of users often use a feature, I’m not sure the other 49% view this as a positive way of architecting the system.

    Steve Jones

    Listen to the podcast at Libsyn, Stitcher, Spotify, or iTunes.

  • Getting Up and Running with Dapr

    I’ve heard about Dapr a few times from developer friends, but hadn’t really understood it that well. I had a webinar coming up, so I decided to spend a bit of time working with it to understand how it might function with an application.

    I went to https://dapr.io/, and saw the basic outline of Dapr is in this video from their site. I also found this getting started video from Donovan Brown.

    What I gathered from this research is that Dapr is really a set of containers that run alongside your app or act as middleware between different components, including state stores. Most of us might think of a state store as a database.

    As a part of my learning, I went through some of the getting started tutorials.

    The Tutorial

    I followed the getting started tutorial. The first thing was to open a cmd prompt with administrative privileges and run this:

    powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

    Next, I needed to update. I ran the “dapr inti” in an elevated cmd line. I love the first part of this:

    2021-09-13 15_58_38-cmd - dapr  init (Admin)

    I already have Docker installed, with Linux containers, so I can quickly continue.

    I need to start an app so that dapr can run as a sidecar. I don’t have an app configured, but I can run this as a blank one, according to the docs:

    dapr run --app-id myapp --dapr-http-port 3500


    The next step is to test this. I am supposed to use curl to post an http request with this command:

    curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore

    When I do that, I get an error. Apparently, this doesn’t work in Windows, and really, it’s a bash request. Since I’m using the Windows CMD Prompt, I’m unable to read the instructions.

    2021-09-13 16_12_30-Use the Dapr API _ Dapr Docs

    I need to click the PowerShell option and get the Invoke-RestMethod cmd. When I do that, I see that the state is working.

    2021-09-13 16_13_16-C__Users_Steve

    I can also test this with an interactive connection to Redis. Again, in the tutorial, this lets me get to the data store.

    2021-09-13 16_14_40-cmd - docker  exec -it dapr_redis redis-cli

    That was most of the tutorial. I worked with the config file, and then looked at the Hello, World tutorial. Overall, this was pretty simple and worked well for me.

    My Thoughts

    There is a lot of stuff going on here. The concept of a sidecar, is really a container that gets a network call from your app to do something. Then the sidecar does something else. It’s like middleware, or an app server in the older client/server or 3 tier architecture, but without the tight coupling and dependency. More importantly, this allows dapr to scale out and run as a separate process rather than being part of a monolithic entity.

    More work, but also more consistency and this gest you used to building an API rather than having developers inconsistently connecting things together.

    The goal here is really to think about microservices.  I don’t know if I think that’s the best way to build thing, but it is a trend, I like the cloud native focus, and it’s helpful to understand something about this when talking with developers about pros and cons.

    By the way, after my webinar with Donovan Brown and Mark Fussell, I learned this doesn’t require microservices or containers. It can run in many different software models, but abstracts away a lot of the SDK and API struggled with different technologies.