Category: Lean Code

Lean Code and Comments

When I learned to program, hardware and storage were scarce. It is imperative for the code to be tight and the speed of execution was and remains first and foremost. Achieving this isn’t always easy and often requires some very sophisticated programming techniques.

If there was ever a time or place to demand comments, a clever or complicated code sequence is it. Many books and courses will tell you to comment on your code and many experienced programmers do an excellent job of doing so. Writing clear and useful comments is as much a skill as it is a discipline.

The coding style where indentation, line length (80 characters maximum), avoiding the use of global variables and writing single purpose functions also help to understand and debug the code. Make your comments relevant and don’t restate what should already be clear.

Some will argue that good well-written code is self-documenting although my experience strongly suggests otherwise. Well-worded variable names are helpful; however, their intended purpose may not always be clear. Functions, subroutines, or classes may also have well-defined names yet arguments and/or parameters and results may not be.

I recently found myself having to debug a program I wrote over a year ago. The application was working on all machines but one. I learned that the client replaced the computer with an old legacy system. Fortunately, I have been working with PC’s for more years than I care to admit and understand what was happening and why.

Needless to say, were it not for the comments, fixing the issue in the actual code would’ve been a daunting task otherwise. The very sections of code that were to occupy my time were cause for previous visits. The comments clearly describe what the code sequence is supposed to do and the potential caveats to avoid.

Good Meaningful Comments

All of my code modules have an opening comment block that, aside from the author(s), date created, purpose, and revision, provide specific details regarding the methods/techniques and how they are used in the code to follow. Even the method of versioning the module is clearly outlined.

Complete history with version/revision number, date, and description of the changes accompanies the opening block. The specific changes are dated and documented in the revised code segments as well. Dating the changes in my code serves as a frame of reference and allows me to better recall the events that triggered the changes in the first place.

/* System.out.println(“Don’t use block comments to block out code\n”); */

Rule of Thumb

A good “rule of thumb” is to provide sufficient comments to reteach yourself or to teach others what the code is supposed to do. I will also provide ample warnings and advise of possible side effects that code changes may impose.

If there is ever a place to serve yourself best in your coding skills, it’s in the comments. Everything that appears to be fresh today will be everything but a year from now. A well-documented program requires focus and discipline to make it so, but the effort will make the debugging process so much easier when you visit your work in the distant future.

Until next time, STAY lean!

Related Articles and Resources


Lean Code and the Intel Distribution for Python Performance

Python is one of my favourite languages for prototyping and developing applications.  Unfortunately, as an interpreted language, Python’s performance is of great concern when running an application at scale in a production environment.  Developers will typically resort to using languages like C or C++ that can be compiled into a high performance application for this very reason.

Fortunately, as I’ve stated many times before, “There’s always a better way and more than one solution!”  Although you can download the latest version of Python directly from the website, other distributions are available.  I use the Anaconda Python distribution as it is both comprehensive and easy to manage using Conda or Anaconda Navigator.

To overcome some of Python’s performance shortfalls you can “Supercharge applications and speed up core computational packages” with the INTEL Distribution for Python, powered by Anaconda.  The Intel Distribution for Python is intended to address performance constraints that would otherwise inhibit you from using your application in a production environment at scale.

This Anaconda & Intel Python Distribution FAQ presents the differences and performance gains.  Note that both distributions are available for Windows, MacOS, and Linux.

Install Anaconda3

Anaconda3 5.2.0 (64-bit) SetupDownload and install the latest version of the Anaconda Python Distribution (5.2.0 as of this writing).  The installation wizard will guide you through the installation process, allowing you to install for “Just Me” or “All Users” and will prompt you choose an install location.  In most cases, the default settings will suffice.

Anaconda3 5.2.0 (64-bit) Choose Install LocationWhen the installation is complete, you will be presented with an option to download Visual Studio Code.  Although I’m using PyCharm by JetBrains, Visual Studio Code is an excellent editor that I find myself using from time to time.  Anaconda’s Spyder is also an excellent IDE and is part of the Anaconda installation.

Note:  You will be asked to sign up for an Anaconda Cloud account.  This will enable you to manage and distribute your packages and upload and download your environments, notebooks, and projects Anaconda Cloud.

Install the Intel Distribution for Python

After you have successfully installed Anaconda on your machine, follow these step by step  instructions to take advantage of the Intel Distribution for Python in your production environment.  I highly recommend reading the instructions BEFORE proceeding with the step by step instructions provided as several installation options are presented and may vary depending on your operating system.  Note that you may elect to install either the core or full Intel Distribution for Python depending on your requirements and versions are available for both Python 2 and Python 3.

Anaconda Prompt From Windows Start MenuOn Windows 10, go to the start menu and scroll down to find the “Anaconda3” application.  From the drop down, click the “Anaconda Prompt”.  This will open a terminal window from which you can enter the applicable “conda” commands referenced in the “Intel Distribution for Python” installation instructions.

