Goodbye Lenovo

I just got back from an interesting week at SharePoint Fest DC. The event and the city were great. The interesting part came from some issues that I experienced with the tablet that I use as my main presentation machine. About a year ago I purchased a Lenovo X1 Tablet after having used my Surface Pro 2 for over 2 years. I loved my Surface but it was getting old, so I needed a new machine. In the research I did, I came across the X1 Tablet. Comparing with the price and features of the new Surface Pro tablets, including the Surface Book, the X1 Tablet was cheaper while providing similar specs. The X1 Tablet was also in Lenovo’s Thinkpad line, their line of products sold to companies. So, I decided to purchase the X1 Tablet. For the most part, the tablet has worked really until last week.

I was using this tablet Saturday evening and everything was working just fine. I packed everything up to head out for the trip the next morning. After an uneventful plane flight, other than a few bumps, I arrived in DC.

Sunday evening before my first workshop the next morning I figured I would double check my slides and demos to make sure everything was ready. I pulled my X1 Tablet out of the bag and the neoprene sleeve that I keep it in. I pushed the power button and nothing happened. It was acting like the battery was completely drained, which was odd since I charged it the night before, so I plugged it in and still nothing. Normally this would work to power on the tablet. I then tried to track down a paper clip to use the reset button on the tablet. I finally found one and tried the reset button. Still no change. At that point, I decided it was time to call support. After working with support, they said I would have to send it in to Lenovo to get fixed. This didn’t help me for the workshops and sessions I was doing that week. So I ended up using my PC on a stick that I carry for emergencies. I once had Office switch to unlicensed mode during a conference, so since then I don’t travel without the backup machine. This worked for Monday’s workshop but the rest of the time I needed a screen in front of me. Monday evening I walked to the closest electronics store, 2 miles, to buy a computer since I had to have one. My old tablet was still under warranty when this all happened, I had 19 days left. Which is what makes all that follows extra suspicious. After a snafu with the return box I finally was able to send the tablet to Lenovo. They received the tablet the next morning and they started working on repairing the tablet. The status then shows that the repair was canceled. No message in the system about what was going on. When I finally received the tablet back a couple days later, included was the following letter.


The part I find interesting is that somehow overnight my tablet developed several failures in key components overnight. In Lenovo’s exact words, “4 major parts and other plastics damaged.” They then go on to list out the problem components. System board W/Integrated CPU, HDD, LCD, Finger print reader, LCD touch cable, Camera cable, Camera board, Audio cable, back cover. With all these problems, you would think the tablet would have had to have sustained some major trauma. If you look at the included pictures of the tablet there is not a scratch on any off it let alone stress points where there was a large enough impact to cause the problems that Lenovo is “claiming.”

I find it suspicious that within the last few weeks Lenovo has completely removed all references to the X1 Tablet from their web site and store. If you happen to find a cached link somewhere you will be taken to the home page of their store. Apparently, Lenovo has had enough problems with this tablet that they decided to stop selling it. But not only that they expunged it from their web site. So, the problems people were having were severe enough that fixing the issue(s) was not possible.

In order for all these systems to fail would require that the tablet has literally no reinforcement or protection for key components.

The removal from their site and my tablets sudden onset of complete failure leads me to believe that Lenovo doesn’t want to fix this tablet and leave me with an expensive paper weight. All because they couldn’t test their product before releasing it.

Needless to say, I am not happy with Lenovo at the moment. If this is how Lenovo treats their business tier products, I hate to see how they treat normal customers. At the current point in time I cannot suggest any Lenovo product to anybody. Which is sad because my first laptop many years ago was a ThinkPad and that thing was a tank.

Tablet Pictures

Modern Software Development Lifecycle – Part 2 Continuous Integration

This post is part 2 in a three-part series of posts on Software Development Lifecycle in the “Modern” development paradigm. As I explained in the previous post, I have been thinking about how to integrate client-side code into enterprise development processes. Many years ago, I was introduced to a concept called continuous integration. I even implemented it at a previous employer, it was awesome. Continuous integration is the concept that as changes are made to code they can immediately be combined and tested to make sure everything works. Then once everything checks out continuous integration tools can also handle the deployments for us. As my development has shifted from compiled code to more client-side code, I have been trying to figure out how to use the tools and processes that I have been using with client-side methodologies. I recently figured out how integrate continuous integration into my processes now. This revelation was thanks in part to the push of the SharePoint Framework. I also recently came across the fact the Visual Studio Team Services has added continuous integration capability. TFS supposedly has this feature as well. In order for this to work with our processes in SharePoint and JavaScript you will need to have a working gulp script from the previous part for these instructions to work.

Continue reading “Modern Software Development Lifecycle – Part 2 Continuous Integration”

SharePoint Fest Denver 2017

