The Short Answer
Pixel art is just drawing at a very low resolution where every individual square matters. Most people overcomplicate it because they try to treat it like regular digital painting. It isn't. You work with a grid. You place colors. You manage aliasing. The rest is details. I started doing this around 2011 when I was trying to make games for a hobby project on Flash. Bought a $5 sprite pack off someone's deviantArt and immediately noticed everything looked soft and blurry. Turns out the artist hadn't bothered with aliasing or proper color management. That was my introduction to the fact that pixel art is technically a discipline, not just small drawing.
How To Make Pixel Art (The Actual Workflow)
Get yourself Aseprite. It costs about $20 on Steam, but there is a free trial and Krita handles pixel art reasonably well if you don't want to spend money. Paint.NET works too but lacks animation support natively, so you end up bouncing between programs and wasting time. Set your canvas to a small resolution. I typically work at 32 by 32 pixels for characters. Some people go as small as 8 by 8, but at that size you are basically making sprites for a 1980s arcade game and the detail ceiling is brutal. If you want anything more than a walking blob, 32 by 32 is your starting point. Bigger characters need 64 by 64. You can always scale down later, but you cannot meaningfully add detail after the fact. Turn on the grid. View then snap to grid, or whatever the equivalent is in your software. You should literally see the cells. Drawing without the grid is how beginners end up with characters that look slightly off because their proportions drifted by one pixel across the canvas.
Start with the outline. Not because it is some sacred rule, but because pixel art relies on clear silhouette readability at small sizes. If your character is a grey smudge from three feet away on a monitor, you have already failed. Use a single consistent line weight. Two pixels thick for main contours, one pixel for inner details. Do not alternate randomly. Inconsistent line weight makes things look messy faster than almost anything else. Flat colors next. Just fill in the basic regions. Skin, hair, shirt, pants. Don't shade yet. The mistake most people make is going straight into shading on a blank canvas. Without flat colors first, you will end up with inconsistent lighting and patches that do not align. I once spent four hours fixing shading on a knight sprite only to realize the flat colors were slightly misaligned between layers and everything looked wrong at different scroll positions. Had to rebuild the flats from scratch. That took another two hours. Now shade. Use a palette with limited colors. I usually stick to 16 to 32 colors per sprite. More than that and you start blending into muddy territory at small resolutions. Use a light source. Pick one direction and stay consistent. Top-left is the standard because it reads naturally, but pick something and commit. Your shadows should be a darker version of your flat color, not just black. Black shadows make things look flat in a bad way. Use a desaturated blue-grey or a dark purple for shadows depending on your base color. It keeps the sprite from looking like a stamp.
Get the Full Details

Highlight next. Usually one value lighter than your flat. Keep it sparse. One or two pixels on edges catching the light. Over-highlighting is the easiest way to make a sprite look cheap and sparkly in the wrong places.
Antialiasing Is Where Beginners Fail
Antialiasing is the practice of placing intermediate-color pixels along curves and diagonal edges to reduce the jagged stair-step appearance. It is not optional. A pure stair-step diagonal on a small sprite looks unintentional even when it is deliberate. The trick is knowing when not to antialias. Horizontal and vertical lines should never be antialiased. They read cleaner as hard edges. Diagonals and curves get the treatment. I used to antialias everything because I thought it looked smoother. My sprites ended up looking like they had been run through a blur filter at low resolution, which is exactly the opposite of what you want. Sharp where it needs to be sharp. Soft only along diagonals. Another thing nobody tells you: when you upscale pixel art for display, nearest-neighbor scaling is mandatory. Bicubic or bilinear interpolation will soften your work and destroy the aesthetic. If you are publishing online, use something like LODE or xBRZ scaling if you need it bigger, but nearest-neighbor is the default for a reason.
Exporting And Optimization
Export as PNG for static images. If you are animating, export as a sprite sheet or as an animated PNG depending on what your target engine supports. GameMaker, Unity, and Godot all handle sprite sheets fine. Animated PNGs are heavier and slower to load, so avoid them unless you specifically need transparency with animation. For GIFs, keep them under 60 frames if you can. The file size explodes and the quality drops fast. Use a dithering setting only if you are trying to simulate gradient shades with a limited palette. Random dithering looks like noise. Ordered dithering, like Bayer matrix patterns, can actually help with gradient simulation but it takes practice to make it look intentional. Most of the time you are better off just expanding your palette by two or three colors and avoiding dithering altogether. One practical thing I learned the hard way: always keep a master file at your working resolution and export scaled versions from that. Scaling up from a 32 by 32 source to 64 by 64 for display is clean. Trying to edit at 64 by 64 and then scaling back down introduces artifacts and misaligned pixels that are a pain to fix manually. Work small, export big.

Color Palette Management
Use a pre-made palette or generate one with a tool like Aseprite's built-in palette generator or external tools like gfxd. Mixing colors from different palettes is the fastest way to make a sprite look disconnected from its environment. If your character uses warm oranges and your background uses cool blues, that is a stylistic choice. If your character uses one orange from here and a completely different orange from somewhere else, it just looks wrong. The 8-bit and 16-bit consoles had hard palette limits. Super Nintendo was 15-bit color with 256 colors on screen at once. Game Boy was four shades of green. These constraints forced designers to make smart choices about color separation and contrast. Modern pixel art does not have those hardware limits, but working with self-imposed constraints usually produces cleaner results than throwing the entire color wheel at a 32 by 32 canvas.
Common Pitfalls
Isolated pixels. A single floating pixel with no connection to anything else. It happens when you are cleaning up an edge and accidentally leave a stray. Zoom out frequently and scan. Those pixels become visible at a glance when you step back. Overworking. You will stare at a sprite and keep adding one more highlight, one more shadow pixel, until it looks stiff and over-processed. Stop when it reads clearly at the target size. If you need to add more detail, increase the canvas resolution instead of cramping more into the same space. Inconsistent scale between sprites. This is a huge problem in game development. If your hero is 32 pixels tall and your enemy is 28 pixels tall, they will look mismatched even if both are individually well-made. Decide on a height standard and stick to it. Measure everything against a reference grid. I use a 3-pixel gap between characters for spacing reference. If two sprites fit comfortably with that gap and look proportionate, the scale is consistent.
There is no shortcut that replaces actually looking at reference material. Good pixel artists study real photography and real art, then translate it into the medium. I used to try to draw entirely from imagination and my sprites looked generic. Once I started placing reference images next to my canvas and actually tracing proportions before simplifying them down to pixels, my work improved noticeably within a week. Not because tracing is the answer, but because it trains your eye to see actual structure instead of what you think structure looks like.