We opted to install the full Intel Distribution for Python, although the core Intel Distribution for Python may serve your immediate needs.  Since the Intel Distribution for Python is powered by Anaconda, you can easily manage your Python packages and environments accordingly.

Note that the Full Intel Distribution for Python is quite large and will take some time to download depending on the speed of your internet connection.

Having the ability to significantly increase the performance of your application by using Intel’s Distribution for Python is definitely far more productive, effective, and efficient than having to rewrite your application in another language for the sake of performance alone.

Until Next Time – STAY lean!

Related Articles and Resources




Lean Code and Sticky Fields

Quite some time ago I created a backend interface to serialize and record data for labels printed through Crystal Reports as generated from our ERP system.  Unfortunately, the ERP system makes no provision to enter or update all of the key information required to support traceability of the labels after they are printed.

To solve this problem, I used Excel VBA to create a front end label manager to edit or update labels with the relevant information.  The window appears modally when the “Manage Labels” button is clicked on the ASN E2 Data worksheet (pictured below), allowing us to continue working with our workbook as required.


I could have written the front end as an independently managed application, however, it is a natural extension of other features and capabilities supported by the workbook in which the VBA code resides.  No code is presented in this post, however, some familiarity with Excel VBA and User Forms is assumed.


When the “Manage Labels” button on the worksheet is clicked, a “Label Details” window appears as pictured above.  After confirming or selecting the Server Location and clicking Connect, a Customer Code is selected from the ComboBox.  We then click the “Get Labels” button to load the labels for that Customer accordingly.  More granular search capabilities are also provided.

The core functionality supported by the front end is the ability to edit the data associated with any given label.  Text boxes are used to edit data for the fields indicated.  A check box next to each field is used to make the field “sticky”.


Note that although each field can be set independently, all “sticky” checkboxes can be set or cleared by pressing the “Set Sticky” or “Clear Sticky” button respectively.StickyFieldsCheckBoxReset

Sticky Fields

Normally, text boxes are updated when moving from one record to the next.  However, there may be times when we want our data to persist or carry over from one record to the next so we only have to enter it once.

For example, at the time of printing and when parts are being produced, we can’t possibly know the Packing Slip number in advance.  StickyFieldsCheckBoxTrueIf multiple containers (each having a uniquely serialized label) are shipped, we can simply make the Packing Slip “sticky” and update the records without having to re-enter the packing slip for each individual label.  Similar logic applies to the remaining fields.

TextBoxProperties-TagThe “Reset” button is used to overwrite the TextBox with data from the original record.  To do this, we take advantage of the “Tag” property of the TextBox.  When the data is read from the database, a  copy of the data for each field from the original record is stored in the “Tag” for each TextBox.  The “Tag” can store up to 2048 characters and is more than sufficient for our purposes.

Functionality is also provided to Swap the data between the current field value and the original data value of the field by using the up/down arrow button immediately to the left of the “Reset” button.

Note that all fields can either be reset to the original data contained in the record or cleared entirely by pressing the “Reset Fields” or “Clear Fields” buttons on the Edit page respectively.

Carry On

This type of functionality is not typical for most applications though it is not necessarily unique.  I recall seeing a “record level” Carry ON type of functionality years ago where the data from the previous record would carry over to the next record and edited as required.  However, this only applied to new records as they were being entered.


If the user “forgets” that a sticky field is set, it is possible that some data may be changed unintentionally.  By default, all of the check boxes for the sticky fields are clear (off) when the edit page is presented and must be turned on intentionally by the user.

On the other hand, consider the risks associated with data entry where the user would have to enter the same data multiple times for a larger number of records.

Editing Multiple Records (Global Update)

Though not presented as part of this post, it is also possible to select multiple records from the main “label display area” and globally apply changes to “common fields”.  Of course, “global” edits to multiple records presents it’s own challenges and risks and is the topic worthy of it’s own post.

Final Thoughts

You may already be using Sticky fields or perhaps considered making this capability available to your users.  There are certainly times where this type of functionality may not be desirable and certainly where the risks of “contaminating” your database may be high.  You will note that we did not provide the ability to edit all of the fields for a given record for this very reason.

The efficiency and effectiveness of an application extends from the underlying code to the actual person using the application and is one of the reasons why this was included as part of our ongoing Lean Code series.  Saving the user from having to re-enter duplicate data into multiple fields across large record sets can save a significant amount of time and effort and minimizes the risk of error where “exact” duplication of data is a necessity.

Until Next Time – STAY lean!

Related Articles and Resources


No action

Mouse Gestures



Scroll up

Scroll down

Switch to previous tab

Switch to next tab

Close all tabs except current

Close current tab

Open new tab

Close all tabs

Refresh current tab

Stop loading

Scroll to bottom

Scroll to top

Reopen closed tab

Go to home page