as a marine friend of mine used to say, "That which does not kill us makes us stronger"--too bad that doesn't apply well to parenting, where that which does not kill us drives us bonkers. It is not uncommon at all for kids to be less compliant and more emotional around their mothers, so do not assume you are inadequate. Remember, he is doing well at school so something is going right. It sounds like your son is having anxiety around separating from you in the mornings, and that is coming out in the form of his putting up as many roadblocks as he can to halt the process of getting out the door.
Changing little kid behavior takes lots of work and practice, but it is much easier to tackle problems early instead of letting them go. It takes lots of practice, but the more you do the better things will get. You can read my Medhelp article on power struggles as well as this post. Keep in mind that you can often avoid power struggles by simply letting the child know how you understand how he feels (see other tips in my Power Struggles article). For example, if he is fussing when he has to go to school, you can put what he is feeling into words for him. Try saying something like "It can be tough to have to leave home" or "You look unhappy about having to put on your shoes" or even "I bet you wish we could stay at home today. Sometimes I wish we could too." Many times if you just describe what the child seems to be feeling or thinking, they settle down.
If you can't avoid a power struggle, consider picking your battles--deciding ahead of time if the situation needs intervention of if you can let it go. If you are really overwhelmed, take on only those that are safety issues or that you will win in some way (it may not be getting all of what you originally wanted, but you 'win' by getting the child to comply with a direction. Always end with the child complying with a command, any command, never end a struggle with him refusing or opposing. Sometimes this will mean that you quit while you are ahead (getting a small act of compliance like using a quiet voice instead of screaming) instead of going for the entire goal you originally planned on (so maybe you carry the shoes into the classroom and he puts them on in there, thats ok).In the beginning, you are not after perfection, but little bits of improvement wherever you can get them.
Many parents, even soldier parents, have trouble giving effective kid commands. When you give a direction, your voice must be firm--not too sweet, not nasty in tone, not screaming or yelling.Give a 'cue' word first (usually the child's name or the word "Listen"). The c'ue word' means a command is coming. Make sure you are in his line of sight prior to giving a command whenever possible. Make your commands very short--under 5 words. Commands must be ACTIVE. An active command contains a verb and a direct object (e.g. Hands down!, or Put the toy in the basket). Using please is good, but use it at the end of the statement (e.g. Put the toy in the basket please). Avoid commands that do not tell him something to do (such as 'no hitting' or 'be nice' 'stop bothering me' or 'do you want to stop that now?'). Avoid sarcasm or expressions, just stick to simple verbs and objects he can see/touch etc. (e.g. Pick up your shoes). Make your commands ask for only one discrete act. Instead of "Get ready for school" use "Pick up your shoe" or "Zip your coat." You are most likely to get compliance by asking for something small and specific.
In the event that he is doing something you want him to stop--give an 'incompatible command.' That means ask him to do something he can not do at the same time as the thing you want him to stop (for example, if he is screaming, say "Use a quiet voice" or if he is laying on the floor kicking, try "Stop, put feet down".) First the cue word, then the word 'stop' in a firm voice. Make sure he is listening to you by getting in his line of sight.
After you give a command, if he does not comply immediately, give a forced choice. The choice should be either compliance or an immediate consequence. Never give a consequence you can not deliver in 30 seconds or less. For example, you can always take a toy away, turn off a tv, move him away from an activity, move away from him. These are consequences you can enforce quickly. Never threaten something you can't deliver. Never give a consequence that won't happen immediately, such as "no dessert after dinner" or "no books at bedtime." State your command in the following pattern--cue word, action command, count to three.
If you do not have him moving toward compliance after '3' give a forced choice. "Either you put your shoe on or you go to school in bare feet. You decide." Then count to three aloud again. If you do not have compliance, swiftly enforce your consequence. As you enforce your consequence, state "You decided" or "I see you have chosen". I like to avoid time out whenever possible, its hard to move a child into time out and keep him there--the struggle becomes reinforcing because he gets so much of your attention and gets to vent at you. If he refuses to choose then you make sure to tell him "Then I get to pick" and make sure you do (for example, give lots of choices like "Do you want to wear your coat or your sweatshirt? Do you want your raincoat or your umbrella?".) If he refuses to pick, he will have to live with consequences of not making his own choice. If the child does not choose, the parent says "then I get to choose" and makes the selection. No going back once the parent has chosen no matter what, but remind him he will have other chances to choose.
You can also use the 'try again' to get compliance. Once you have enforced a consequence (only AFTER, not before), wait 10-30 seconds and ask "Do you want to try again?" If the child says "yes" and complies, you have a good result. If he tries again and does not comply, enforce the consequence again with no second chances. Example--lets say your son is banging a toy hammer on the coffee table. "Child, STOP! Bang on your workbench" If the child does not comply, the you say "Either you bang on your workbench or I take the hammer" If the child keeps banging, you take the hammer, saying "I see you chose." Then you put it where child can not get it for 10 seconds. After a 10 seconds, ask the child, "Do you want to try again?" If the child says yes, hand child the hammer and repeat your command "Bang on your workbench" child complies--gets lots of hugs, praise, or a small reward (I like 2 tiny candies or a sticker). If, child bangs on coffee table again, hammer is gone until tomorrow.
Really up the praise, affection, treats for compliance or any desirable behavior you see. You want to make sure most of your interactions are positive. This will work best if at least 80% of what your son hears is praise for making good choices, doing what he is asked, or being pleasant. Start making a point of giving him attention for just being quiet, calm, friendly or peaceful.
Lastly, avoid trying to reason with him or explain to him when he is having a tantrum. He won't be able to reason well, and is most likely to escalate to keep your attention. Give commands instead, then you can praise, label his feelings and talk it over after he has complied. After he complies is the time to give all of that nice positive attention and support.
Disclaimer: The information in this post is for informational purposes only. It is never intended to replace face-to-face medical or psychological care. This post is not intended to create a patient-clinician relationship, nor to give or rule-out a diagnosis.