Poor Design

I’m a Mediacom subscriber. They’re the only cable modem choice in town and DSL just doesn’t have the speeds that I want out in my area. So, for internet, they’re the best option I have. They have a customer portal that is less than impressive. In fact, every time I use it I want to cancel my account. It annoys me that much.

Why I hate the Mediacom portal

  1. One of my biggest pet peeves is that I cannot setup my credit card to be charged on a monthly recurring basis through the portal. They can accept a one time payment, but not recurring. In order to set up recurring payments, I have to call a customer support representative. When you call them, they cannot take your information either. Uh…what? Instead, they send you a form to fill out and send back in. If the process is to fill out a form and send it in via snail mail, let me DOWNLOAD THE FREAKING FORM ONLINE!!!!!
  2. I can however place a one time payment at any time. However, you can place a one time payment multiple times and the owed amount never gets updated. For example, I apparently paid my bill online multiple times last month. So this month I owed a pathetic amount of $11.08. Which I paid several hours ago. Yet, when I go back to look at my balance, lo and behold, it appears that I still owe $11.08. Maybe I should pay it again.

Mediacom Pay Bill Screen

An olive branch

While I appreciate being able to pay my bill online, I get extremely frustrated by the design and meager abilities of the portal. As a programmer, I find the whole site frustrating to use and annoying that it hasn’t been updated or fixed in quite a while.

If someone from Mediacom happens to find this post, please feel free to contact me about a consulting engagement (use the Call Me option on the right). Not only will I be able to help you identify what is wrong, I can probably just fix the problem for you as well. It will be better for both you and your customers.

No server restart?

I follow quite a few blogs of various people that make headlines and have a coding background. One person in particular that somehow made the list many moons ago that I have failed to remove is Leah Culver. I think it was her ties to the midwest and the fact that she seems to be putting her ass out there with Pownce (which has since had to close its doors).

In her latest post, she talks about writing a plugin for Django. If you are unfamiliar with django, it is a web framework written in python which loosely follows the model-view-controller design pattern (source).

Before I go on trashing the comments in the post, I’d like to note, I’m not a django developer and never have been. But I think that my overall points come back to good design and practices.

Ok, May I direct your attention to this comment made by Leah.

Let’s take the only advantage first, “can update on the fly, no server restart”. This is a web framework correct? Why the hell are you restarting!?!?! I’m clearly missing something here but for all the web apps that I have created, a restart isn’t required. A reload of my web browser is, but I’ve never had to restart my application or web server. I’m really not sure what she is referring to here exactly so I’m guessing I’m missing something major here. Maybe the application she is developing for requires an application server that needs to be restarted in which case it would make sense. But for some reason, I’m not thinking that is the case. Someone please explain this one to me in the comments.

In the disadvantages of using a DB, I have a big problem with #1, “slooooow”. If your database is slow, it is usually one of four issues:

  1. Bad Code/Database Design – This is usually where people screw up. Maybe they have never run an application where there are several million inserts in a day. Or maybe they’ve never seen the affects of table vs row level locking on updates. Maybe they don’t understand why their query doesn’t match any of the indexes that they have setup. The developer may not understand what an index even is! This is why developers and DBAs need to be on the same page in the database / code design. Even if you don’t have a DBA, there are plenty of web sites out there that can help you figure out how to tune your application and find slow points in your database code.
  2. Improper Database Tuning – This is where a skilled DBA can save your ass. If you don’t have one on staff, contract this out. There are consultants out there that are worth it. Find a good one, pay him his price and you will be amazed at what they can do. If you happen to have a development crew that is fanatical on code optimization and speed, they will probably make up for having a DBA on staff. But it never hurts even to bring a DBA in for a day or two, have him look at the DB, make some suggestions and turn it into a training session to help your developers grow.
  3. Database Load – Let’s face it, some databases are very large and have grown to the point where it is time to expand the design.
  4. Slow/Old DB Server – At a certain point, its not worth your time to spend weeks tweaking every query on a server that is 2-3 years old. Throw new hardware at it and let the improvements there increase your performance.

