Monday, May 4, 2015

Venting about ExtJS and my company

I have to vent a little about work.  I get that I'm paid fairly well, and that there are aspects of this job that I like, but there are parts that are incredibly frustrating, and as I already said, I just need to vent.

When you write a web application, the fundamental languages to do that on the client side are HTML, JavaScript, and CSS.  They're simple, and everyone who can actually call themselves a web developer has some level of familiarity with them.  On top of those things are tools that companies make called libraries or frameworks, that are supposed to make web development easier.  For example, a JavaScript library might provide a way to include a popup date-picker on your web page.  It takes a little bit of extra coding and know-how to do that with HTML, JavaScript, and CSS, but it's really not that hard.  Still, it might be nice to have someone else write the code that does the work, and just call that code to have a nice pretty date picker.  It can save some time.  So I understand the desire to use third party tools.

Another good example of when people like using a library is for Ajax.  For those who don't know but are still reading this, Ajax is the term applied to JavaScript that is used to call the server without loading a whole new web page.  It's essential for dynamic pages that update bits on the page without reloading the whole thing.  It reduces network traffic, which improves speed, and improves user experience.  It's really fantastic, but there are some cross browser issues, and it can be nice to have someone else write the code that creates the connection to use.  So there are libraries that include Ajax encapsulation that might be nice to use too.

But for the most part, I'm a big proponent of doing the work myself.  Using the basic languages means that anyone who knows them can come in and get an idea for what the code does, and how to fix problems.  The moment you have third party tools, there's a layer of abstraction that can cause problems that you can't do anything about and which make the code harder to understand.  Also, you have to rely on the provider staying in business for support.  Or if it's open source, the support is likely non-existant.  So there are risks and costs with third party tools that I don't like.

This takes me to ExtJS.  I loathe ExtJS.  It's a framework based on JavaScript.  It's supposed to make a lot of work much easier for developers.  It gives you a way to layout your pages, handles server calls, shows neat things like date pickers, and even handles interactive grids so you can sort data by clicking on headers.  That last one is the only redeemable quality of ExtJS though.  An interactive grid like that is genuinely hard to make, and even harder to make it work smoothly.  So hooray for ExtJS for that one little bit.  But the price you have to pay is far too high, especially when you could find a light weight JavaScript library that gives you grids too, but without all the down sides.

ExtJS basically takes over.  It's a framework... not a library.  If you write any of your page in ExtJS, the whole thing is written in it.  And it's stupidly obscure and spread out code.  Figuring out where the code is that accomplishes a task on the page is genuinely hard to do.  You might know where that code is if you wrote the code originally, but if you are set the task of fixing a bug in existing code, you have an overly complicated task ahead of you.  The code is so arcane looking.  ExtJS forces you to write things their way, and so many times over the past few months I've thought to myself: If I was just doing this in HTML, JavaScript, and CSS, I'd have this task done in five literal minutes.  Instead, I had to figure out how ExtJS wants you to do it, figure out that ExtJS doesn't let you control nearly as much, and then find out that other developers here just use kludge code in ExtJS to make things look like our UI/UX team wants it to look.  Something that should have taken 5 minutes ends up taking hours.  And just to be clear, when the developers here who are more experienced with ExtJS than me figure out how to do these things, it takes them an hour or more too.  ExtJS has so many problems that I don't understand why anyone would choose to use it.

So instead of making things easier ExtJS makes things more complicated and difficult.  And instead of providing a result that works well, it builds atrocious code that is stupidly slow.  Do a search online for ExtJS and performance, and watch the listings appear about how heavy the framework is and how slow its results are.  And my company doesn't help things because our primary product is one page with all the application's code loaded.  It's a pathetic pile of performance problems.

ExtJS is awful.  I'm going to keep saying it, because it's true, and because it boggles my mind that anyone uses it.  Especially knowing (second hand knowledge, so I might be wrong on the amount) that the licenses cost like 10,000 dollars.  What a stupid waste of money.

And here I am working at a company that writes its application almost exclusively using ExtJS.  I'm working with a language I hate, to build new features for a product that is probably the worst written piece of code I've ever seen (and I've worked for a good number of companies in my nearly 20 years in this industry).  My skills at being a software engineer are actually getting worse as I start to forget how real code is supposed to be written.

The next bit of my venting is going to be about the choices the company is making, so I'll slow down on bashing ExtJS a little.

Maybe 9 months ago, this company made the switch to try to use Agile Scrum as the way we do our development here.  It seems like a good change so far.  At the time, we set forth a list of goals which include two things that I'll be venting about.  First is that we made the decision to not add any more technical debt.  Didn't say anything about existing technical debt (which is basically our entire code base).  But it did at least specify that we weren't supposed to make things worse.

Sadly, we completely ignore that goal.  It's like that goal means nothing at all.  We keep developing new features using that crap framework ExtJS.  The code is just getting harder and harder to maintain, and the application is performing worse and worse.  Instead of improving the experience for our customers we're adding new features.  I'm told we promised this feature we're working on... and we have to follow through on our promise, but no one has said any customer is asking for this feature.  And what's that rule?  The 80/20 rule?  I heard someone say that with respect to a piece of software, 80% of what customers need and use is covered by 20% of your features.  They said that basically most of the application will never be used by anyone.  If that's true, then why are we adding new features instead of fixing the ones that get used?  Shouldn't we be improving customer satisfaction instead of trying to distract them with new stuff that will likely wear thin very quickly due to poor performance?

The second goal is to make this place the kind of place people want to come to work for.  It's supposed to be a good place to work.  For all of us.  So... they got us a ping pong table.  That's pretty much it.  They ask us to work extra hours in this awful code base that desperately needs to be thrown out so we can start over and actually write a decent application.  They demand we use awful technologies that diminish our skill as software engineers instead of improving us and challenging us in a fun way.  Working here is an exercise in putting up with abuse.

Okay... I think I've vented enough for now.  I'll just say one more time: ExtJS is objectively awful.  Stop making buttons with divs and tables!  Just use the button input type in HTML... we can apply our own styles so easily that way.  Jebus... just... stop being awful!