Skip to main content

On Tools and Day to day actions

 

Learn your everyday tools, they will free you up a lot of time and will give you an edge to become faster and better with time.

For example Integrated Development Environments (IDE) have lots of quick keys for everyday use and most blogs reccomend memorizing the most used ones. I'll go on a different route for my suggestion with a little of backstory.

At my first job near 2002 most developers were using very crude tools as the workstations available to us were not powerhouses and most of us were pretty new to the industry so we didn't know better. 

The workflow mostly involved using a plain text editor on local Windows NT, upload source code to a Unix server, compile and possibly restart a server in order to load new code. As you can imagine this was brittle and there were multiple places for collissions either by overwriting somebody else's code, restarting in the middle of another developer test or plain corruption of compiled binaries.

The first thing that we started to adopt was a text editor that had file transfer capabilities to speed up a little the process, this introduced more probable collissions. As you can imagine there was no source control anywhere in sight so each developer started to have a local backup or their files and merging other changes when needed. As most developers were using Java Server Pages (JSP) which allow a single file to contain lots of weird things together like sql, html alongside with java tied together with string and tape, this meant that none of the code highlighters could parse  them correctly and thus give hints on correct code it made very difficult to validate against incorrect syntaxt. 

At first there was effort to configure highlighters to work with multiple languages in a single file but it was really difficult to handle all cases. In the end it started to force us to better practices as not mixing languages in a single file but it introduced another problem: restarts of server needed to be more frequent as only JSPs had hot deployment for that particular type of server. It took us a while to understand this and it would have been very helpful to understand the lifecycle of the JSP, J2EE container and class loading. Too much for a new developer to grasp in a short timespan.

In the end we ended up with a local J2EE libraries against which we could compile our sources and run unit tests, once we had something usable they were copied with a more robust editor that had both merge/diff utilities and file transfer capabilities; it also managed automatic backup and history of files on local. Sadly we could not get centralized version control, but all improvements allowed us to move faster and more confident to not break other developers code. This wouldn't have been possible without knowledge of how the server loaded code, what was the lifecycle of the application once loaded, what meant hot code replacement and what could be done with it, starting to learn separation of concerns and moving away from humongous single file 'programs' to more classes and views as we also learned to reference templates in a nested way which in turn reduced lots of duplicated code and weird bugs related to copy-paste-mutate conditions.

In conclusion:

  • Learn your everyday tools for speed of execution. Do not waste time on repetitive tasks.
  • Learn the train of thought of your stack. Chances are most of the problems you are having are for trying to go against what they were designed for.
  • Learn the lower layers of your platform, you might not need to touch them or code them from scratch but they will give you insights on which you'll be able to build upon.
  • You will not work in isolation for long, learn where collaboration will happen and where conflicts should be resolved and where they should be avoided.
  

Popular Posts

Logffillingitis

I'm not against of leaving a trace log of everything that happens on a project what I'm completely against is filling documents for the sake of filling documents. Some software houses that are on the CMMI trail insist that in order to keep or to re validate their current level they need all their artifacts in order but what is missing from that picture is that sometimes it becomes quite a time waster just filling a 5 page word document or an spreadsheet which is just not adequate for the task needed. Perhaps those artifacts cover required aspects at a high degree but they stop being usable after a while either by being hard to fill on a quick and easy manner by someone with required skills and knowledge or they completely miss the target audience of the artifact. Other possibility is that each artifact needs to be reworked every few days apart to get some kind of report or to get current project status and those tasks are currently done by a human instead of being automated.

Are we truly engineers? or just a bunch of hacks...

I've found some things that I simply refuse to work without. Public, Centralized requirements visible to all parties involved. I is ridiculous that we still don't have such repository of information available,  there is not a sane way to assign an identifier to the requirements. Then we go with the 'it is all on Microsoft Office documents' hell which are not kept up to date and which prompts my next entry. Version control. When we arrived here quite a lot of groups were working on windows shared folders... now it is a combination of tools but heck at least there is now version control. Controlled environments and infrastructure. Boy... did I tell you that we are using APIs and tools that are out of support? Continuous deployment. First time here, to assemble a deliverable artifact took 1-2 human days... when it should have been 20 minutes of machine time. And it took 1 week to install said artifact on a previously working environment. And some other things that

Qualifications on IT projects. Random thoughts

Projects exceed their estimates both in cost and time. Why? Bad estimation would be an initial thought. If you know your estimates will be off by a wide margin is it possible to minimize the range? Common practice dictates to get better estimates which means get the problem broken down to smaller measurable units, estimate each of them, aggregate results and add a magic number to the total estimate. What if instead of trying to get more accurate estimates we focused on getting more predictable work outcomes? What are the common causes of estimation failure: Difficult problem to solve / Too big problem to solve Problems in comunication Late detection of inconsistencies Underqualified staff Unknown. I'd wager that having underqualified staff is perhaps the most underestimated cause of projects going the way of the dodo. If a problem is too complicated why tackle it with 30 interns and just one senior developer? If it is not complicated but big enough why try to dumb it down a

Job interviews

So after my sabatic period I started to go to different job interviews (most of them thanks to my fellow colleages whom I can't thank enough) and after most of them I feel a little weird. Everyone tries to get the best people by every means possible but then somethin is quite not right. Maybe they ask wrong questions, ask for too much and are willing to give to little in return or just plain don't know what they want or what they need. Our field is filled with lots of buzzwords and it is obvious that some people manage to get jobs only by putting them on their résumé. Then there are some places where there is a bigger filter and filters out some of the boasters. But still it is a question of what do they really need and what questions are needed to weed out those that do not cover minimal aspects required by the job. Don't get me wrong, it is really hard to identify good developers on an interview. It seems that almost no one knows what to ask in order to get insights abo