Writing a technical book is a perfect way to prove your knowledge, improve your skills, and gain more reputation and popularity in your expertise. After writing 3 technical books, I have decided to share my experience so that those who are planning to get in front of a word processor can have a head start.


I will tell you 7 ways to fail in your book project. Reaching the light at the end of the tunnel and having your book published depends on not falling into these traps.

Tell everybody that you are writing a book


This is one of the biggest mistakes that many beginners make. Starting a book project is elating; I agree. However, I recommend you to keep it quiet. Even if you are carried away by this project, do not tell anybody until you send the first draft to your publisher.

You may ask why? Isn’t it good to create some excitement among friends and colleagues so that sales go well once it is published? Writing a book is a long process, and the most important thing is motivation. The moment you start bragging about your book project, the moment people will start criticizing you. Things especially skeptic people may say that affects your motivation negatively include:

  • “You won’t make enough money by writing a technical book.”
  • “The topic you choose is not popular” or “It will lose popularity.”
  • “Spend your time with your family. It’s more important.”
  • “You don’t have enough knowledge to write a book about that topic.”

In order to avoid these and many other possible critics, keep your book project as a secret. The only exception to this is that friend to review your book as it builds up. It’s very helpful to have somebody with a similar knowledge to review what you have written so far. Make sure that he/she doesn’t tell anybody about your book project.

Directly jump into writing the first page


Break down the topic into small pieces. Build the draft index, document the titles and subtitles. Know the road map before starting the first page. Even though writing the first page is the hardest part of the project, you should have a big picture before it. Otherwise, you will end up wasting time by repeating yourself in different sections.

Give weeks of break


Don’t! Technical subjects get obsolete very fast. The faster you finish your book, the more people you help and the more sales you get.

The key to finishing your book is to work on it relentlessly. It’s really hard to continue writing your book after coming back a few weeks of break. It requires a lot of motivation to warm up again and write new pages. Don’t stop until you finish it even though it takes 3–5 months of continuous hard work. Put yourself in a virtual camp. It will worth it.

Do it for money


Do it for helping people and improving your skills, not for money. If money is your main motivator, you will fail in your project once you realize that you won’t make much money out of it (unless you are Dan Brown).

Dream about being a New York Times best-seller


You won’t be. Be honest with yourself. I haven’t seen any purely technical book that gets a spot in best-sellers list. Setting your expectations realistically will help you in keeping your motivation and avoiding perfectionism which is one of your enemies in your book project.

Do not start a new section if the previous one is not finely honed


Do not hesitate to start a new section even though you have some missing points in the previous one. You will have plenty of time to review your sections after having a first draft. Your publisher will also go through them. Try to finish about 90% of the sections and try to finish all sections quickly. You can later come back and fill the small gaps.

You can find a publisher after finishing the book


Find a publisher before starting your book; it will give you a peace of mind. Even though publishers rarely take the first-timer authors seriously, it’s best to try.

This issue may come out when you try to group table by a certain column in Telerik RadGrid:

Server Error in ‘/’ Application.
Expression cannot be null or empty
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: Telerik.Web.UI.GridGroupByException: Expression cannot be null or empty