I don’t really have a major issue with the rest of her list, they all seem to be fairly logical. But I just didn’t understand the advantages fully and the first disadvantage, well, as you can tell it drove me up the freaking wall. If the database is slow, there is a good reason for it all of which are fixable.

Now, with all that being said, I do kind of agree with her. IF the data is not going to change, why store it in a database. Having a flat config file is not the end of the world people. Its fast, saves a query, and never changes! But that last part is pretty critical. If the data may expand which very well could in this instance, it proabably makes sense to put it in the database even though it doesn’t fully seem like it needs to go there. if you have your database design in order, you should be fine and never notice a performance hit getting this data.

The need for speed

As I’ve written before, the main engine that we are using to provision users on our Exchange system is Microsoft‘s Hosted Messaging and Collaboration (HMC) framework.

I’ve had a few issues with it and various hoops that I have had to jump through. Many of which I have not had a chance to document on this blog. Those will hopefully come out in the coming months.

Today, I was dealing with a speed issue that we have been having in our customer portal that hits HMC. The page is pretty basic, it gives a listing of all the users, the name, login address, what package they are assigned and then some actions that can be taken on the user such as edit, delete, disable. This is all in house code that shows this information with calls being made to HMC to get the data.

Unfortunately, I made a mistake in my initial development. Originally, I got a listing of all the users and had 90% of the information that I needed. Another call was needed to get the assigned package for each user. If you have 5-10 users, this isn’t a huge deal. Try it with 100, or 1000. It gets really ugly really fast.

On one particular customer that I was looking at, they have 120 users. Their page was loading in 41 seconds. 41 freaking seconds!!! 7 seconds for the AD search to grab the users with mailboxes. Then somewhere between .1 and .3 seconds per user to equal 34 seconds of the page load.

The solution, remove the package display code.

What? But doesn’t the user want to see this data?!?! Maybe. But seeing as they have to go to the edit page anyway to change the package, it really isn’t needed on the account listing page. So why display it there. It slows down the user experience which is more of a negative than having it on the page.

It wasn’t an easy decision to remove this information. I thought of a whole bunch of ways where I could tuck that data away so I could grab it more efficiently. But in the end, less is less. Removing that data cleaned up the look of the page and vastly improved the load times. Its only been in the wild for a for hours so we’ll see what the users have to say about the change.

T-Mobile Dance

Well done T-Mobile, well done! Will this video make me want to switch, not necessarily. But you’ve set your self apart from the rest of the phone carriers by having a clue about viral marketing.

Secure Backpack

Those that work with me know that I am a huge fan of the products put out by 37Signals. They have created some great apps that are simple, clean, and rock solid. The concepts aren’t always new, but they have made it so anyone can login in and hit the ground running. There is a *lot* to be said about that ability to have well design applications. I can’t say enough great things about their apps!

However, they are not without fault. I’m finally moving from a free plan to a solo plan in my backpack account. I am doing enough side programming jobs for friends and family that having a page for each project just makes sense. So I’m finally moving up to the solo account to add more pages, space and overall functionality. While I was on the upgrade page, there was something that stuck out to me as just not adding up. Take a look at the packages below:

Missing SSL

I’m all for having limits to packages. It makes sense. It makes you want to upgrade to the next level. What I don’t understand is the SSL Security. I get it on a solo level but once I move to the home or basic level I lose it? Logically, that removes my desire to upgrade. Sure, I could skip to the plus level, but that is a big step up in price from the $7/mo solo plan. This seems like a short coming and something that quite frankly, should be a standard option for those paying a fee on a monthly basis.

With that being said, if you are looking to see for yourself how great these application are, please use the following affiliate links to help support this blog. All the products have a free plan of some sort so give it a try today!

Basecamp – a great for project management,

BackPack – You can setup your own personal intranet site or use it for your entire company.

Highrise – manage your contacts, leads and deals.