I recently received word that I will be speaking at SharePoint Fest in Denver for 2017. This event runs May 30th-June 2nd. There are workshops running on May 30th and June 2nd with regular sessions in between. I have been selected to present the following sessions. I’ll update this article with more details and a discount code when I receive it. Visit for more details and to register. Continue reading “SharePoint Fest Denver 2017”

SharePoint Fest DC 2017

I have been selected to speak at SharePoint Fest DC 2017 running from April 17th-April 20th. I really enjoy speaking at these events and I will be doing the following sessions/workshops. Please stop by and say hello if you are in the area. Go to their site if you want more information about the conference, Continue reading “SharePoint Fest DC 2017”

Post to Microsoft Team from Flow

I was preparing a demo for the Arizona SharePoint Pros group on Microsoft Teams, PowerApps, and Flow, and I thought it would be cool if I could have my PowerApp post a message to a channel conversation for teams. After a bit of digging I got it to work. It is fairly simple to setup so I figured I would write this post to make it easier for others to setup. Continue reading “Post to Microsoft Team from Flow”

Manually Registering a SharePoint Add-In

After writing the Modern Development Lifecycle article I came to the realization that the article I mentioned for creating the client id and secret missed an important step. It missed how to create the application itself. So in this article we are going to create and permission an add-in so it is ready for our use. Continue reading “Manually Registering a SharePoint Add-In”

SharePoint Framework Release Candidate 0

In big news on the SharePoint development front, the SharePoint Framework reached release candidate 0 yesterday. What does this mean? Release candidate means that what we are seeing now in the SharePoint Framework is pretty close to what it’s going to look when it reaches general availability(GA). In looking through the release notes associated with this release,, there are quite a few changes. Some of the changes are pretty major and will break any existing web parts that you may have created. So why would Microsoft do this? The reason is to perform some final cleanup of things that did not exist as they should in a polished project. They had to rename and move quite a few things. If Microsoft did not do this now it would probably not happen and there would be areas of conflict and confusion. You can tell the scope of how many different areas have changed by the update steps that are included in the release. Previous releases had a couple things that needed to be updated, while this release has 12 different steps of things that need to be updated. If you are doing SharePoint Framework development I highly suggest that you look through the release notes. The release notes will guide you through all the changes and Microsoft’s direction and thinking about the changes. Some of the most notable changes are:

Continue reading “SharePoint Framework Release Candidate 0”

Modern Software Development Life Cycle Part 1

I have been doing JavaScript development for many years now but it was always included as part of some other server side code that was easy to manage. When I started working on Office365 and doing 100% client side code I have struggled with the best way to manage the artifacts that are being created. With server-side code we just used Visual Studio and that would handle our connection to version control and a plethora of other tools to help us write better code. When things changed to working in Office365 I started out by adding the artifacts to a library in SharePoint and then editing them with SharePoint Designer. I know, I know, SharePoint Designer is not a good code editor but in regards to save performance, SharePoint Designer behaves better than anything else out there. The problem with this is that the code that I am creating is not stored in a centralized source repository. Also, if I wanted to get the code into the repository it was a manual effort to copy the files back to my machine and then check everything in. Dealing with multiple developers working on a project could be rather tricky since we were working on the exact same files. There have been times were changes have been temporarily lost due to a save that did not include the changes from other developers. Because of this I always make sure the library I am using has versioning turned on and sometimes I’ll require checkout depending on the likelihood of multiple devs working on the same files. Another problem with this approach is that there is no way to run any code improvement processes. If I want to use TypeScript for example, your code has to be on a local drive for the TypeScript compiler to do its thing. If you try to run it on a mapped drive through WebDav, TypeScript complains. There are also code tests, bundling, and minification that are tricky to run directly from a SharePoint library. With the introduction of the SharePoint Framework I have realized that I needed to figure out how to best handle the client-side pieces in regards to the Software Development Life cycle. This series of blog posts will cover those topics.

Continue reading “Modern Software Development Life Cycle Part 1”

To TypeScript or Not to TypeScript

Many times, when I go speak on modern development, I get asked the same question, “Do I have to use TypeScript?” So I figured I would answer this through a blog post so I can make sure I answer all the pieces to this question. If you haven’t used TypeScript before I’ll cover what TypeScript is and provide the information so you can decide whether you want to use TypeScript in your projects. Continue reading “To TypeScript or Not to TypeScript”

Using Workflows to Perform Elevated Actions


When making the move to the cloud one of the biggest challenges for developers is how to accomplish tasks that used to be fairly simple. Recently I came across one of these instances. I had a client that we had setup in Office365 over a year ago and since that time several applications have been created. One of these applications was a time off request form. When this was setup it wasn’t brought up that they wanted to limit who could see the requests. We setup a solution where we broke the inheritance of the request after it was created. We only had an admin level account so full testing didn’t happen in this instance. We released the update and apparently it was communicated to another developer that it wasn’t working and instead of fixing the problem they just commented out the permissions section.

Continue reading “Using Workflows to Perform Elevated Actions”