The root cause of this issue is that there is no “group expression” defined for the column you are trying to use for grouping. Follow the steps below in order to solve the issue:

  1. In Design mode, click the RadGrid
  2. Expand the configuration menu and click “Open Configuration Wizard
  3. Click “MasterTableView
  4. Click “Columns
  5. Choose the column you want to use for grouping
  6. Enter expression into “GroupByExpression” field (Ex. “N_REQUEST_ID Group By N_REQUEST_ID”

Reference: http://www.telerik.com/forums/gridgroupbyexception-expression-cannot-be-null-or-empty-f0b9e381526a

A missing Java class may cause the issue below when you try to compile your project in Eclipse.

A Java Exception has occured
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
at org.apache.catalina.util.LifecycleBase.<clinit>(LifecycleBase.java:37)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 1 more




Follow the steps below to fix this issue.

  1. Find tomcat-juli.jar file in Tomcat installation folder (C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.0\bin)
  2. Unzip it and check if there is LogFactory class
  3. If the class doesn’t exist, download it from Apache website
  4. If it exists, copy tomcat-juli.jar file to Tomcat “lib” and JRE “lib” folders:
    C:\Program Files (x86)\Apache Software Foundation\Tomcat 8.0\lib
    C:\Program Files (x86)\Java\jre1.8.0_101\lib

You may run into this issue when you try to compile your JSP project:

Target runtime Apache Tomcat v7.0 is not defined
Faceted Project Problem



Make sure to install correct Apache Tomcat version. For the easiest installation, you can download and run “32-bit/64-bit Windows Service Installer” for any version (In my case, it is Tomcat 8.0.37).


After installing Apache Tomcat, follow the steps below.

  1. Install JST Server Adapters (Help -> Eclipse Marketplace)
  2. Right click on your project. Choose “Properties
  3. Go to “Targeted Runtime
  4. Choose or Add the Tomcat version you prefer

If this doesn’t solve the issue, try changing the target runtime in the configuration file  (org.eclipse.wst.common.project.facet.core.xml).


You may run into the error below when you use a WebResource file in your ASP.NET project.
Server Error in ‘/UMregistration’ Application.
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: The resource object with key ‘FooterInfoMsg’ was not found.



In order to fix it:
  1. Right click on your resource (resx) file
  2. Go to Properties
  3. Change “Build Action” to “Content”


Checking if any text field empty is relatively easy because we can use RequiredFieldValidator control as I mentioned in this post. However, the same control (RequiredFieldValidator) cannot be used for  a list box. You need to work a little more to validate item count in a list box.


We have two list box in our page (I use a Telerik control, RadListBox). We want to check if the list on the right side (listCountryDestination) empty or not after clicking “Submit” button.

<telerik:RadListBox RenderMode="Lightweight" runat="server" ID="listCountrySource" Height="200px" Width="225px" AllowTransfer="true" TransferToID="listCountryDestination" ButtonSettings-AreaWidth="30px" SelectionMode="Multiple">
<ButtonSettings TransferButtons="All"></ButtonSettings>
<telerik:RadListBoxItem Text="Argentina"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Australia"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Brazil"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Canada"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Chile"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="China"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Egypt"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="England"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="France"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Germany"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="India"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Indonesia"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Kenya"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="Mexico"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="New Zealand"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="South Africa"></telerik:RadListBoxItem>
<telerik:RadListBoxItem Text="USA"></telerik:RadListBoxItem>
<telerik:RadListBox RenderMode="Lightweight" runat="server" ID="listCountryDestination" Height="200px" Width="195px">


You can use a CustomValidator and a JavaScript function to validate your list box. Add this CustomValidator below your list box:

<asp:CustomValidator ID="CustomValidator1" runat="server" Display="Dynamic" ClientValidationFunction="ValidationCriteria" ErrorMessage="Select at least 1 country"></asp:CustomValidator>

Add the code block below into your page (preferably after </html> tag).

<script type="text/javascript">
    function ValidationCriteria(source, args) {
        var listbox = $find('listCountryDestination');
        var check = 0;
        var items = listbox.get_items();
        var cnt = items.get_count();
        if (cnt)
            args.IsValid = true;
            args.IsValid = false;

Your page will show a warning if the list box is empty as seen in the screenshot below.


Everybody knows and follows general work ethics such as being present at work, doing tasks assigned to you, attending meetings, etc. Apart from these typical office routines, there are some behaviors that are not discussed but should be avoided if you don’t want to distract colleagues.
Unspoken work ethics…

Don’t bite an apple at work


It’s not a joke! Every bite you take from your apple may be a very noisy distraction for your office mates. Keep it quiet. Eat as many apples as you want AT HOME. The same applies for peaches, pears, etc. If you really have to eat fruits, go for bananas or grapes, which can be eaten quietly. If you love apples so much that you can’t survive without them at work, try using a knife.

Lunch is more delicious at outside of the office


Get some fresh air during lunchtime .  It will dramatically increase your productivity. Many people bring lunch from home, which is a great habit for saving money and spending less time for lunch. However, you don’t have to eat it at your desk. Check if your company has spaces that are allocated for eating and relaxing. If it doesn’t, search within a few blocks from your work to find a food court or a park. Eating at the desk may be very annoying for your office mates, especially if you like smelly foods or if you keep your mouth open while eating.

Keep your distance from chewing gum


I know that it’s tempting. You may need it to fight with stress or to keep your teeth clean when you don’t have a chance to brush. It’s understandable, but make sure to take it out after a reasonable time. If you’re chewing for half of the day, your office mates may notice the systematic noise from your desk and it may distract them.

Your love can wait until five o’clock


We want to keep in touch with our loved ones, which is a beautiful thing. Call him/her whenever you get a chance but don’t forget that you are paid to work, not to have personal calls. If you have personal calls for hours at work, it may cause your office mates to question your workload and integrity. I had a colleague a while ago — he was a quiet guy while he was single, but once he got engaged, he started spending half of the day on the phone through his Bluetooth headset. It’s distracting.

Don’t sleep (and if you do, don’t snore)


Yes, I had colleagues sleeping at work regularly. It’s normal for people to fall asleep when they are very tired but if someone falls asleep every day, it raises a red flag about that person’s work ethics.

Limit using slang


Writing “rite” instead of “right” won’t save hours from your schedule. Instead, it will make your emails and IMs difficult to read. Besides, it’s not professional. It is useful and understandable to use some acronyms such as “FYI” and “COB”. However, there is no good reason to write “u” instead of “you” or “k” instead of “okay”.

Meeting is for meeting


Meetings are not for eating. Try not to bring any food to a meeting room. You may have a very tight schedule and you may not have time for your lunch, but please note that it’s not other participants’ concern. It is disrespectful to eat while your colleagues are talking or when they are expecting you to talk.

Know your desk’s borders


You can be super messy and unorganized in your desk space — it’s your work area. However, make sure that your stuff doesn’t fly or move to your colleagues’ desk. This includes your chair and bag.

Reply to the questions in emails


If someone sends an email with questions, make sure to reply to them. Leaving an email unanswered is neither kind nor ethical. You are getting paid to read and reply to your work emails, not to ignore them.